3.5 KiB
3.5 KiB
DPO Full-Log Qwen 2B Server Bundle
这个目录是给你直接拷到服务器跑 full-log DPO 用的。
包含内容:
data/train_dpo_clean.jsonldata/dev_dpo_clean.jsonldata/train_dpo_full.jsonldata/dev_dpo_full.jsonldata/raw_final_train_pairs.jsonldata/raw_final_dev_pairs.jsonlreports/final_train_pairs_report.jsonreports/final_dev_pairs_report.jsonscripts/train_dpo.pyscripts/analyze_token_lengths.pyrun_train.shrequirements.txtmanifest.json
设计定位
- 这版用的是
full-logprompt,而不是之前压缩版 DPO prompt。 - 主目标是让训练分布尽量靠近 benchmark 的 baseline zero-shot 长日志输入。
- 默认走
reference_free + QLoRA + bf16 + sdpa,优先保证 2B 级模型能在你的服务器上跑起来。
关于 “2B”
我这里没有把模型名写死成某个你机器上未必缓存过的 checkpoint。
默认值是:
Qwen/Qwen3-1.7B
这基本就是你这次要试的 “2B 档”。如果你服务器上实际要跑的是别的 Qwen 1.5B/1.7B/2B 级模型,直接改 --model-name 即可。
GPU 参数
run_train.sh 支持:
--gpu-count 0:单卡,只用 GPU 0--gpu-count 1:单卡,只用 GPU 1--gpu-count 2:双卡,CUDA_VISIBLE_DEVICES=0,1
这三个值就是你要的映射,不是“GPU 张数”的自然数语义。
默认训练策略
- 默认数据:
clean - 默认模型:
Qwen/Qwen3-1.7B - 默认 attention:
sdpa - 默认 reference:
reference_free - 默认截断:
keep_end
默认长度:
--gpu-count 0/1:max_length=4096max_prompt_length=3584max_completion_length=512
--gpu-count 2:max_length=6144max_prompt_length=5632max_completion_length=512
这是偏保守但能跑的起点。full-log 原始 prompt 远超这个长度,所以仍然会截断,但会比你之前的 ultra-lowmem 版本保留更多原始日志。
直接跑
先装依赖:
pip install -r requirements.txt
双卡直接跑:
bash run_train.sh --gpu-count 2 --model-name Qwen/Qwen3-1.7B
单卡 0:
bash run_train.sh --gpu-count 0 --model-name Qwen/Qwen3-1.7B
单卡 1:
bash run_train.sh --gpu-count 1 --model-name Qwen/Qwen3-1.7B
常见覆盖方式
跑 full 数据而不是 clean:
bash run_train.sh --gpu-count 2 --model-name Qwen/Qwen3-1.7B --data-variant full
手动调长度:
MAX_LENGTH=7168 MAX_PROMPT_LENGTH=6656 MAX_COMPLETION_LENGTH=512 bash run_train.sh --gpu-count 2 --model-name Qwen/Qwen3-1.7B
从 checkpoint 续跑:
bash run_train.sh --gpu-count 2 --model-name Qwen/Qwen3-1.7B --resume-from-checkpoint outputs/your_run/checkpoint-50
训练前建议
先测一下 token 长度分布:
python scripts/analyze_token_lengths.py --model-name Qwen/Qwen3-1.7B --train-file data/train_dpo_clean.jsonl --dev-file data/dev_dpo_clean.jsonl
如果你发现 2B 在双卡上还有余量,再逐步把 MAX_LENGTH / MAX_PROMPT_LENGTH 往上抬,不要一次拉太猛。
数据说明
clean:- 去掉了
weak_model_actual_error + parse_fail这类纯脏 rejected - train
2399 - dev
284
- 去掉了
full:- 保留全部 pair
- train
2500 - dev
300
建议的对比方式
如果你要比较训练前后效果,优先用和这套数据分布一致的:
baseline zero-shot full-log prompt
不要先拿压缩 prompt 的旧版 benchmark 结论去判断这次 full-log DPO 是否有效,不然结论会混。