2.6 KiB
2.6 KiB
SFT Full-Log Qwen3.5-2B Server Bundle
这个目录可以直接拷到服务器上做 full-log SFT。
包含内容
data/train_sft.jsonldata/dev_sft.jsonlscripts/train_sft.pyscripts/analyze_sft_lengths.pyscripts/compare_eval_results.pyscripts/build_sft_dataset.pyrun_train.shrequirements.txtmanifest.json
数据说明
- 训练格式是 chosen-only 的对话式 SFT。
- 每条样本是单个
messages字段,包含:systemuserassistant
- 数据来源是 full-log preference pairs 的
chosen侧。 - 这意味着训练分布比之前压缩版 DPO 更接近 benchmark baseline 的原始长日志输入。
默认模型
默认就是:
Qwen/Qwen3.5-2B
GPU 参数
run_train.sh 支持:
--gpu-count 0:只用 GPU 0--gpu-count 1:只用 GPU 1--gpu-count 2:双卡
这里双卡仍然是 torchrun 数据并行,不是模型切分,所以默认长度不会因为双卡自动放大。
默认训练配置
max_length=4096max_prompt_length=3584max_completion_length=512reference-free不再相关,因为这是 SFT 不是 DPOsdpaQLoRA + 4bit + bf16
训练
先装依赖:
pip install -r requirements.txt
训练前先看长度:
python scripts/analyze_sft_lengths.py --model-name Qwen/Qwen3.5-2B --train-file data/train_sft.jsonl --dev-file data/dev_sft.jsonl
双卡训练:
bash run_train.sh --gpu-count 2 --model-name Qwen/Qwen3.5-2B
单卡 0:
bash run_train.sh --gpu-count 0 --model-name Qwen/Qwen3.5-2B
单卡 1:
bash run_train.sh --gpu-count 1 --model-name Qwen/Qwen3.5-2B
如果显存还有余量,再手动抬长度:
MAX_LENGTH=6144 MAX_PROMPT_LENGTH=5632 MAX_COMPLETION_LENGTH=512 bash run_train.sh --gpu-count 2 --model-name Qwen/Qwen3.5-2B
训练前后对比
建议继续用 benchmark 的 baseline prompt 做主对比,命令风格保持你之前那套:
训练前:
python eval_api.py --model Qwen/Qwen3.5-2B --api-base http://localhost:8000/v1 --api-key not-needed --temperature 0 --no_thinking --output-dir results/qwen35_2b_before
训练后:
python eval_api.py --model your-sft-model --api-base http://localhost:8000/v1 --api-key not-needed --temperature 0 --no_thinking --output-dir results/qwen35_2b_after_sft
对比:
python scripts/compare_eval_results.py --before ../results/qwen35_2b_before --after ../results/qwen35_2b_after_sft
如果你把 bundle 放到别的目录,--before / --after 直接传两个结果目录或两个 summary.json 路径即可。