模型 / 数据集
lasgroup/SDPO avatar
lasgroup/SDPO

SDPO:把环境反馈蒸馏回策略的自我蒸馏强化学习框架

Reinforcement Learning via Self-Distillation (SDPO)

1,098 个 Star125 个 ForkPythonApache-2.0

秒懂

它是什么?
lasgroup/SDPO 用模型自身在反馈条件下的预测作为教师信号,把稀疏的结果奖励变成逐 token 的稠密监督。本文梳理它的机制、安装路径、真实限制,以及它不适合的场景。
适合谁用?
SDPO 适合手上有可验证任务、能拿到文本型反馈(运行时错误、判题结果)、并且拥有多卡 NVIDIA 环境的研究团队,尤其是已经在跑 GRPO 类 on-policy 流程、想把反馈信息用起来的人。不适合只有单卡消费级硬件、或任务本身没有可读反馈信号的团队,因为 README 给出的训练配置以 4 张 GH200 为基准,本地安装路径也没有覆盖低显存场景。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 76 天前。
用什么语言写的?
主要是 Python(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

SDPO 要解决的是信用分配,不是奖励设计

可验证奖励强化学习(RLVR)的常见做法是每次尝试只拿一个标量结果奖励:对或错。README 把这一点称为严重的信用分配瓶颈。问题在于,很多可验证环境其实会吐出文本:运行时报错、判题器的评语、失败原因。这些信息解释了为什么错,却通常被丢掉,因为策略梯度只消费那个标量。SDPO 把这种设定形式化为 Reinforcement Learning with Rich Feedback(RLRF),目标读者是需要从代码和数学任务里榨出更多学习信号的训练团队。它的定位不是换一个奖励函数,而是换一种把已有反馈转成梯度信号的方式。如果你的任务只有对错、没有可读反馈,SDPO 仍然声称可用,但走的是另一条路:复用高奖励轨迹作为隐式反馈。

自我蒸馏的机制:反馈条件下的模型当教师

SDPO 的核心动作是把当前模型在反馈条件下的下一 token 预测当作自教师,再把这些预测蒸馏回策略本身。README 的表述是,模型具备在上下文中回溯识别自身错误的能力,SDPO 就是把这种能力变成监督信号。整个过程不需要外部教师模型,也不需要显式奖励模型。按 README 的描述,它支持三个粒度的信用分配:logit 级、token 级、序列级,其中 logit 级最稠密。训练循环上,SDPO 与 on-policy GRPO 一样,每个生成批次做一次梯度步,而 README 说明 GRPO 在该对比中做了 4 次 off-policy 小批次步。这个差异值得注意:SDPO 用更少的梯度步换取更稠密的信号,因此单位算力的收益取决于反馈质量,而不是取决于把同一批数据多刷几遍。

没有丰富反馈时,它退化成复用高奖励轨迹

README 专门用一节讲稀疏或规则化反馈的情况。此时 SDPO 不再依赖环境文本,而是把高奖励 rollout 当作隐式反馈,仍然提供稠密监督。这条路径的代价是:隐式反馈的信息量低于真实错误信息,模型只能从做对的样本里学,学不到做错的原因。README 在 Chemistry 任务上给出 Olmo3-7B-Instruct 的训练曲线,报告 16 样本平均准确率和 5 步滚动平均的响应长度,并说明每个配置跑 3 个随机种子、以阴影区表示标准误。这些数字属于论文作者的实验条件,不是可迁移的性能保证。对采用者来说,真正要判断的是:你的环境能不能提供文本反馈。能,SDPO 的价值主要来自稠密信用分配;不能,它和复用成功轨迹的做法差别就没那么大。

测试时自我蒸馏是另一条独立路径

除了训练,README 还描述了 test-time self-distillation:生成多个候选解,挑出高质量响应,把它们当作示例复用,让模型在推理阶段迭代改进输出,声称无需额外训练即可在困难推理任务上取得增益。README 展示的是困难编程题上的解决率曲线,并称 SDPO 能解出基座模型和多轮交互都解不出的题。这一节的材料比较薄:没有给出筛选高质量响应的具体判据,也没有说明生成预算如何影响挑选成本。如果候选解需要靠外部判题器打分,那么推理成本会随预算线性增长,这部分开销 README 没有量化。把测试时自我蒸馏当成训练流程之外的独立开关来评估更稳妥。

安装:GH200 走容器,其余走本地 pip

README 给出两条路径。面向 NVIDIA GH200(aarch64)集群、CUDA 13.1 的路径基于 NGC vLLM 容器,命令是 podman build . -f Dockerfile.gh200 -t sdpo-gh200,随后用 enroot import -x mount -o sdpo-gh200.sqsh podman://localhost/sdpo-gh200:latest 导出为 squashfs 供集群使用。README 注明该镜像使用 requirements-gh200.txt,内容是从 requirements-full.txt 中剔除 NGC vLLM 容器已预装的包(torch、vllm、flash-attn、xformers、triton)后的固定版本。本地安装则先装 PyTorch:Ampere/Hopper(RTX 30/40、H100)用 pip install torch==2.5.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124,Blackwell(RTX 50、RTX PRO 2000 Blackwell)用 torch==2.7.0 配 cu128 索引。系统要求写明 Linux(在 SLES 15 SP5 和 Ubuntu 22.04 上测试)、NVIDIA GPU、Python 3.12(测试于 3.12.3)。README 的本地安装段落在安装核心依赖处被截断,完整命令需回仓库核对。

硬件与依赖是真实的采用门槛

README 的实验条件写明每次运行使用一台含 4 张 NVIDIA GH200 的节点,加上初始化和验证,单次运行约 6 小时。这是作者用于对比 SDPO 与 GRPO 的配置,不是最低要求,但它划出了一条现实边界:没有多卡 Hopper 级别硬件的团队,很难复现 README 里那种时间尺度的对比。两条 PyTorch 安装路径分别绑定 cu124 和 cu128,容器路径则绑定 CUDA 13.1 与 NGC vLLM 基础镜像,三者互不通用。requirements-gh200.txt 之所以存在,是因为容器里已经有 torch、vllm、flash-attn、xformers、triton,本地安装时这些包必须由你自己装,版本冲突的风险落在使用者这边。仓库没有检索到发布版本,也没有在 README 中给出升级或迁移说明,因此跟进上游改动只能靠直接比对 main 分支。

和 GRPO 的差别在信号密度,不在算法家族

最直接的对照是 GRPO。两者都属于 on-policy 优化,README 说明在该对比中 GRPO 每个生成批次做 4 次 off-policy 小批次步,SDPO 只做 1 次梯度步。差异出现在监督信号上:GRPO 从标量结果奖励出发,SDPO 额外消费反馈文本,把教师分布限定在反馈条件下的下一 token 预测上。README 在代码任务上给出曲线,称 SDPO 在有丰富反馈时一致优于 GRPO,并称自教师在训练中持续改善、最终学生明显超过初始教师。这些结论来自作者自己的实验设置和调参(README 说明按 5 小时准确率选择最优超参数)。如果你的环境只有对错信号,GRPO 这类方法的工程成熟度和社区实现更多,切换的动力就弱;只有当反馈文本确实携带可用的错误信息时,SDPO 的额外机制才有对应的回报。

许可证与维护成本

仓库采用 Apache-2.0,允许商用与修改,附带专利授权条款,同时要求保留版权与许可声明。这里不构成法律意见,实际合规判断请交给法务。维护成本方面,README 没有提供发布版本记录,代码只存在于 main 分支,也没有升级指南。这意味着跟进上游等于跟踪一个移动目标:PyTorch 版本在 README 中被精确固定(2.5.1 或 2.7.0),容器路径固定 CUDA 13.1 与特定 NGC 镜像,任何一端变动都可能需要你自己重新对齐 requirements-full.txt 与 requirements-gh200.txt 的差集。把版本锁定写进自己的构建流程,比依赖仓库保持兼容更可靠。

编辑结论

SDPO 适合手上有可验证任务、能拿到文本型反馈(运行时错误、判题结果)、并且拥有多卡 NVIDIA 环境的研究团队,尤其是已经在跑 GRPO 类 on-policy 流程、想把反馈信息用起来的人。不适合只有单卡消费级硬件、或任务本身没有可读反馈信号的团队,因为 README 给出的训练配置以 4 张 GH200 为基准,本地安装路径也没有覆盖低显存场景。动手前先确认三件事:requirements-full.txt 与 requirements-gh200.txt 的差异是否影响你的 CUDA 版本,Dockerfile.gh200 里的 NGC vLLM 基础镜像是否与你的驱动匹配,以及 test-time self-distillation 是否真的不需要额外训练就能在你的任务上产生可复现的增益。

官方来源

  1. Issues
  2. lasgroup/SDPO on GitHub
  3. License: Apache-2.0
  4. Project website
  5. README
社区笔记

社区笔记