## 需求 RLSL 两阶段流水线的闭环缺一个 reward 评分端点。 - **Phase 1(已落地,#424)**:reward model 训练,产出带 value head 的 adapter(`adapter_config.json` 标记 `reward_model: true`), Bradley-Terry 损失,`score(chosen) > score(rejected)`。 - **Phase 2(已落地,#363/PR#466)**:GRPO PPO-clipped 策略更新,通过 `config.reward_endpoint` 回调拿 reward:`POST {prompt, completions:[str]} -> {rewards:[float]}`。 **缺口**:Phase 1 训出的 reward adapter 没有任何 HTTP 端点把它作为评分服务暴露出来。现有 `/admin/api/fine-tune/logprob` 返回的是 policy 的 `sum log p(completion|prompt)`,不是 reward model 的标量分数。因此 Phase 2 的 `reward_endpoint` 无处可指,两阶段无法闭环。 ## 需求 新增 `POST /admin/api/fine-tune/reward/score`: ``` 请求: {model_id, adapter_name, prompt, completions: [str]} 响应: {rewards: [float], model_id, adapter_name} ``` 语义:加载 `model_id` + 已训练的 reward `adapter_name`(value head),对每个 `(prompt, completion)` 算标量 reward(`RewardTrainer._score` 的非可微推理版本:前向取 last-token hidden → value_head 投影),逐项返回。`len(rewards) == len(completions)`。 - standalone load-and-evict(与 `logprob` 端点同模式),不进推理池,避免流冲突(见 #430)。 - 复用 `fusion_mlx/training/reward.py` 的 `_ValueHead` 与 `_score` 前向逻辑(抽成可复用函数)。 ## 验收 - Phase 1 训完 reward adapter 后,调用本端点可拿到逐 completion 的标量 reward,`score(chosen) > score(rejected)` 与训练目标一致。 - 把本端点 URL 作为 `reward_endpoint` 传给 GRPO 作业,GRPO 能跑通真实 reward-guided 策略更新(非 length fallback)。 - fusion-trainer RLSL 流水线 Phase1→Phase2 闭环可跑通真实集成测试。 ## 关联 - 依赖:#424(reward 训练端点)、#363(GRPO 端点)、#430(GRPO stream bug,需先修才能端到端跑通)。 - 下游:fusion-trainer RLSL Phase 2 真实接入。
需求
RLSL 两阶段流水线的闭环缺一个 reward 评分端点。
adapter_config.json标记reward_model: true), Bradley-Terry 损失,score(chosen) > score(rejected)。config.reward_endpoint回调拿 reward:POST {prompt, completions:[str]} -> {rewards:[float]}。缺口:Phase 1 训出的 reward adapter 没有任何 HTTP 端点把它作为评分服务暴露出来。现有
/admin/api/fine-tune/logprob返回的是 policy 的sum log p(completion|prompt),不是 reward model 的标量分数。因此 Phase 2 的reward_endpoint无处可指,两阶段无法闭环。需求
新增
POST /admin/api/fine-tune/reward/score:语义:加载
model_id+ 已训练的 rewardadapter_name(value head),对每个(prompt, completion)算标量 reward(RewardTrainer._score的非可微推理版本:前向取 last-token hidden → value_head 投影),逐项返回。len(rewards) == len(completions)。logprob端点同模式),不进推理池,避免流冲突(见 bug(training): GRPO 训练作业失败 There is no Stream(gpu, 6) in current thread #430)。fusion_mlx/training/reward.py的_ValueHead与_score前向逻辑(抽成可复用函数)。验收
score(chosen) > score(rejected)与训练目标一致。reward_endpoint传给 GRPO 作业,GRPO 能跑通真实 reward-guided 策略更新(非 length fallback)。关联