关于微调的汇报

CUDA_VISIBLE_DEVICES=2,3
python -m vllm.entrypoints.openai.api_server
–model /netcache/huggingface/Qwen2.5-7B-Instruct
–tensor-parallel-size 2
–host 0.0.0.0
–port 18001
–gpu-memory-utilization 0.7
–dtype float16

{‘loss’: 0.8365, ‘grad_norm’: 0.0769263431429863, ‘learning_rate’: 4.241918085821547e-05, ‘epoch’: 0.71}
{‘loss’: 0.8559, ‘grad_norm’: 0.08880975842475891, ‘learning_rate’: 2.9870182219917564e-05, ‘epoch’: 0.76}
{‘loss’: 0.8649, ‘grad_norm’: 0.08375994861125946, ‘learning_rate’: 1.9194584955692706e-05, ‘epoch’: 0.81}
{‘loss’: 0.8305, ‘grad_norm’: 0.09028902649879456, ‘learning_rate’: 1.067756988044848e-05, ‘epoch’: 0.86}
100%|██████████████████████████████████████████████████████████████| 396/396 [3:17:24<00:00, 29.91s/it]

LoRA saved to: /home/wanglu/whz/11/lora_trajrel_qwen2p5_7b

CUDA_VISIBLE_DEVICES=2,3
python -m vllm.entrypoints.openai.api_server
–model /netcache/huggingface/Qwen2.5-7B-Instruct
–tensor-parallel-size 2
–host 0.0.0.0
–port 18001
–gpu-memory-utilization 0.7
–dtype float16
–enable-lora
–lora-modules trajrel=/home/wanglu/whz/11/lora_trajrel_qwen2p5_7b
–max-loras 1
–max-lora-rank 16

工作汇报

基线结果

1. 数据构成

  • 训练集:train.jsonl,共 6334 条
  • 验证集:val.jsonl,共 680 条
  • 每条样本格式:
    • system:任务说明(分类任务)
    • user:轨迹文本输入(长序列,包含多帧信息)
    • assistant:JSON 格式标签,例如:{"relation": "yields to"}

2. 初始基线评测(未微调)

使用 Qwen2.5-7B-Instruct,通过 vLLM API 进行推理评测,结果如下(val 集):

  • Accuracy ≈ 0.40
  • Macro Recall ≈ 0.38
  • Macro F1 ≈ 0.30
  • 预测结果明显大量预测为某一类
    alt text

微调方案与已完成工作

1. 微调技术路线

采用 QLoRA(4bit)+ LoRA Adapter 的参数高效微调方案:

  • 基模型:Qwen2.5-7B-Instruct
  • 量化:NF4 4-bit
  • LoRA 插入位置:
    • q_projk_projv_projo_proj
  • 训练参数量:
    • 可训练参数约 10M
    • 占原模型参数约 0.13%

2. 微调方式尝试

方案 A:生成式 SFT

  • 训练方式:
    • 输入:system + user + assistant
    • Loss:Causal LM token-level loss(本来想先不加mask微调)
  • 结果:失败
  • 猜测可能的问题:
    • loss 对 system / user / assistant 都生效
    • 实际训练目标是“复述 prompt + 输出 JSON”
    • 与评测的分类不对齐

结果:
训练时loss下降,但是微调后正确率下降,预测分布更加偏置。
alt text

方案 B:Masked SFT

  • 改进点:
    • 只在 assistant 输出部分计算 loss,计算token 级别的交叉熵损失
    • system / user token 的 label 设为 -100(mask 掉)
  • 技术实现:
    • 使用 tokenizer chat_template 定位 assistant token 区间
    • 构造 labels,确保 loss 只反向传播到答案部分
  • 训练资源:
    • 单张 RTX 3090
    • 训练 2 个 epoch
    • 训练耗时约 6.5 小时

训练日志

  • 训练 loss:
    • 初始 ≈ 1.14
    • 收敛至 ≈ 0.83
  • 梯度稳定,无数值异常
  • LoRA 文件成功保存:/home/wanglu/whz/11/lora_trajrel_qwen2p5_7b_masked

从训练角度看,模型是收敛的,训练过程正常

微调模型评测

1. 挂载方式

  • 使用 vLLM API Server
  • 基模型:Qwen2.5-7B-Instruct
  • LoRA Adapter:trajrel
  • 支持通过 model=trajrel 或显式指定 LoRA 进行推理

CUDA_VISIBLE_DEVICES=2,3
python -m vllm.entrypoints.openai.api_server
–model /netcache/huggingface/Qwen2.5-7B-Instruct
–tensor-parallel-size 2
–host 0.0.0.0
–port 18001
–gpu-memory-utilization 0.7
–dtype float16
–enable-lora
–lora-modules trajrel=/home/wanglu/whz/11/lora_trajrel_qwen2p5_7b
–max-loras 1
–max-lora-rank 16

2. 微调后评测结果(val 集 / 子集)

结果如下:
metrics: {‘total_scenarios’: 680, ‘valid_count’: 680, ‘invalid_count’: 0, ‘accuracy’: 0.325, ‘recall_macro’: 0.3572, ‘f1_macro’: 0.2591}
alt text

3. 结论

  • 微调未带来稳定的准确率提升
  • 预测依然严重偏向某一类别
  • 模型未学到清晰的三分类决策边界

疑问与进一步计划:

  • 为什么会全部偏置到同一类,训练集6000条,三类各2000条(14b模型基线正确率50%无明显偏置)
  • 计划,目前暂时是简单的三分类,未扩展到更多的情况,所以尝试机器学习分类,看看是不是数据集有问题,如果成功检查微调代码,看看是不是有什么问题或者试试框架llama-factory来做sft
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇