OPD-dq — OPD 侧完整实验仓归档
rose-bundle-0808 的完整归档: OPD 所有线用的就是这一份(ROSE 侧在
rose-bundle-new, 代码见 rlve-distill-scripts 的 verl_rose/)。
含 checkpoint 权重、FSDP 分片、verl/、数据与启动脚本。
已排除 wandb 离线日志、__pycache__、outputs。
未包含: checkpoints_opd_1p7bbase_from32b_k1024(1.7B-Base←32B K1024,
step 10-70 共 7 个点, 27G) —— 归档前已单独删除。
checkpoint 一览
| 目录 | steps | 构成 | 说明 |
|---|---|---|---|
checkpoints_opd_mb16 |
70, 140 | HF 1 + FSDP 分片 24 | mini_batch=16(每步 4 次更新), RLVE avg@8 0.0556。唯一保留 optimizer 分片、可续训的 |
checkpoints_opd_FINAL2_fp32 |
105, 132 | 纯 HF | fp32 主线, avg@8 0.0694 / 0.0667。实验名 opd_FINAL2_1p7b_4bt_fp32_mini64, console-only 日志无 wandb 记录 |
checkpoints_opd_7168_1p7b_from4bt |
140 | 纯 HF | 官方口径基准线 bf16, avg@8 0.0458。另见单独仓库 official-opd-qwen3-1.7b-from-4b-thinking-7168 |
checkpoints_opd_official_1p7b_from4bt |
140 | 纯 HF | lr 1e-5 / resp 4096, avg@8 0.0486 —— 与上面那条不是同一条线, 别混 |
checkpoints_opd_official_1p7b_from32b |
140 | 纯 HF | 官方口径换 32B 教师 |
checkpoints_opd_1p7b_from32b |
10, 20 | 纯 HF | 只跑到 20 步 |
checkpoints_opd_1p7bbase_from32b |
10, 20 | 纯 HF | 同上, base 版 |
checkpoints_opd_1p7b_from4bt_lr1e6 |
70 | 纯 HF | lr 1e-6 |
checkpoints_opd_lr1e5_n2 |
10-70 | HF 只剩 1 个 | n=2, 多数 step 是空壳 |
checkpoints_opd_dapo_nothink |
220 | 纯 HF | DAPO 上的 OPD, non-thinking |
checkpoints_opd_r1_mb16 |
110 | 纯 HF | R1-Distill-1.5B ← JustRL-1.5B |
checkpoints_opd_lr1e5 / _4bbase_k1024 / _4binst_k1024 |
10-70 | 全空 | 只剩元数据, 权重早已清掉 |
RLVE 评测 (16k, n=8)
| line | avg@8 | pass@8 | 解出 |
|---|---|---|---|
| 基线 未训练 | 0.0333 | 0.1111 | 20 |
| official OPD bf16 (140步) | 0.0458 | 0.1444 | 26 |
| OPD bf16 mini16 (140步) | 0.0556 | 0.1722 | 31 |
| OPD fp32 (105步) | 0.0694 | 0.1833 | 33 |
| OPD fp32 (132步) | 0.0667 | 0.1833 | 33 |
| official ROSE (140步) | 0.0701 | 0.1778 | 32 |
| teacher-SFT n4 bs256 | 0.0556 | 0.1500 | 27 |
fp32 与 official bf16 只差 dtype(train/mini/n、lr、resp、更新次数全同),
上游 on_policy_distillation.sh 默认就是 fp32。
verl 与上游的关系
verl/ 与上游 thunlp/OPD 的 OPD 计算路径逐字节等价。
diff -rq 报 7 处同名文件不同, 逐项核实后全部无影响: 4 处是为 ROSE 新增的条件分支
(core_algos.py 的 register_policy_loss("ce")、rl_dataset.py 的字符串 prompt 分支、
naive.py 的 compute_score is None 兜底、vllm_async_server.py 的 max_tokens 取 min),
3 处是注释里的 hf-mirror URL 替换。详见
rlve-distill-scripts 的 verl_opd/WHICH_VERL.md。
跑法
PYTHONPATH=<本仓库>/verl python3 -m verl.trainer.main_ppo ...
启动脚本见 run_opd_baseline.sh / run_opd_official.sh,
以及 rlve-distill-scripts 的 opd/ opd_dapo/。