ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

32B 的知识压进 8B:slime 的 On-Policy Distillation(OPD)实战

32B 的知识压进 8B:slime 的 On-Policy Distillation(OPD)实战 32B 的知识压进 8Bslime 的 On-Policy DistillationOPD实战【免费下载链接】slimeslime is an LLM post-training framework for RL Scaling.项目地址: https://gitcode.com/GitHub_Trending/slime12/slimeslime 是面向 RL scaling 的 LLM 后训练框架其中的 On-Policy DistillationOPD模块让小型学生模型在自己采样的轨迹上、逐 token 向大模型教师学习把蒸馏信号直接融进强化学习循环而不必额外搭一条 SFT 流水线。为什么你的 8B 模型总在差一口气单卡跑得动的 8B 模型在很多任务上离 32B 还差一截换 32B 又意味着多卡部署、更高延迟、更贵推理账单。蒸馏的直觉很简单既然大模型已经会了让小模型模仿它就行。但朴素做法拿教师生成的样本做 SFT有个坑——学生上线后走的是自己生成的轨迹而它见过的全是教师的轨迹误差会沿轨迹累积。OPD 换个思路让学生自己采样教师只对学生实际写出的每个 token打分这样学生永远在自己会遇到的分布上学习教师的分布。OPD 到底在 RL 循环里干了什么说白了OPD 不是一个独立的训练阶段它就是一个加在 advantage 上的 KL 散度惩罚项。rollout 结束后框架拿到学生生成的 token 序列教师为其中每个 token 给出 log-prob两者相减得到 token 级的逆 KL 采样估计$$\hat{d}t \log \pi\theta(a_t \mid h_t) - \log \pi_T(a_t \mid h_t)$$然后修正 advantage$\hat{A}t A_t - \lambda{opd}\hat{d}t$其中 $\lambda{opd}$ 就是--opd-kl-coef。注意 KL 的次序学生分布在前、期望对学生分布取值教师不生成任何训练轨迹只负责评估学生实际采样的 token。on-policy三字就体现在这条闭环里学生自己采样、教师打分、差值反向传播。这个设计让它和优势估计器完全正交GRPO、PPO、REINFORCE 随便挑OPD 项只是叠加在 advantage 上的一个修正。任务奖励为零时它就是纯蒸馏有奖励时蒸馏信号和任务信号共存。在 SGLang 模式的实现里slime/rollout/on_policy_distillation.pyreward_func把学生采样的 token ID 发给教师服务器换回 log-probpost_process_rewards再裁剪到 response 范围、写回sample.teacher_log_probs训练阶段消费这个张量。两条部署路径一张表选明白维度SGLang 外部教师Megatron 同进程教师适用场景教师与学生架构不同或太大装不进训练显存教师与学生同架构且装得下硬件要求教师服务器独立占卡示例中 32B 单卡、mem-fraction-static 0.6教师权重常驻训练进程显存训练侧要预留出第二份模型的预算教师加载方式启动sglang.launch_server训练侧经--rm-url发 HTTP 请求--opd-teacher-load指向 Megatron 格式torch_distcheckpoint典型延迟开销每条样本多一次网络往返取 log-probrollout 变慢每次训练前向多一次教师 forward无网络跳数两条路径的启动命令各一条示例脚本在 examples/on_policy_distillation/# SGLang 模式脚本先拉起教师服务器再提交训练任务 bash examples/on_policy_distillation/run-qwen3-8B-opd.sh# Megatron 模式教师直接加载进训练进程无需外部服务器 bash examples/on_policy_distillation/run-qwen3-8B-opd-megatron.sh无论选哪条教师和学生必须使用兼容的 tokenizer 和词表——教师是按学生的原始 token ID 打分的。4 个参数决定蒸馏上限参数作用推荐值调参方向--use-opd启用 On-Policy Distillation总开关必须设置无调参空间缺--opd-type会直接报错--opd-type教师接入方式sglang或megatron按部署条件二选一架构不同 / 显存不够 →sglang同架构追吞吐 →megatron--opd-kl-coefKL 惩罚权重控制蒸馏信号相对 RL advantage 的强度1.0学生过拟合教师、自身能力退化 → 调小蒸馏信号太弱、收敛慢 → 调大实用区间 0.5-2.0--opd-teacher-load教师 Megatron checkpoint 路径megatron 模式必填sglang模式下必须不设置设了会报冲突错误Megatron 模式下教师 checkpoint 必须是转换过的格式用仓库里的tools/convert_hf_to_torch_dist.py从 HuggingFace 权重转成 torch_dist 即可另有可选的--opd-teacher-ckpt-step指定教师的具体步数。76% → 94%数字背后的代价示例中用 Qwen3-8B-Base 在 OpenThoughts3-1.2M 的一部分数据上做 SFT再在剩余数据上用 Qwen3-32B 教师做 OPDMath500 结果配置Pass1Qwen3-8B-Base SFT76%Qwen3-8B-Base SFT OPD32B 教师94%代价同样真实每个 rollout 步都要为教师多跑一次前向SGLang 模式还多一次网络请求单步训练时间整体上涨教师 checkpoint 全程常驻显存Megatron 模式下训练侧显存要同时装下两份模型集群规模可能被迫上调。如果你…那么选…选型决策树如果教师和学生架构不同比如跨系列模型或者教师大到装不进训练显存选 SGLang 模式给它独立 GPU 甚至独立机器代价是每条样本一次 HTTP 往返。如果教师和学生同架构比如都是 Qwen3 系、且训练集群装得下两份权重选 Megatron 模式省掉网络请求教师在训练前向内联出 log-prob。关于--opd-kl-coef默认 1.0 先用起来观察学生输出是否被教师带偏多样性下降、自身任务能力退化就往 0.5 方向调蒸馏起效慢就往 2.0 方向调不建议超出 0.5-2.0 区间盲调。如果你计划多个教师混合目前只支持单教师多教师功能还没有别在配置上空耗时间。OPD 的价值是让小模型用一条 KL 惩罚项在自己轨迹上学到大模型的 token 级分布。原理细节见 docs/zh/advanced/完整示例与参数在 examples/on_policy_distillation/。【免费下载链接】slimeslime is an LLM post-training framework for RL Scaling.项目地址: https://gitcode.com/GitHub_Trending/slime12/slime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表