
slime 框架 Qwen3-Next-80B-A3B 训练示例环境搭建、权重转换与 Megatron 并行训练实战【免费下载链接】slimeslime is an LLM post-training framework for RL Scaling.项目地址: https://gitcode.com/GitHub_Trending/slime12/slimeQwen3-Next-80B-A3B 是 Qwen 推出的混合架构模型——大部分层采用 Gated DeltaNet 线性注意力每隔固定层数插入全注意力层并配有 512 个专家组成的稀疏 MoE属于典型的线性注意力 稀疏专家长上下文推理架构。本文基于 slime 仓库中的 Qwen3-Next-80B-A3B 训练示例完整还原其在 slimeLLM 后训练 RL 框架中的落地流程从环境与算子依赖安装、Blackwellsm100上的 Triton 编译补丁到 HF checkpoint 转 torch_dist、单机 8 卡与多机 4x8 的 Megatron 训练启动并结合仓库源码逐项解析模型规格脚本与训练启动脚本中的关键参数帮助你直接复现这套 RL 训练管线。Qwen3-Next-80B-A3B 在 slime 中的定位slime 是一个面向 RL Scaling 的 LLM 后训练框架训练侧依赖 Megatron-LM 完成大规模并行训练推理侧通过 sglang 提供 rollout 服务二者由 Ray 统一编排可参考 入口脚本 中的ray start与ray job submit逻辑。Qwen3-Next-80B-A3B 是 slime 官方脚本中明确支持的模型之一见 scripts/models 目录官方提供的训练脚本 run-qwen3-next-80B-A3B.sh 与配套示例文档给出了完整的端到端流程。需要特别说明的是当前版本暂不支持 Blackwell 平台训练文档中亦明确标注当前暂不支持Blackwell请在实际部署前确认 GPU 平台。环境准备搭建环境、下载模型、准备数据与 checkpoint 转换的整体流程与 Qwen3-4B 完全一致可参考 示例Qwen3-4B只需将文中 Qwen3-4B 相关路径替换为Qwen3-Next-80B-A3B-Instruct即可。以下是完整的操作步骤。初始化 slime 环境在拉取slimerl/slime:latest镜像后克隆仓库并安装 slime 本体cd /root/ git clone https://github.com/THUDM/slime.git cd slime/ pip install -e . --no-deps下载模型权重使用hfCLI 下载 Qwen3-Next 的推理版权重示例中使用的是 Thinking 版本export BASE_FOLDER./models/ # 下载模型权重 (Qwen3-Next-80B-A3B-Thinking) hf download Qwen/Qwen3-Next-80B-A3B-Thinking --local-dir ${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking同时还需要准备训练数据如zhuzilin/dapo-math-17k与评测数据如zhuzilin/aime-2024下载方式与 Qwen3-4B 示例一致# train data hf download --repo-type dataset zhuzilin/dapo-math-17k \ --local-dir /root/dapo-math-17k # eval data hf download --repo-type dataset zhuzilin/aime-2024 \ --local-dir /root/aime-2024安装线性注意力算子依赖Qwen3-Next 的线性注意力层Gated DeltaNet依赖 flash-linear-attentionfla与 causal-conv1d 两个算子库安装时建议固定版本以保证与模型结构匹配cd slime/ pip install -e . --no-deps # (for acceleration) cd .. # and find a proper folder git clone https://github.com/fla-org/flash-linear-attention cd flash-linear-attention git checkout 9714c595 pip install -e . --no-deps wget https://github.com/Dao-AILab/causal-conv1d/releases/download/v1.5.4/causal_conv1d-1.5.4cu12torch2.8cxx11abiTRUE-cp312-cp312-linux_x86_64.whl pip install ./causal_conv1d-1.5.4cu12torch2.8cxx11abiTRUE-cp312-cp312-linux_x86_64.whl其中causal_conv1d的 wheel 版本需要与你的 PyTorch 版本、CUDA 版本及 Python 版本对应示例中为 cu12 torch2.8 cxx11 ABI Python 3.12。从源码看fla 提供的chunk_gated_delta_rule是 Qwen3-Next 线性注意力默认后端slime 在 qwen_gdn_backend.py 中实现了后端分发逻辑fla后端直接调用fla.ops.gated_delta_rule.chunk_gated_delta_rule同时支持flashqla后端需要 FlashQLA 且要求 PyTorch 2.8、CUDA 12.8、SM90 及以上 GPU可通过--qwen-gdn-backend参数切换。[可选] 修复 Blackwell (sm100) 上的 Triton 编译 Bug在 Blackwellsm100平台上flash-linear-attention 的wy_fast.py会触发一个 Triton 编译 bug相关讨论见 triton-lang/triton issue #8695 与 fla-org/flash-linear-attention issue #638。解决方案是在已安装的 flash-linear-attention 目录中应用下述 patchdiff --git a/fla/ops/gated_delta_rule/wy_fast.py b/fla/ops/gated_delta_rule/wy_fast.py index c5119dcf..838f5e4e 100644 --- a/fla/ops/gated_delta_rule/wy_fast.py b/fla/ops/gated_delta_rule/wy_fast.py -198,7 198,14 def prepare_wy_repr_bwd_kernel( b_A tl.dot(b_kb, tl.trans(b_k)) b_dkb tl.dot(b_dA, b_k) b_db tl.sum(b_dkb * b_k, 1) - b_dk tl.dot(tl.trans(b_dA), b_kb) b_dk tl.inline_asm_elementwise( asmmov.f32 $0, $1;, constraintsr,r, args[tl.dot(tl.trans(b_dA), b_kb)], dtypetl.float32, is_pureTrue, pack1, ) b_dk b_dkb * b_b[:, None] tl.store(p_dk, b_dk.to(p_dk.dtype.element_ty), boundary_check(0, 1)) tl.store(p_db, b_db.to(p_db.dtype.element_ty), boundary_check(0,))将上述内容保存为patch.diff注意必须连同末尾的空行一起复制然后在 flash-linear-attention 目录下执行git apply patch.diff该 patch 将原 Triton 无法在 sm100 上正确编译的tl.dot(tl.trans(b_dA), b_kb)表达式改写为tl.inline_asm_elementwise内联汇编形式绕过编译器的代码生成问题同时保持浮点语义一致。模型权重转换HF checkpoint 转 torch_distMegatron 训练无法直接读取 HF 格式的 checkpoint需要先用 slime 提供的转换工具将其转为 torch_dist 格式。模型规格由 scripts/models/qwen3-next-80B-A3B.sh 定义转换命令如下source scripts/models/qwen3-next-80B-A3B.sh PYTHONPATH/root/Megatron-LM/ torchrun --nproc-per-node 8 \ tools/convert_hf_to_torch_dist.py \ ${MODEL_ARGS[]} \ --hf-checkpoint /root/Qwen3-Next-80B-A3B-Thinking/ \ --save /root/Qwen3-Next-80B-A3B-Thinking_torch_dist/转换器的核心逻辑位于 hf_to_megatron/qwen3_next.py它维护了从 Megatron 层参数名到 HF 参数名的映射如self_attention.linear_qkv.weight由 HF 的q_proj/k_proj/v_proj按 GQA 分组重排拼接而成并兼容decoder.layers.N.xxx与mtp.layers.N.xxxMTP 模块两类前缀对线性注意力层则直接映射linear_attn.A_log、linear_attn.conv1d.weight、linear_attn.dt_bias、linear_attn.in_proj_qkvz.weight、linear_attn.in_proj_ba.weight等张量。提示MODEL_ARGS中的参数是 Megatron 侧的模型结构配置。由于 Megatron 无法从 ckpt 中读取模型 config需要自行核对--rotary-baseQwen3-Next 为 10000000等关键超参是否与模型实际配置一致如有出入可在 source 后在脚本中覆盖。执行训练Megatron单机 8 卡cd /root/slime export BASE_FOLDER/root export MASTER_ADDR127.0.0.1 ACTOR_NUM_NODES1 CP_SIZE1 bash scripts/run-qwen3-next-80B-A3B.sh其中BASE_FOLDER为 checkpoint、数据所在的根目录脚本会在此目录下寻找Qwen3-Next-80B-A3B-Thinking、Qwen3-Next-80B-A3B-Thinking_torch_dist、dapo-math-17k、aime-2024等资源MASTER_ADDR为 Ray 主节点地址单机场景取127.0.0.1ACTOR_NUM_NODES1覆盖脚本默认的 4 节点为单机CP_SIZE1关闭上下文并行适合显存充足或训练序列长度受控的场景。如果显存不够考虑禁用--accumulate-allreduce-grads-in-fp32并启用--grad-reduce-in-bf16——前者以 fp32 累积梯度换取数值精度后者用 bf16 做梯度通信与累积可显著降低显存与通信开销。多机4x8cd /root/slime export BASE_FOLDER/root export MASTER_ADDRyour_master_addr export HOSTFILE/path/to/hostfile bash scripts/run-qwen3-next-80B-A3B.sh此时ACTOR_NUM_NODES使用脚本默认值 4CP_SIZE默认 4。脚本会根据HOSTFILE每行一个 worker IP通过 ssh 在其余节点拉起 Ray worker并依据nvidia-smi topo -m自动探测 NVLink 以决定是否开启NCCL_NVLS_ENABLE。训练脚本参数全解析启动脚本 run-qwen3-next-80B-A3B.sh 将参数分组组织后统一传给train.py下面结合仓库源码逐组解读。MODEL_ARGS模型结构规格模型结构定义在 scripts/models/qwen3-next-80B-A3B.sh核心参数如下参数值说明--specslime_plugins.models.qwen3_nextget_qwen3_next_spec指定 Megatron 模型构建 spec指向 slime 插件中的 Qwen3-Next 专属实现--num-layers48总层数--hidden-size2048隐藏维度--ffn-hidden-size5120全注意力层denseFFN 维度--num-attention-heads16全注意力头数--num-query-groups2GQA 查询组数--kv-channels256KV 通道数--group-query-attention-开启 GQA--qk-layernorm-QK LayerNorm--use-gated-attention-门控注意力--attention-output-gate-注意力输出门控--normalizationRMSNorm归一化方式--apply-layernorm-1p-1P 初始化风格 LayerNorm--position-embedding-typeropeRoPE 位置编码--rotary-base10000000RoPE base务必与 HF 配置一致--rotary-percent0.25旋转维度比例--swiglu-SwiGLU 激活--untie-embeddings-and-output-weights-解绑 embedding 与输出权重--vocab-size151936词表大小--disable-bias-linear-线性层不带 biasMoE 部分Qwen3-Next 每层均为 MoE 结构参数值说明--num-experts512专家总数--moe-router-topk10每个 token 激活的专家数--moe-ffn-hidden-size512单个专家 FFN 维度--moe-shared-expert-intermediate-size512共享专家维度--moe-shared-expert-gate-共享专家门控--moe-router-score-functionsoftmax路由打分函数--moe-token-dispatcher-typealltoalltoken 分发方式--moe-layer-freq[1,1,...]48 个 1每层均为 MoE 层--moe-grouped-gemm-分组 GEMM 加速--moe-token-drop-policyprobstoken 丢弃策略--moe-router-dtypefp32路由计算精度--moe-permute-fusion-permute 算子融合--moe-aux-loss-coeff0辅助 loss 系数置 0 表示不施加路由负载均衡 lossMOE_LAYER_FREQ由脚本内循环生成NLAYERS48、FIRST_K_DENSE_REPLACE0即所有 48 层都标记为 MoE 层。CKPT_ARGScheckpoint 路径CKPT_ARGS( --hf-checkpoint ${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking --ref-load ${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking_torch_dist --load ${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking_slime/ --save ${BASE_FOLDER}/Qwen3-Next-80B-A3B-Thinking_slime/ --save-interval 20 )--hf-checkpointsglang 推理所需的 HF 格式 ckpt同时作为 tokenizer 来源--ref-loadreference model 的 torch_dist 格式 ckpt即前面转换产物--load/--saveactor 的训练断点目录--load目录为空时会从--ref-load初始化--save-interval每 20 步保存一次断点。ROLLOUT_ARGSrollout 数据与采样ROLLOUT_ARGS( --prompt-data ${BASE_FOLDER}/dapo-math-17k/dapo-math-17k.jsonl --input-key prompt --label-key label --apply-chat-template --rollout-shuffle --rm-type deepscaler --num-rollout 3000 --rollout-batch-size 8 --n-samples-per-prompt 8 --rollout-max-response-len 32768 --rollout-temperature 1 --global-batch-size 64 --balance-data )--prompt-dataprompt 数据集每行一条 JSON--apply-chat-template当input_key中是 OpenAI message 格式时会用tokenizer.apply_chat_template(...)做会话模板处理--rm-type deepscaler奖励模型类型slime 在 rm_hub 下内置了 deepscaler、math、f1、gpqa、ifbench 等多种 RM也支持--custom-rm-path自定义--num-rollout总共执行的 rollout 次数--rollout-batch-size 8、--n-samples-per-prompt 8每个 rollout 含8 × 8 64条采样回复--rollout-max-response-len 32768长响应上限32K token与模型长上下文能力匹配--rollout-temperature 1采样温度--global-batch-size 64训练全局 batch--balance-data训练时按长度/难度均衡数据通常能提升吞吐。EVAL_ARGS评测配置EVAL_ARGS( --eval-interval 20 --eval-prompt-data aime ${BASE_FOLDER}/aime-2024/aime-2024.jsonl --n-samples-per-eval-prompt 8 --eval-max-response-len 32768 --eval-top-p 1 )评测会继承 rollout 的采样参数但可单独覆盖采样策略这里 top-p 设为 1从而实现训练与评测使用不同采样配置。每隔--eval-interval步在 AIME-2024 上进行一次评测每个 prompt 采 8 条。PERF_ARGS并行与显存优化PERF_ARGS( --tensor-model-parallel-size 2 --sequence-parallel --pipeline-model-parallel-size 4 --decoder-last-pipeline-num-layers 9 --context-parallel-size ${CP_SIZE} --expert-model-parallel-size 8 --expert-tensor-parallel-size 1 --recompute-granularity full --recompute-method uniform --recompute-num-layers 1 --use-dynamic-batch-size --max-tokens-per-gpu 8192 )张量并行 2、流水线并行 4、专家并行 8、上下文并行由CP_SIZE控制单机 1、多机默认 4配合--sequence-parallel与--expert-model-parallel-size切分 512 专家--decoder-last-pipeline-num-layers 9将最后一层多分到最后的流水线 stage平衡负载--recompute-*全量 uniform 激活重计算每 1 层重算一次用时间换显存--use-dynamic-batch-size--max-tokens-per-gpu 8192slime 扩展的动态 batch 机制——每张卡按 token 数而非样本数打包自动将 batch 内长短不一的数据拼到max_tokens_per_gpu上限开启 CP 时 CP 组内共享CP × max_tokens_per_gpu的 token 预算单条超长数据自成一条、不截断。开启后传统的micro_batch_size被忽略。slime 始终使用 data packing 且严格保证 per-sample / per-token loss因此动态 batch 不会影响 loss 计算官方建议开启。GRPO_ARGSRL 训练目标GRPO_ARGS( --advantage-estimator gspo --kl-loss-coef 0.00 --kl-loss-type low_var_kl --kl-coef 0.00 --entropy-coef 0.00 --eps-clip 4e-4 )使用gspo优势估计器KL 项采用low_var_kl低方差 KL类型系数为 0--eps-clip 4e-4为 PPO 风格的 clip 阈值远小于常见 0.2属于该模型配置下的精调设置。OPTIMIZER_ARGS优化器OPTIMIZER_ARGS( --optimizer adam --lr 1e-6 --lr-decay-style constant --weight-decay 0.1 --adam-beta1 0.9 --adam-beta2 0.98 --optimizer-cpu-offload --overlap-cpu-optimizer-d2h-h2d --use-precision-aware-optimizer )80B 级模型显存压力大因此启用了优化器 CPU offload并让 D2H/H2D 拷贝与计算重叠--overlap-cpu-optimizer-d2h-h2d配合精度感知优化器--use-precision-aware-optimizer缓解显存瓶颈。SGLANG_ARGSrollout 推理引擎SGLANG_ARGS( --rollout-num-gpus-per-engine 8 --sglang-mem-fraction-static 0.8 --sglang-ep-size 8 --sglang-cuda-graph-bs 1 2 4 8 $(seq 16 8 128) # mtp --sglang-speculative-algorithm EAGLE --sglang-speculative-num-steps 3 --sglang-speculative-eagle-topk 1 --sglang-speculative-num-draft-tokens 4 --sglang-max-running-requests 256 )每个 sglang engine 占用 8 卡--sglang-ep-size 8设置专家并行--sglang-mem-fraction-static 0.8控制静态显存比例--sglang-cuda-graph-bs显式声明 cuda graph batch size 列表1 2 4 8及 16 到 128 步长 8避免默认并发度限制影响吞吐开启 EAGLE 投机解码3 步、topk 1、4 个 draft token加速长响应生成除--rollout-num-gpus-per-engine外其余 sglang 参数均通过--sglang-前缀透传给 sglang。MISC_ARGS杂项MISC_ARGS( --attention-dropout 0.0 --hidden-dropout 0.0 --accumulate-allreduce-grads-in-fp32 --attention-softmax-in-fp32 --attention-backend flash --moe-token-dispatcher-type flex --moe-enable-deepep )关闭 dropoutsoftmax 保持 fp32注意力后端用 flashMoE 分发采用flex类型并开启 DeepEP--moe-enable-deepep以优化专家通信。注意这里--moe-token-dispatcher-type与MODEL_ARGS中的alltoall出现了两次后者是模型结构声明、前者为运行期调度优化二者同时存在是脚本的既定用法。混合注意力架构在 slime 中的源码实现为了更深入理解这套训练管线值得看一下 slime 是如何将 Qwen3-Next 的线性注意力 稀疏 MoE结构落到 Megatron 模型上的。模型 spec 构建入口是 slime_plugins/models/qwen3_next.py 中的get_qwen3_next_spec(args, config, vp_stage)若未配置num_experts会把所有层强制设为 denseconfig.moe_layer_freq [0] * config.num_layers即该 spec 同时兼容非 MoE 配置从args.hf_checkpoint加载 HF config若 HF config 未暴露layer_types则按full_attention_interval默认 4即每 4 层插入 1 层全注意力推导每层类型对linear_attention类型的层用自定义的Attention模块替换默认 self-attention实现逐层替换的混合架构。Gated DeltaNet 线性注意力层Qwen3NextGatedDeltaNet复刻了 HF 的 Gated DeltaNet 实现并增加 varlen 支持输入经in_proj_qkvz/in_proj_ba投影后先通过ShortConvolution一维因果卷积做局部状态建模再调用chunk_gated_delta_rule即 fla / FlashQLA 提供的 chunk 级门控 delta 规则算子完成线性注意力计算最后经FusedRMSNormGated门控归一化与out_proj输出。--qwen-gdn-backend参数控制算子后端fla默认 /flashqla仓库在 qwen_gdn_backend.py 中对 FlashQLA 做了运行时校验PyTorch ≥ 2.8、CUDA ≥ 12.8、SM90。权重转换的印证Hf 转 Megatron 的转换器 中的_DIRECT_ATTENTION集合完整列出了线性注意力层的张量linear_attn.A_log、linear_attn.conv1d.weight、linear_attn.dt_bias、linear_attn.in_proj_qkvz.weight、linear_attn.in_proj_ba.weight等与模型实现一一对应同时处理了全注意力层q/k/v_proj在 GQA 分组下的重排以及 MTPMulti-Token Prediction模块的mtp.*参数映射。这解释了为何转换必须传入与模型结构严格匹配的MODEL_ARGS。仓库还提供了针对该模型线性注意力的单元测试 test_qwen3_linear_attention_cu_seqlens.py通过安装 Megatron stub 的方式在无 GPU 环境下验证 varlen 线性注意力前向的正确性可作实现细节的参考。常见问题与注意事项平台限制当前训练暂不支持 Blackwellsm100请在非 Blackwell 平台执行训练若确实在 Blackwell 上编译 fla先应用上文的三行 patch。显存不足优先调整梯度精度策略——关闭--accumulate-allreduce-grads-in-fp32、开启--grad-reduce-in-bf16此外 80B 级模型建议保留--optimizer-cpu-offload与--recompute-granularity full。--rotary-base等结构参数必须与模型一致Megatron 无法从 ckpt 自动读取结构误配会导致训练异常或指标错乱可在 source 模型脚本后追加参数覆盖。MOE_LAYER_FREQ生成规则FIRST_K_DENSE_REPLACE控制前 K 层是否为 dense 替换层Qwen3-Next 的官方脚本置为 0全 MoE若需微调可按需修改后重新生成数组。动态 batch 与 CP 联动开启--use-dynamic-batch-size后忽略micro_batch_size且 CP 组共享 token 预算CP 大小变化会直接影响显存占用与吞吐。小结本文从 slime 官方 Qwen3-Next-80B-A3B 示例出发完整走通了环境与算子依赖 → Blackwell 补丁 → HF 转 torch_dist → 单机/多机训练的全链路并借助 模型规格脚本、训练启动脚本 与 模型实现源码 逐一拆解了结构参数、并行策略、RL 目标与推理引擎配置。这套管线同时适用于同一模型家族的 Instruct / Thinking 版本替换权重目录即可是理解 slime 如何支撑线性注意力 稀疏专家新架构 RL 训练的完整参考。【免费下载链接】slimeslime is an LLM post-training framework for RL Scaling.项目地址: https://gitcode.com/GitHub_Trending/slime12/slime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考