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
- 预测结果明显大量预测为某一类

微调方案与已完成工作
1. 微调技术路线
采用 QLoRA(4bit)+ LoRA Adapter 的参数高效微调方案:
- 基模型:Qwen2.5-7B-Instruct
- 量化:NF4 4-bit
- LoRA 插入位置:
q_proj,k_proj,v_proj,o_proj
- 训练参数量:
- 可训练参数约 10M
- 占原模型参数约 0.13%
2. 微调方式尝试
方案 A:生成式 SFT
- 训练方式:
- 输入:system + user + assistant
- Loss:Causal LM token-level loss(本来想先不加mask微调)
- 结果:失败
- 猜测可能的问题:
- loss 对 system / user / assistant 都生效
- 实际训练目标是“复述 prompt + 输出 JSON”
- 与评测的分类不对齐
结果:
训练时loss下降,但是微调后正确率下降,预测分布更加偏置。
方案 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}
3. 结论
- 微调未带来稳定的准确率提升
- 预测依然严重偏向某一类别
- 模型未学到清晰的三分类决策边界
疑问与进一步计划:
- 为什么会全部偏置到同一类,训练集6000条,三类各2000条(14b模型基线正确率50%无明显偏置)
- 计划,目前暂时是简单的三分类,未扩展到更多的情况,所以尝试机器学习分类,看看是不是数据集有问题,如果成功检查微调代码,看看是不是有什么问题或者试试框架llama-factory来做sft