YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
RLVE 蒸馏实验脚本包
Qwen3-1.7B 学生, RLVE 单轮 (9000 训练 prompt / 180 测试题) 上对比三种蒸馏方式。
三种方法的区别
| 方法 | 学生做什么 | teacher 做什么 | loss 加在哪 |
|---|---|---|---|
| OPD | 自己 rollout 到 MAX_RESP_LENGTH 截断 |
对学生生成的每个 token 打分(in-cluster reward-model worker, 不是 server) | 学生自己写的整段 |
| 在线 ROSE | 只写前 CUT_FIXED 个 token 当前缀 |
接管续写 TEACHER_MAX_TOKENS 个 token(独立 vLLM server, HTTP) |
只在 teacher 续写的部分 |
| 迭代 ROSE | 冻结, 先采完整轮 9000 条前缀 | 同上, 但整轮离线采完 | 同上, 之后跑普通 SFT; 下一轮学生换成本轮产物 |
⚠️ teacher 归属(踩过坑, 务必核对)
rose-bundle-new/bootstrap.sh 里 TEACHER_REPO 默认值是 Qwen/Qwen3-4B-Thinking-2507,
不是 32B。没显式 export 就会静默用 4B。按实际运行日志(teacher*.out 里的
teacher: /home/haojinw2/models/XXX 行, 以及 OPD 训练日志开头的 teacher : 行)核对结果:
| 时期 | teacher | 涉及的线 |
|---|---|---|
| Aug 7-9 | Qwen3-4B-Thinking-2507 | checkpoints_opd_lr1e5*, checkpoints_k4096*, iter_runs/rose_iter_noeos, iter_runs/rose_iter_k4096 |
| Aug 10 起 | Qwen3-32B | checkpoints_opd_1p7b_from32b*, checkpoints_rose_1p7b_from32b*, iter_runs/rose_iter_k4096t4096, iter_runs/rose_iter_k4096t1024_32b |
另: models/opd_rlve_step70 是 2026-08-07 从 HuggingFace 下载的第三方 checkpoint
(见 dl_opd.out), 不是本地训练产物, teacher 不可考, 不要当作自训 OPD 对照。
自训的那条是 checkpoints_opd_1p7b_from32b_v2, 已上传 SeanWang0027/opd-rlve-qwen3-1.7b-from-32b。
目录
opd/ OPD 训练脚本。★run_opd_1p7b_from32b_v2.sh = 1.7B<-32B resp4096, 主对照
rose_online/ 在线 ROSE。★run_rose_1p7b_32b.sh = K4096+t1024; _k4096t4096.sh = K4096+t4096
bootstrap.sh 是 teacher server / trainer 的统一入口
rose_iter/ 迭代 ROSE。run_iter.sh 是主循环, collect_round.py 采数据,
continuation_dataset.py 做 prefix mask(loss 只算 teacher 续写部分)
launchers/ 两条 32B teacher 迭代线的完整启动脚本(含 teacher server 拉起与显存探针)
sft/ 纯 SFT 基线
eval/ rlve_eval.py 主评测; retrunc_eval.py 把 32k rollouts 精确截断到小 budget
重判(纯 CPU, 不占 GPU); merge_eval.py 合并分片; verify_hf_weights.py 校验
probe/ 显存 / GPU 利用率探针
recipe/ 在线 ROSE 的 verl recipe 核心(agent loop 与 reward)
results/ 16k 口径结果快照
关键超参
三条线学习率统一 LR=1e-5。OPD/在线ROSE 70 步, n=2 rollout;
迭代 ROSE 每轮 1 epoch (70 步), batch 128, n=1。
评测口径
一律用 16k: CTX=18432 MAX_NEW=16384 N=8 TEMP=0.7 TOP_P=0.9 TOP_K=-1。
若手上已有 32k rollouts, 用 eval/retrunc_eval.py 16384 <SRC_TAG> <DST_TAG> 截断重判即可
—— 这是精确重测不是近似(vLLM 的 max_tokens 不影响前面 token 的采样分布), 实测与原生
16k 采样差约 0.011, 在噪声内。
vLLM 上下文坑
teacher server 的 --max-model-len 必须 >= prompt + 前缀 + TEACHER_MAX_TOKENS。
K=4096 且 teacher 预算 4096 时, 默认的 8192 会让请求报 400,
需 TEACHER_MAX_MODEL_LEN=12288 TEACHER_MAX_SEQS=64。
2026-08-15 变更
1. 在线 ROSE 补上 LR schedule 开关 (rose_online/run_rose_online.sh)
在此之前这个脚本只向 verl 传 optim.lr,lr_scheduler_type 和
lr_warmup_steps_ratio 一次都没传过,吃的是 verl 默认(constant + 无 warmup)。
训练日志实测 actor/lr 从 step0 到 step69 恒为 1e-05。这是遗漏而非设计——
离线迭代版 rose_iter/run_iter.sh 一直带 cosine + 10% warmup,所以历次
"在线 vs 离线" 对比里优化器调度是个未受控变量。
新增三个环境变量,默认值保持旧行为不变:
WARMUP=0.0 # lr_warmup_steps_ratio
SCHEDULER=constant # constant | cosine
MIN_LR_RATIO=0.0 # cosine 的地板
调度粒度:fsdp_workers.py:893 在 update_actor 末尾每个 training step 走一格,
num_training_steps 由 ray_trainer.py:433 从 trainer.total_training_steps 注入。
ppo_mini_batch_size == train_batch_size 时一步一更新一格,70 步 = 70 格,
余弦在最后一步走完。若把 mini_batch 调小,一个 tick 内会有多次 optimizer step 而
lr 不变,语义会变。
2. 新增 rose_online/run_rose_1p7b_4bt_k4096_cosine.sh
K=4096 + teacher 1024 + Qwen3-4B-Thinking-2507,唯一变量是 cosine 衰减。 对照:同配置恒定 lr 的 step20 是 16k pass@8 0.1833。
3. 在线 ROSE 加 inference-time verifier 筛选 (recipe/rose_agent_loop.py)
prompt ─[student K1]─[teacher K2]─[student 写到有答案]─→ verifier
\___________ 训练 ______/ \____ 只用于判定, 丢弃 ____/
verify_mode=keep_correct 时,学生最终答错的行 response_mask 全置 0(不产生梯度)。
第三段不参与训练,所以 MAX_RESP_LENGTH 不变,但 rollout 引擎的 MAX_MODEL_LEN
必须装下 prompt+K1+K2+续写——这两个长度在本次改动中解耦了。
新指标:rose/verify_attempted rose/verify_correct rose/verify_kept。
4. 新增 eval/interleave_eval.py —— 交错推理评测
上面那套机制的离线版,用来在开训之前先测清楚值不值得。三阶段拼接走 token ids 不经文本 round-trip。实测结果(student=未训练 Qwen3-1.7B,16k 口径 n=8):
| 配置 | teacher | pass@8 | keep率 |
|---|---|---|---|
| 基线(无 teacher) | — | 0.1111 | — |
| 1024 + 1024 | 32B | 0.2667 | 7.22% |
| 1024 + 4096 | 32B | 0.4111 | 13.82% |
| 2048 + 4096 | 32B | 0.3889 | 12.57% |
| 4096 + 4096 | 32B | 0.3111 | 9.65% |
注意这是推理时 teacher 在场的联合推理,不是蒸馏后的单模型能力。 teacher 自然收尾率在所有档位都只有 1.5% 左右,提升与"teacher 有没有写完"无关, 只与"注入了多少 teacher 内容"有关。