Files
llmiotsafe/DPO_FULLLOG_QWEN2B_SERVER_BUNDLE/README.md
2026-05-12 17:01:39 +08:00

3.5 KiB
Raw Blame History

DPO Full-Log Qwen 2B Server Bundle

这个目录是给你直接拷到服务器跑 full-log DPO 用的。

包含内容:

  • data/train_dpo_clean.jsonl
  • data/dev_dpo_clean.jsonl
  • data/train_dpo_full.jsonl
  • data/dev_dpo_full.jsonl
  • data/raw_final_train_pairs.jsonl
  • data/raw_final_dev_pairs.jsonl
  • reports/final_train_pairs_report.json
  • reports/final_dev_pairs_report.json
  • scripts/train_dpo.py
  • scripts/analyze_token_lengths.py
  • run_train.sh
  • requirements.txt
  • manifest.json

设计定位

  • 这版用的是 full-log prompt而不是之前压缩版 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
  • 默认 attentionsdpa
  • 默认 referencereference_free
  • 默认截断:keep_end

默认长度:

  • --gpu-count 0/1
    • max_length=4096
    • max_prompt_length=3584
    • max_completion_length=512
  • --gpu-count 2
    • max_length=6144
    • max_prompt_length=5632
    • max_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 是否有效,不然结论会混。