拓冰建站拓冰建站
首页 / 资讯中心 / 正文

AReaL 基于 Megatron-LM 后端微调大型 MoE 模型:并行策略、Bridge 选择与训练稳定性实践

AReaL 基于 Megatron-LM 后端微调大型 MoE 模型并行策略、Bridge 选择与训练稳定性实践【免费下载链接】AReaLThe RL Bridge for LLM-based Agent Applications. Made Simple Flexible.项目地址: https://gitcode.com/GitHub_Trending/are/AReaL本篇技术指南聚焦 AReaL 项目中以 Megatron-LMMegatron-Core作为 RL 训练后端的完整使用路径从一行配置切换后端、Bridge 选择、MoE 混合并行折叠到确定性算法对齐推理/训练精度并附带可直接落地的 GSM8K Qwen3-30B-A3B GRPO 运行命令。读完你可以为自家大型 MoE 模型配置 5D 并行训练并理解每个关键配置在源码中的落点。Megatron 后端能做什么为什么大型 MoE 需要它与 PyTorch FSDP 相比Megatron-LM 支持完整的 5D 并行性数据并行 DP、张量并行 TP、流水线并行 PP、上下文并行 CP、专家并行 EP可以提供更好的扩展性和效率尤其适合动辄数十亿到数千亿参数的 MoE 模型。AReaL 对 Megatron-LM 作为 RL 训练后端提供了完整支持核心实现在 areal/engine/megatron_engine.py 的MegatronEngine类中。在 AReaL 中MegatronEngine是TrainEngine的完整实现覆盖了 RL 训练所需的全部能力分布式训练通过create_process_group调用mpu.initialize_model_parallel初始化 Megatron 的并行状态见 megatron_engine.py支持 TP/PP/CP/EP 以及虚拟流水线并行VPPHF 权重互通通过 bridge 机制完成 HuggingFace 权重 ↔ Megatron 模型的双向转换与实时同步RL 训练方法train_batch、compute_logp、ppo_update等 RPC 方法被注册在cpu_staged_rpc_methods中megatron_engine.py可服务 GRPO/PPO/DPO/RLVR 等训练器扩展能力FP8 训练、LoRA需megatron-bridge、MTPMulti-Token-Prediction、tree-attention 训练、checkpoint 异步保存等。启用 Megatron 后端一行配置切换从 FSDP 切换到 Megatron 只需要更改一行把actor.backend字段从fsdp:d4改为megatron:d4。例如在 YAML 配置中actor: backend: megatron:d4Backend 字符串语法AReaL 将每个backend字符串解析为ModelAllocation对象驱动该引擎的 GPU 资源分配。语法为backend:parallelism_dims并行维度如下表所示完整参考见 docs/zh/reference/alloc_mode.md维度缩写描述适用于Datad模型副本数量所有后端Tensort跨 GPU 分割操作所有后端Pipelinep跨 GPU 阶段分割层Megatron、ArchonContextc跨 GPU 分割序列长度所有后端Experte跨 GPU 分割 MoE 专家Megatron、Archon组件所需的 GPU 总数按下式计算专家并行e不增加 world size它只在既有 GPU 网格内重新分配专家放置位置world_size dp × tp × pp × cp例如Backend 字符串每引擎 GPU 数说明megatron:d2p2t4162 DP × 2 PP × 4 TPmegatron:d2p2t4e416同一网格4 路专家并行注意所有分配字符串都必须显式指定后端前缀裸维度字符串如d4t2不再被接受。另外顶层的allocation_mode配置字段已弃用请使用各引擎自己的backend字段当critic.backend或ref.backend为空时会自动继承actor.backend的值。训练后端定位后端支持的维度使用场景fsdpd,t,c简单并行的默认选择megatrond,t,p,c,e流水线或专家并行必需archond,t,p,c,eMegatron 的替代方案实验性从源码看MegatronEngineConfig定义于 areal/api/cli_args.py承载了并行、精度、checkpoint、MoE、FP8、bridge 等全部训练侧配置这些配置均可通过 YAML 中的actor.megatron.*字段或命令行覆盖注入。Bridge 后端选择mbridge 与 megatron-bridgeMegatronEngine支持通过actor.megatron.bridge_type选择两种 bridge 后端HF ↔ Megatron 之间的模型构建与权重转换桥actor: megatron: bridge_type: mbridge # 默认向后兼容设置bridge_type: megatron-bridge即可启用新后端。bridge_type字段的可选值在 cli_args.py 中定义为[mbridge, megatron-bridge]默认mbridge。两种后端的取舍与迁移建议详见 docs/zh/reference/bridge_backend.mdmbridge默认正在被弃用不支持 PEFT/LoRA但在 HF 模型加载/保存上实现更快、更优化若使用磁盘而非 XCCL进行权重广播仍推荐 mbridge。megatron-bridge支持更多更新的模型架构并提供内置的 PEFT/LoRA 实现若使用 XCCL 进行权重广播加载/保存耗时影响较小推荐作为新工作流的首选。当前限制MegatronEngine的 tree-attention 训练路径目前仅支持mbridge暂不支持megatron-bridge。这一约束在源码中有直接印证在 megatron_engine.py 的initialize中启用 LoRA 且bridge_cls ! megatron-bridge时会直接抛出NotImplementedError_apply_megatron_bridge_loramegatron_engine.py通过MegatronBridgeLoRA注入 LoRA 模块target_modules未指定或含all-linear时会展开为linear_qkv、linear_proj、linear_fc1、linear_fc2四类线性层目标。仓库中的 LoRA MoE 示例 examples/math/gsm8k_grpo_megatron_lora_moe.yaml 展示了完整配置组合actor: backend: megatron:(attn:d1p6t1c1|ffn:d1p6t1e1) path: Qwen/Qwen3-30B-A3B-Base megatron: bridge_type: megatron-bridge weight_update_mode: xccl use_lora: ${rollout.use_lora} peft_type: lora lora_rank: 32 lora_alpha: 32 target_modules: [linear_qkv, linear_proj, linear_fc1, linear_fc2]注意该示例中 rollout 侧使用 vLLM 并开启enable_lora: true与max_lora_rank配合rollout.use_lora: true实现训练/推理两侧的 LoRA 协同。MoE 并行策略注意力和专家模块独立并行对于 MoE 模型Megatron 使用混合语法支持注意力模块和 FFN专家模块的独立并行megatron:(attn:attn_dims|ffn:ffn_dims)例如文档中的 16-GPU 配置megatron:(attn:d1p4t2c2|ffn:d1p4t1e4)模块dppptpcpepWorld Sizeattn1422-16ffn141-416该配置使用 PP4注意力模块使用 TP2 和 CP2而专家模块使用 TP1 和 EP4。这种MoE Parallel Folding机制来自 Megatron-LM 的 transformer/moe 实现可以降低同时组合上下文并行CP和专家并行EP时的最低 GPU 要求。约束条件使用混合语法时必须遵守以下约束见 docs/zh/reference/alloc_mode.md流水线并行大小p对attn和ffn必须相同World size 必须匹配如果ffn中省略d则自动派生专家并行e仅在ffn部分有效。相关 MoE 配置项在 MegatronEngineConfig 中还提供了一批与 MoE 训练强相关的细粒度配置可通过actor.megatron.*设置moe_token_dispatcher_type默认alltoalltoken dispatcher 类型可选allgather、alltoall和flexmoe_permute_fusion/moe_router_fusion是否融合 token 重排 / TopK 路由与 aux-loss 计算后者要求 TransformerEngine ≥ 2.7.0moe_shared_expert_overlap共享专家计算与 dispatcher 通信重叠默认None保持模型 bridge 自身默认moe_router_dtype默认fp32路由器 gate GEMM 以 FP32 计算以提升数值稳定性moe_router_bias_update_rateaux-loss-free 负载均衡DeepSeek V3 风格的expert_bias更新速率1e-3对应 DeepSeek V3moe_z_loss_coeff路由器 z-loss 缩放系数起始值建议1e-3None表示关闭。这些参数会在_build_hf_mcore_bridgemegatron_engine.py中通过set_extra_args注入 mbridge且只会透传目标TransformerConfig类确实接受的字段。对齐推理和训练精度开启确定性算法由于 MoE 模型的稀疏性推理和训练期间前向传递计算的 logits 可能会严重不对齐导致训练不稳定。为缓解这种不稳定强烈建议设置actor.megatron.use_deterministic_algorithmsTrue以禁用 Megatron 中的非确定性计算尽管这可能使训练步骤减慢约 10-20%。actor: megatron: use_deterministic_algorithms: True底层实现它到底做了什么该开关在 areal/engine/megatron_utils/deterministic.py 的set_deterministic_algorithms中实现核心动作包括配置层将TransformerConfig.deterministic_modeTrue并关闭cross_entropy_loss_fusion与bias_dropout_fusion在prebuildTrue时还会强制attention_backendflashflash-attention 提供确定性的 backward而 cuDNN fused-attention 的确定性反向需要随上下文长度增长的 workspace成本过高环境变量层设置NVTE_ALLOW_NONDETERMINISTIC_ALGO0禁用 TransformerEngine 非确定性内核、NCCL_ALGORing固定 all-reduce 算法、CUBLAS_WORKSPACE_CONFIG:4096:8PyTorch 层调用torch.use_deterministic_algorithms(True, warn_onlyTrue)。为什么必须模型构建前生效该函数在MegatronEngine.initialize中被调用两次megatron_engine.py 与 L680-L682第一次以prebuildTrue作用于用于构建模型的TransformerConfig因为 TP 线性层和 TransformerEngine 模块在__init__时就会拷贝 config 标志若不在构建前设置层级别的 kernel 会保持非确定性第二次作用于已构建模型的 config覆盖 loss fusion、pipeline schedule 等运行时读取 config 的消费者。此外NVTE_ALLOW_NONDETERMINISTIC_ALGO若在transformer_engine导入之后再设置某些 TE 版本会在导入时快照该值而导致不生效AReaL 的 launcher 会在启用该开关时自动于训练进程启动前导出该变量代码中也有对应警告日志。端到端示例GSM8K Qwen3-30B-A3B 上运行 GRPO文档给出了一条可直接运行的命令在 32-GPU ray 集群4 节点 × 8 GPU上用 Qwen3 30B-A3B MoE 模型跑 GSM8K GRPO# 注意此处的分配模式仅用于说明目的未经过优化。 python3 examples/math/gsm8k_rl.py --config megatron_config.yaml \ scheduler.typeray \ experiment_namemegatron-moe-gsm8k-grpo trial_nametrial-0 \ rollout.backendsglang:d4t4 actor.backendmegatron:(attn:d1p4t2c2|ffn:d1p4t1e4) \ cluster.n_nodes4 cluster.n_gpus_per_node8 actor.pathQwen/Qwen3-30B-A3B \ actor.megatron.use_deterministic_algorithmsTrue该命令的配置分布如下rollout 推理侧sglang:d4t4即 4 个实例 × 4 TP GPU 16 GPUactor 训练侧megatron:(attn:d1p4t2c2|ffn:d1p4t1e4)即上文 16 GPU 的注意力/专家解耦并行总计16 16 32 GPU与cluster.n_nodes4 cluster.n_gpus_per_node8一致确定性训练actor.megatron.use_deterministic_algorithmsTrue保证推理与训练 logits 对齐。运行入口 examples/math/gsm8k_rl.py 是 GSM8K 数学任务的通用 RL 脚本通过--config指定 YAML并在命令行覆盖关键字段scheduler 类型、分配模式、集群规模、模型路径等。参考配置文件从单卡到 LoRA-MoE仓库中提供了一系列可直接对照的 Megatron 配置示例examples/math/gsm8k_grpo_megatron.yaml基础版actor.backend: megatron:d4p1t18 卡PP1模型为 Qwen2.5-1.5B-Instructrollout 用 SGLangsglang:d4p1t1ref 通过ref.backend: ${actor.backend}与 colocation 策略与 actor 共享 GPUexamples/math/gsm8k_grpo_megatron_fp8.yamlFP8 训练megatron.fp8_config示例examples/math/gsm8k_grpo_megatron_lora.yamlLoRA 训练示例examples/math/gsm8k_grpo_megatron_lora_moe.yamlQwen3-30B-A3B megatron-bridge LoRA 的完整 MoE 示例。以 gsm8k_grpo_megatron.yaml 为例actor段的关键字段还包括actor: backend: megatron:d4p1t1 path: Qwen/Qwen2.5-1.5B-Instruct disable_dropout: true dtype: bfloat16 mb_spec: max_tokens_per_mb: 10240 # 单 micro-batch 最大 token 数 optimizer: type: adam lr: 3e-6 lr_scheduler_type: constant gradient_clipping: 1.0 warmup_steps_proportion: 0.001 use_decoupled_loss: true # 解耦式 RL 损失 recompute_logprob: true scheduling_spec: - task_type: worker port_count: 2 gpu: 1 cmd: python3 -m areal.infra.rpc.rpc_server其中scheduling_spec定义了训练 worker 的资源需求每 worker 1 GPU、2 个端口供调度器在集群上分配mb_spec.max_tokens_per_mb控制 micro-batch 切分粒度直接影响显存占用与吞吐。训练侧的并行初始化、micro-batch 切分、梯度同步等均由MegatronEngine统一接管。从源码理解 MegatronEngine 的初始化关键链如果你要基于 Megatron 后端做二次开发或排查问题以下调用链值得关注均在 areal/engine/megatron_engine.py并行组初始化create_process_groupL409-L455→mpu.initialize_model_parallel(...)按tp-cp-ep-dp-pp的顺序建立 Megatron 并行状态并对子通信组做 eager warmupwarmup_process_groups避免与同驻colocated引擎的惰性初始化竞争模型与 bridge 构建initializeL493-L714→_build_hf_mcore_bridgeL782-L895按bridge_type分派到 mbridge 或 megatron-bridge随后make_hf_and_mcore_config生成 HF 与 MCore 双份 configconfigure_pipeline_layer_splits依据 PP 策略切分层确定性开关模型构建前set_deterministic_algorithms(tf_config, prebuildTrue)构建后再执行一次覆盖运行时消费者见上文权重加载_load_model_from_hf从 HF checkpoint 加载权重若启用 FP8还会清除 TE 参数上随机的high_precision_init_val避免 distributed optimizer 用随机初值初始化主参数见 L637-L659优化器与调度器_create_optimizer创建 Megatron 优化器与OptimizerParamScheduler并将 optimizer 的 loss scale 函数接回 MTP / MoE aux-loss 的梯度缩放_set_optimizer_grad_scale_funcL716-L733保证 FP16 反缩放不会让辅助损失梯度失真。对应地MegatronCheckpointManagerareal/engine/megatron_utils/checkpointer.py承担 Megatron 格式 checkpoint 的分布式保存/加载支持异步保存以降低大 MoE checkpoint 的同步等待。小结与最佳实践建议场景推荐配置首次从 FSDP 迁移仅改actor.backend: megatron:...其余保持默认大型 MoE如 30B-A3B混合语法megatron:(attn:...\|ffn:...)解耦注意力/专家并行配合 EP训练稳定性actor.megatron.use_deterministic_algorithmsTrue注意约 10-20% 减速新模型架构 / LoRAactor.megatron.bridge_type: megatron-bridge磁盘权重广播 / tree-attention保留默认mbridge一句话总结在 AReaL 中使用 Megatron 训练大型 MoE 模型核心就是一行切后端、按需选 Bridge、混合语法做并行、确定性开关保稳定其余训练流程GRPO/PPO/DPO 等与 FSDP 路径完全一致均由统一的TrainEngine接口屏蔽差异。【免费下载链接】AReaLThe RL Bridge for LLM-based Agent Applications. Made Simple Flexible.项目地址: https://gitcode.com/GitHub_Trending/are/AReaL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门