Tutorial:搭建并理解一个 RL 实验#

打开交互式 Quick Start。选择模型,观察 GPU 布局变化,试不同组合,最后下载启动 shell。同一条教程适用于 GLM、Qwen3.8-27B 和 DeepSeek-R1,模型尺寸来自仓库已有配置。

你正在搭建的循环#

        flowchart LR
    A[Prompt / 环境] --> B[SGLang 生成回答]
    B --> C[Reward / 验证器]
    C --> D[Batch 或持续队列]
    D --> E[Megatron 更新策略]
    E -->|同步新权重| B
    E --> F[Checkpoint 与独立评估]
    

一个训练样本不只有问答,还携带 tokens、reward、masks,以及算法需要的概率或 replay 数据。SGLang 产生经验,Megatron 计算梯度;精度、kernel 或权重版本变化,都可能使两者分布不同。规模化 RL 的关键,就是在有效使用算力的同时处理这些差异。

实验室的「演示一轮」用于理解流程,不是 GPU 性能模拟,也没有真的启动训练。每个选择都能回退:使用上一步、步骤标题、撤销 / 重做或重置。页面在本地保存选择,刷新后可继续。分享链接包含架构选择,不包含机器路径、引擎地址和自定义 hook 路径;experiment.json 保存完整的本地配置。

1. 选择任务与模型#

刚接触 RL?从首页「了解一轮 RL」进入五阶段导览:prompt → 八个回答 → 验证器 → GRPO → 权重同步,可播放、暂停或手动推进。临时示例不会覆盖已保存的实验;点击「采用这个 GRPO 起点」才会作为一次可撤销修改写入当前配置。示例有四个 1 分、四个 0 分,均值为 0.5,样本标准差为 √(2/7),归一化 advantage 约为 ±0.94,与 slime/data/batch_builder.py 的默认奖励归一化口径一致。这些数值用于解释机制,不是实测训练,也不保证 reward 提升。

在「对照 A / B」中将当前完整配置保存为 A,再编辑 B。修改、撤销 / 重做和刷新都不会改变 A;例如选择 async 自动切换为独立 GPU 池,这些关联变化也会列出。两侧分别进行静态检查,默认始终导出 B。「将 A 恢复到 B」可以撤销;更新或清除 A 与 B 的历史独立。A/B 分享链接会同时过滤两侧的私有路径、地址与 hook,与普通分享的隐私边界一致。

PD 资源不足时,在导出区域展开修复预览,先查看字段变化、GPU 分配及仍待解决的条件,再决定是否应用。资源调整根据当前配方的引擎大小与并行配置推导;一次修复可以一次撤销。RDMA 网卡名和外部引擎地址需要来自实际环境。安装区的镜像选择会将硬件条件带入「训推布局」,但不认证模型配方或显存容量。

「来源与验证范围」记录页面 checkout、配方及模型配置源码、源码哈希、已知 Docker 构建版本,并明确标出缺失的运行环境信息。本地有修改时,源码可能与 commit 链接不同,哈希对应实际使用的文件。experiment.json 带有同样的来源记录,shell 注释指向配方 commit。这些记录描述生成依据,不代表服务器实际安装版本;静态检查或来源脚本不会自动赋予完整配置的 GPU 验证标签。「载入 JSON」接受旧 schema-1 导出或 choices 对象,以一次可撤销操作替换 B,并按当前页面重新生成来源记录。

起步实验使用可验证数学,JSONL 字段为 prompt 和 label,应用 chat template,使用内置 deepscaler 奖励。每个 prompt 采样 8 次,采用 GRPO,先跑 3 轮。这是验证正确性的实验,不承诺产生能力提升。

自己的 Agent 或奖励任务选择「我的 Agent / 奖励」,再填写可导入的生成函数和奖励函数。Worker 环境必须能导入这些 hook;向导不会替任务发明奖励函数。详见 Agent 工作流和接口约定。

选择模型后,架构、TP / PP / CP / EP、转换方式和推理引擎大小会一起改变。这些是起点配置,不是显存计算器。默认训练节点数继承仓库配方:GLM-4.7-Flash 和 GLM-4-9B 为一台 8 卡节点;GLM-4.7 为 8 台;GLM-5.3 为 32 台;DeepSeek-R1 为 16 台。Qwen3.8-27B 采用四节点的 27B 混合注意力配置。

Qwen3.8-27B 官方配置 使用 qwen3_5,尺寸匹配 scripts/models/qwen3.5-27B.sh。文本 RL 路径复用该 model spec 和 HF 转换支持。这是架构核对,不是新 checkpoint 的 GPU 验证,也不是多模态 RL 配方。仍需要 FLA / Gated Delta Net 依赖,见架构支持。

GLM-5.3 官方配置的 78 层、256 专家 DSA 架构及跨层 index-sharing 计划,与现有 glm5.2-744B-A40B 模型规格匹配。实验室复用这一架构源文件,但下载 GLM-5.3 checkpoint;已有六层 deterministic 回归不代表对新 checkpoint 的验证。

2. 先决定 GPU 归属,再决定调度#

在「训推布局」展开「GPU 推荐、显存与并行」,查看起步卡数、总资源量以及 CPU Adam 和激活重计算设置;继续展开并行方式即可切换 TP/PP/EP/CP/ZeRO 图示。CPU Adam 与激活重计算开关会改变导出的 shell。补充图解与生成文件预览按需展开,通过整页滚动阅读。见内存预算与并行方式,包括 allgather/zigzag CP 对比。

选择

行为

你需要准备

Colocated

训推轮流使用同一组 GPU

每个阶段的显存和 offload 内存

Disaggregated

slime 管理独立训推资源池

足够同时容纳两组的 Ray 资源

External SGLang

连接由外部系统管理的引擎

引擎地址和兼容的权重传输

同步

完成一批 rollout,再训练并更新权重

顺序容易理解的基线

Fully async

生成跨更新持续运行

独立资源池和样本年龄监控

从同卡选择 fully async 时,向导会在同一个可撤销操作内切换到独立 GPU;选择同卡则恢复同步。其他不兼容项会明确显示,等待修正,不会悄悄导出另一个算法。

外部引擎不是任意文本 API:slime 需要 SGLang server 信息、权重更新接口和 sampler 元数据。生成的 serving-reference.sh 提供所需参数;部署相关的 host、port、多机 rank 和 RDMA 属于外部 launcher。训练 CLI 无法重配已经运行的引擎。

Partial rollout 保存未完成前缀以便之后续跑,也可以用于同步训练。straw 持久化数据和队列,搭配 fully async 后启用多 Ray 节点的分布式 producer。实验室独立提供这两个选项;时间线、混合版本概率与 checkpoint 边界见rollout 调度。

3. 选择数值行为#

可以先用 BF16 / BF16 建立基线,大 MoE 也可以从维护中的 BF16 训练 + FP8 rollout 路径开始。后者保留 BF16 训练 checkpoint,推理使用独立量化的 HF checkpoint。Attention KV 精度又是另一个维度;hybrid 模型还需单独选择递归状态 dtype。Qwen3.8-27B 提供 attention KV、Mamba SSM 状态和可选的状态 / KV 内存比例,配图分别展示两个池。见 hybrid 缓存账本,其中也说明 GLM-5.3-Flash 的不同架构。

FP8 训练仍为实验性,INT4 rollout 为 beta;低精度都需要匹配 GPU / kernel 栈。见精度与内存推导。

再决定如何修正差异:TIS 裁剪重要性权重,IcePop mask 区间外权重,R3 重放 MoE 路由,SC 中心化加权 score 并使用 REINFORCE。Deterministic 改善可复现性,但不会自动让不同引擎相等。「原理与推导」按钮链接完整公式推导及原论文。

4. 根据负载配置 serving#

普通 serving 是基线;测量表明 prefill / decode 需要不同资源时再尝试 PD。向导要求两组都是完整引擎,使用 Mooncake / RDMA,需要填写真实网卡名。sglang.yaml 已嵌入 experiment.sh,不必再手工复制单独配置文件。

重复 prefix 较多时,可在预算主机内存和 I/O 后启用 HiCache;PD 下此配方仅在 prefill 开启。并发数和 response token 上限根据真实显存与延迟调整,见推理成本模型。

开启 EAGLE 可加入投机采样:选择 checkpoint 内置 MTP 头或填写匹配的独立 EAGLE 头,再设置投机深度。配图会随 PD、HiCache、EAGLE 三个开关变化,展示候选生成与目标模型验证。见配置、接受概率推导与指标。

5. 准备一次、转换,然后运行#

先安装运行环境。各主机保持相同 checkout、依赖、模型 / 数据路径和配置路径。多机需要共享文件系统或相同路径的本地副本;只有 head 容器能看到的路径不够。生成的 .slime-lab.* 配置目录也要通过相同仓库路径供 Ray worker 访问。

把 experiment.sh 下载到 slime 仓库根目录。核对路径与说明后:

# 在共享文件系统上执行一次:下载原始权重、数据,
# 并准备选中的 FP8 / INT4 rollout 权重。
bash experiment.sh prepare

# 将 BF16 权重转换为可重分片的 Megatron checkpoint。
bash experiment.sh convert

中小模型配方在一台 8 卡节点上转换。GLM-4.7、GLM-5.3 和 DeepSeek-R1 的转换使用 4 节点、每节点 8 GPU;在四台节点上同时运行 convert,填写相同的 CONVERT_MASTER_ADDR 和不同的 CONVERT_NODE_RANK(0–3)。torch_dist 可重分片,因此转换并行度不必与训练一致;转换本身仍需足够显存和主机内存。

GLM-5.3 与 DeepSeek-R1 发布的是 FP8 权重,prepare 会下载到独立 source 目录,再转 BF16,并准备所选推理格式。如果已经有 BF16 HF 和 torch_dist,可直接改路径并跳过准备。

根据页面显示的 GPU 总量启动 Ray head 并加入 worker:

# Head 节点
ray start --head --node-ip-address HEAD_IP --num-gpus 8 \
  --dashboard-host 0.0.0.0 --dashboard-port 8265

# 每个 worker 节点
ray start --address HEAD_IP:6379 --num-gpus 8

External 需要先部署并核对外部引擎,其 GPU 不计入训练 Ray 资源。磁盘同步需要两侧以相同路径挂载共享权重目录;delta 还需要 patched serving 接口与本地 checkpoint 目录。

在 head 的仓库根目录执行:

bash experiment.sh check
bash experiment.sh train

check 检查输入文件存在,不加载模型,也不认证容量。train 用明确的 runtime environment 提交作业;其他 Ray head 可设置 RAY_DASHBOARD。脚本不会隐式杀进程或启动集群。

默认是短实验;新实验请使用新的输出目录和 straw run ID,已有目录遵循后端恢复规则。恢复后续训练时,添加指向保存 checkpoint 的 --load,并遵循恢复要求。保存间隔需要根据实验调整;默认短实验可能在到达保存间隔前结束。

6. 判断实验是否有效#

先看生成文本,再看 reward、reference / trainer log-prob,然后检查训推差异和修正的 clipping / masking。Fully async 还要看 staleness。跑得快但奖励无意义,并不代表有效实验。

长时间训练前加入独立验证集。例如下载 AIME 后,同步训练可以添加:

--eval-interval 20 \
--eval-prompt-data aime /data/aime-2024/aime-2024.jsonl \
--n-samples-per-eval-prompt 8

Fully async 队列本身不实现 evaluation,应安排独立的受支持评估路径或任务。见评估配置和 fully async 指南。

输出异常时用 Debug 与重放;结果正确但运行缓慢时,用 Trace、Profiling和观测指标决定下一步。首页展开式 Advanced 区域遵循相同的排查顺序。