首页 / 资讯中心 / 文章详情

ProRL-Agent-Server 训练桥接揭秘:slime_bridge 如何把 Polar Trajectory 还原成 Slime Sample

ProRL-Agent-Server 训练桥接揭秘:slime_bridge 如何把 Polar Trajectory 还原成 Slime Sample ★ FEATURED ARTICLE
【免费下载链接】ProRL-Agent-ServerAgentic RL on Any Harness at Scale项目地址https://gitcode.com/gh_mirrors/pr/ProRL-Agent-Server点击查看免费下载ProRL-Agent-ServerPolar是一个面向智能体强化学习的 RL rollout 框架而slime_bridge是它内置的训练桥接模块负责把 Rollout Server 产出的 PolarTrajectory多轮 agent 交互轨迹还原成 Slime 训练框架可直接消费的Sample。本文用最小的代码量讲清这条轨迹 → 样本还原链路上的每个关键环节异步任务提交、验收过滤、字段映射、logprob 校验、以及 GRPO 优势计算。Polar 的设计原则是trainer 无关它只通过 HTTP 异步 API/rollout/task/submit与/rollout/task/{task_id}与训练侧对话。slime_bridge因此被单独放在 src/slime_bridge/ 目录下——它依赖 Slime、Ray、Megatron 等重型组件而 Polar 本体不依赖它们。整体架构slime_bridge 在链路中的位置先看清楚数据从哪来、到哪去。Polar 的 Rollout Server 负责把请求分发到各 Gateway Node每个 Node 走INIT → RUN → BUILD → EVAL流水线预热的运行环境里执行 agent harness再由 builder 构建 trajectory、evaluator 打上 reward最终回传messages / token_id / logprob / loss_mask / reward五件套给 Trainer。slime_bridge恰好工作在最左侧Trainer ↔ Polar的这条边界上。Slime 训练循环只需要调用一个入口点generate_rollout_polar_async通过--rollout-function-path接入桥接层的其余工作全部自动化见 rollout.py。模块地图7 个文件各司其职理解slime_bridge最快的方式是按文件分工来看每个文件都对应还原链路的一个环节文件职责config.py解析PolarSlimeConfig渲染任务 payload 与 instruction把 gateway 指向 Slime 的 SGLang routerrollout.py异步 worker提交 → 回调/轮询 → 转换验收过滤器Slime 入口点adapter.py核心转换器一个SessionResult→ 多个 SlimeSamplereward.pyreward hook直接读取 Polar 已内嵌的奖励不再二次打分reward_post_process.py轨迹感知的组内归一化与 leave-one-trajectory-out 优势计算data_source.pyCeilEpochRolloutDataSourceWithBuffer把 epoch 长度向上取整避免数据集尾部 prompt 被跳过_messages.py共享的 prompt/message 拍平工具保证 rollout 与 adapter 行为一致端到端示例可参考 examples/swegym_slime_grpo/其中 run.sh 把上面四个 hook 一次性挂到了 Slime 参数上--rollout-function-path slime_bridge.rollout.generate_rollout_polar_async --custom-rm-path slime_bridge.reward.reward_func --custom-reward-post-process-path slime_bridge.reward_post_process.post_process_rewards --data-source-path slime_bridge.data_source.CeilEpochRolloutDataSourceWithBuffer提交与回收异步 worker 如何拿回轨迹训练模式下generate_rollout_polar_async不会阻塞等结果而是启动一个常驻后台 worker它做三件事提交从 Slime 数据源取一组 prompt一个 group渲染成 Polar 任务 payload 后POST 到polar_rollout_url。提交时会把调度元数据group_id、policy_version、rollout_step一并写进任务 metadata见 rollout.py保证轨迹回收后仍能对齐到发起它的那轮 rollout。回收Polar 是 async-only 的 HTTP 接口worker 会本地起一个 FastAPI 回调监听器/callback/task_result接收结果推送并保留 2 秒间隔的轮询作为漏回调时的安全网见 rollout.py。限流异步准入被严格约束在当前 Slime rollout 请求范围内max_async_level控制并发层级避免异步跑太远导致样本过度 off-policy。验收过滤器哪些 group 会被直接丢弃轨迹回收后并不是来者不拒。worker 会做一层验收不通过的 group 整组丢弃并按类别打点方便你在 WB 上追踪丢弃原因丢弃原因指标名含义零可训练 tokenpolar/dropped_zero_trainable_groups所有 trace 的loss_mask全为 0完成占比过低polar/dropped_low_complete_fraction_groups低于polar_min_complete_accept_fraction阈值logprob 错误polar/dropped_logprob_error_groups可训练 token 缺少对齐的 rollout logprob任务失败polar/dropped_failed_groups任务整体失败逻辑集中在 rollout.py。这套整组丢弃 分类计数的策略比静默产出脏样本安全得多——训练侧永远只看到可训练的 group。核心还原Trajectory 到 Sample 的字段映射真正的主角是 adapter.py 的session_result_to_samples一条 trajectory 里的每个 trace 生成一个独立的Sample。先看 Polar 侧的数据结构——Trace 模型 携带prompt_ids、response_ids、loss_mask、response_logprobs、reward等字段这正是还原所需的全部原料。映射关系如下对应 adapter.py 中Sample的构造Trace 字段Slime Sample 字段说明prompt_ids response_idstokenstoken id 原样拼接不重新分词prompt_messagesprompt完整多轮消息保留response_messagesresponse拍平成可读文本loss_maskloss_mask逐 token 训练掩码长度必须与 response 对齐response_logprobsrollout_log_probs采样时的真实 logprob长度不匹配直接抛RolloutLogprobErrorrewardreward{reward_key}直接读取 evaluator 已打好的分—group_id同一条 trajectory 的所有 Sample 共享—metadata.polarsession_id、timing、trace_index 等完整上下文其中有两个容易忽略的细节status 语义映射TIMEOUT → ABORTED、ERROR → FAILED、finish_reason length → TRUNCATED见 adapter.py。失败/中止的 Sample 其loss_mask会被整体清零保证它们不贡献梯度。兜底占位如果一条 session 的所有 trace 都不可用空 token 或超过max_tokensadapter 会输出一个全掩码的 dummy placeholderremove_sampleTrue防止 Slime 的 flattener 遇到空列表崩溃同时让其余 group 成员照常训练。一条 Trajectory 为什么变成多个 Sample这是理解group_id的关键。一个 agent session 内部会有多次 LLM 调用tool call 循环Polar 的 builder 会把每次调用重建为独立 trace所以一条 trajectory 往往扇出为 N 个 Sample。问题是GRPO 这类算法里可交换的样本单位是整条轨迹而不是单次调用。slime_bridge的解法是——同一条 trajectory 扇出的所有 Sample 共享同一个group_id等于trajectory_indexSlime 0.3.0 的 loss reducer 会把这些 trace 的贡献平均成一条轨迹计入梯度而 reward 后处理器仍然可以为每个 trace 单独分配 advantage。一个字段同时满足梯度按轨迹算、奖励按 trace 算两个需求。奖励整形leave-one-trajectory-out 优势计算reward_post_process.py 注册为 Slime 的--custom-reward-post-process-pathhook在grpo/gspo/reinforce估计器下工作按(group_index, trajectory_key)把样本聚回同一 prompt 下的各条轨迹每条轨迹先对其内部各 trace 的 reward 取均值作为该轨迹的代表值用同组其他轨迹的均值leave-one-trajectory-out作为 baseline减去它得到 advantage可选按组内标准差归一化FAILED/ABORTED状态的轨迹直接置零。这样即使某条轨迹扇出 5 个 trace、另一条只扇出 2 个baseline 的比较单位依然是轨迹不会因为 trace 数量不同而产生偏置。配套的 reward.py 则非常简单它只是把 Polar evaluator 已经写到 trace 上的 reward 原样取出来——打分的职责属于 Polar 侧的 evaluator含 session 级结果向 trace 的广播桥接层只消费、不重算。真实训练验证SWE-Gym 上的 GRPOslime_bridge不是玩具集成。官方示例 swegym_slime_grpo 用一条命令bash examples/swegym_slime_grpo/launch_e2e.sh在单机 8 卡上跑通完整链路Polar 负责 agent rolloutSlime 每步把新训权重通过 NCCL 同步进 SGLang 推理引擎异步 GRPO 持续迭代。四条曲线对应四种 agent harness可以看到在同一个 Polar Slime 训练栈下不同 harness 的 reward 都能被稳定抬升——这正是轨迹 → 样本还原链路正确性的最终检验token 对齐、loss mask 正确、logprob 无偏训练才能收敛。快速上手接入三步走 安装 Slime 环境按 src/slime_bridge/README.md 的步骤安装 Slime v0.3.0 与 Megatron-LM并应用scripts/patch/patch_slime_router_tokens.sh补丁——它让 OpenAI 兼容接口原样保留 SGLang 的 prompt/output token id 与 token 级 logprobPolar 因此无需本地重新分词这是tokens字段能逐位对齐的前提。配置桥接参数在 Slime 的 custom config 中提供polar_rollout_url或polar_topology_path、polar_task_template必须含 agent 规格、可选的polar_reward_key、polar_max_async_level等解析逻辑见 config.py。挂上四个 hook--rollout-function-path、--custom-rm-path、--custom-reward-post-process-path、--data-source-path指向slime_bridge对应实现参考 run.sh训练即可开始。小结slime_bridge用约 7 个文件完成了一次教科书式的框架桥接异步不阻塞常驻 worker 回调监听 轮询兜底训练循环与 rollout 时长解耦验收先行零可训练 token、完成占比、logprob 对齐三类过滤器脏数据进不了梯度无损还原token id 原样传递、logprob 长度强校验、loss mask 逐位对齐粒度正确group_id让多 trace 扇出的轨迹在 GRPO 中只算一个交换单位leave-one-trajectory-out baseline 保证 advantage 无偏。对想扩展其他训练框架NemoRL、VERL 等的读者来说这份桥接也是一个清晰模板HTTP 边界之上只需要解决任务怎么渲染、结果怎么验收、轨迹怎么映射成训练样本、奖励怎么整形四个问题。赞分享【免费下载链接】ProRL-Agent-ServerAgentic RL on Any Harness at Scale项目地址https://gitcode.com/gh_mirrors/pr/ProRL-Agent-Server点击查看免费下载相关推荐ProRL-Agent-Server 进阶实战Slime GRPO 异步训练 Qwen3.5-4B 完整教程ProRL Agent Server 进阶实战Slime GRPO 异步训练 Qwen3.5 4B 完整教程 ProRL Agent Server内部代react-native-fabric 揭秘NativeModules 如何把 JS 调用桥接到 iOS/Android 原生 SDKreact native fabric 揭秘NativeModules 如何把 JS 调用桥接到 iOS/Android 原生 SDK react namicam底层原理揭秘如何把小米WebSocket私有协议视频流桥接成标准RTSPmicam底层原理揭秘如何把小米WebSocket私有协议视频流桥接成标准RTSP micam 是一个专为小米摄像头设计的 RTSP 桥接服务它借助小米官方后端音视频智能硬件上一篇ClawWork 实战指南基于 GDPVal 经济生存基准把 AI Agent 打造成能赚钱的 AI 同事下一篇为什么e2e截图在secret填表后不再发给模型安全设计剖析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站