完全指南:用 Backend 字符串精确控制训练/推理 GPU 分配)
AReaL 分配模式Allocation Mode完全指南用 Backend 字符串精确控制训练/推理 GPU 分配【免费下载链接】AReaLThe RL Bridge for LLM-based Agent Applications. Made Simple Flexible.项目地址: https://gitcode.com/GitHub_Trending/are/AReaL导读分配模式Allocation Mode是 AReaL 中控制 GPU 如何在推理后端SGLang/vLLM与训练后端FSDP/Megatron/Archon之间分配的核心配置系统。分布式 RL 训练需要同时运行 rollout采样、actor/critic训练等引擎组件每个组件该用几个 GPU、采用何种并行策略都由一条紧凑的backend字符串决定。读完本文你将掌握backend字符串语法、五种并行维度d/t/p/c/e的含义与 GPU 计算规则、各后端支持的维度范围以及面向 MoE 模型的混合并行attn/ffn 拆分写法并能直接用于配置自己的 RL 训练任务。分配模式的定位从顶层字段到每引擎 Backend在 AReaL 中分布式 RL 训练由多个引擎组件协同完成actor策略训练、critic价值训练、rollout推理采样、ref参考模型、teacher如 MOPD 教师模型。每个组件都有独立的backend配置字段用于指定三件事使用哪个后端SGLang、vLLM 负责推理FSDP、Megatron、Archon 负责训练采用何种并行化策略数据/张量/流水线/上下文/专家并行需要多少 GPU。AReaL 会将每一条backend字符串解析为ModelAllocation对象进而驱动该引擎的资源分配。该对象的定义位于 areal/api/alloc_mode.py核心字段为backend后端类型、name组件名、parallelParallelStrategy并行策略与scheduling_strategy调度策略。ModelAllocation.from_str()即解析单条backend字符串的入口源码引擎配置中的backend字段正是经由它完成解析。注意重要迁移说明顶层的allocation_mode配置字段已弃用仅为旧版 SPMD 启动器local/ray/slurm保留向后兼容性单控制器调度器会忽略该字段。请一律使用各引擎的backend字段。在源码层面旧的AllocationMode类已被移除——alloc_mode.py 中的__getattr__会在有人尝试导入旧名称时直接抛出AttributeError并提示迁移到每引擎backend字段。Backend 字符串语法与并行维度基本语法backend:parallelism_dims例如fsdp:d4t2表示使用 FSDP 后端数据并行大小为 4tensor 并行大小为 2。引擎配置中backend字段的元信息cli_args.py、cli_args.py明确要求必须包含显式后端前缀。五种并行维度维度缩写描述适用于Datad模型副本数量所有后端Tensort跨 GPU 分割操作所有后端Pipelinep跨 GPU 阶段分割层Megatron、ArchonContextc跨 GPU 分割序列长度所有后端Experte跨 GPU 分割 MoE 专家Megatron、Archon维度以缩写大小形式连续书写例如d4t2表示数据并行 4、tensor 并行 2。在源码中这些维度被映射到ParallelStrategy的对应字段alloc_mode.pytensor_parallel_size、pipeline_parallel_size、data_parallel_size、context_parallel_size、expert_parallel_size外加一个默认禁用值为 1的expert_tensor_parallel_size。其中Context 并行只对注意力模块生效用于切分序列长度Expert 并行只对 MoE 模块生效用于跨 GPU 切分专家。计算 GPU 需求组件的 GPU 总数world size计算如下world_size dp × tp × pp × cp专家并行e不会增加 world size——它只是在现有 GPU 网格内重新分配专家的放置位置。这一逻辑与 alloc_mode.py 中world_size属性的实现完全一致仅乘 dp、cp、tp、pp 四项。示例Backend 字符串每引擎 GPU 数说明fsdp:d888 个数据并行副本sglang:d2t482 个实例 × 4 TP GPUmegatron:d2p2t4162 DP × 2 PP × 4 TPmegatron:d2p2t4e416同一网格4 路专家并行完整配置示例# 16 GPU 配置8 推理 8 训练 rollout: backend: sglang:d2t4 # 2 × 4 8 GPU actor: backend: fsdp:d4t2 # 4 × 2 8 GPUcritic.backend与ref.backend为空时会自动继承actor.backend的值因此这两个组件通常无需显式书写。仓库中的真实配置可以印证这种写法例如 examples/math/gsm8k_grpo_megatron.yaml 中actor.backend: megatron:d4p1t1、rollout.backend: sglang:d4p1t1且ref.backend: ${actor.backend}直接以变量形式复用 actor 的 backend。后端选择各后端支持的并行维度推理后端后端支持的维度sglangd,t,pvllmd,t,p对于推理后端d表示独立服务器实例的数量每个实例使用t × p个 GPU。ModelAllocation的world_size属性对训练组件返回dp × cp × tp × pp而推理组件的实例规模由tp × pp决定旧_AllocationMode.gen_instance_size即如此计算见 alloc_mode.py。需要注意内部后端配置不影响 AReaL 如何分配 GPU。给定rollout.backend: sglang:d4t4你还可以配置sglang.dp_size4、sglang.ep_size4和sglang.enable_dp_attentionTrue。此时 AReaL 启动 4 个模型副本每个副本 4 个 GPU而在每个实例内部SGLang 仍可借助 DP attention 与专家并行来分配注意力层和专家层中的计算。训练后端后端支持的维度使用场景fsdpd,t,c简单并行的默认选择megatrond,t,p,c,e流水线或专家并行必需archond,t,p,c,eMegatron 的替代方案实验性FSDP 后端对并行维度的限制有源码级校验ModelAllocation.__post_init__alloc_mode.py会在检测到pipeline_parallel_size 1或expert_parallel_size 1时抛出AllocationValidationError错误信息为 FSDP backend only supports data/tensor/context parallelism。对应测试见 tests/test_allocation_mode.py。重要所有分配字符串都必须显式指定后端前缀。裸维度字符串如d4t2不再被接受请始终显式书写为fsdp:d4t2、megatron:d2p2t4、sglang:d4t2这样的形式。在解析器层面裸维度或裸混合 MoE 语法会被直接拒绝_ParallelStrategyTransformer的train_dims_only、train_name_only会抛出 Backend must be explicitly specified 的AllocationValidationErroralloc_mode.py测试覆盖见 tests/test_allocation_mode.py。MoE 混合并行attn 与 ffn 使用不同策略对于 Mixture-of-Experts 模型Megatron/Archon 支持用混合语法为注意力模块和 FFN专家模块指定不同的并行策略megatron:(attn:attn_dims|ffn:ffn_dims)这启用了MoE Parallel Folding机制可以降低组合上下文并行与专家并行时的最低 GPU 要求参见 Megatron-LM 文档中 moe-parallel-folding 与 performance-best-practice 的相关说明。约束流水线并行大小p对attn和ffn必须相同——源码中hybrid_train_para会显式校验二者 pp 一致alloc_mode.pyWorld size 必须匹配如果ffn中省略d则根据 world size 自动派生——校验逻辑见 alloc_mode.py不匹配时抛出InvalidAllocationModeError专家并行e仅在ffn部分有效。示例actor: backend: megatron:(attn:d4p2t2c2|ffn:d2p2t4e2)模块dppptpcpepWorld Sizeattn4222-32ffn224-232上表中 attn 的 world size 为4×2×2×2 32ffn 侧省略了d解析器自动推导出d 32 / (2×4×2) 2从而保证两侧 world size 一致。这一解析行为由_LLMParallelParser基于 Lark 文法完成文法定于 alloc_mode.pyATTN_DIM_TYPE允许c/d/t/pFFN_DIM_TYPE允许d/e/t/p与e仅在 ffn 部分有效的约束完全对应。测试用例megatron_hybrid_moemegatron:(attn:d4p2t2c2|ffn:d2p2t4e2)验证了该语法与expert_tensor_parallel_size 4的解析结果tests/test_allocation_mode.py。深入字符串如何被解析成资源分配理解底层解析链路有助于排查配置问题。backend字符串的解析由基于Lark 文法的_LLMParallelParser完成alloc_mode.py文法定义ALLOCATION_GRAMMAR定义了完整语法其中|colocation共置的优先级高于disaggregation分离即ab|c解析为a(b|c)该优先级已被测试test_operator_precedence验证tests/test_allocation_mode.py解析与转换parse()先用 Earley 解析器生成语法树再由_ParallelStrategyTransformer转换为ModelAllocation对象列表转换过程中会执行名称唯一性、world size 整除性等校验错误处理Lark 抛出的VisitError会被解包还原为AllocationValidationError或InvalidAllocationModeError等语义化错误并附带修正提示如冒号而非点号分隔后端与维度。此外ModelAllocation.from_str()只接受单组件字符串包含的多组件写法会抛出ValueError提示改用各引擎独立的backend字段alloc_mode.py。多组件的/|语法仅存在于已弃用的_AllocationMode兼容路径中。实战建议与常见错误优先使用每引擎backend字段这是当前唯一被单控制器调度器识别的配置方式旧allocation_mode仅为 SPMD 启动器兼容保留。显式写清后端前缀d4t2、[actor]:d4、attn:d4p2t2c2|ffn:d2p2t4e2无后端都会报 Backend must be explicitly specified。FSDP 不要写p和e维度会被AllocationValidationError拒绝。混合 MoE 两侧 pp 必须一致、world size 必须匹配不满足会分别触发 Pipeline parallel size ... must be identical 与 World size ... must be identical 错误。推理组件明确 d 的语义对 sglang/vllmd是服务器实例数而非数据并行副本数GPU 总数为d × t × p。观察真实配置更多可运行的完整示例可参考 examples/math/gsm8k_grpo_megatron.yaml、examples/math/gsm8k_grpo_lora.yaml 等文件。另见Megatron 后端教程 —— Megatron 后端的完整配置与训练指南Archon: PyTorch-Native 训练引擎 —— Archon 后端教程实验性gsm8k_grpo 教程 —— 从零跑通 GRPO 训练含完整 YAML 配置。【免费下载链接】AReaLThe RL Bridge for LLM-based Agent Applications. Made Simple Flexible.项目地址: https://gitcode.com/GitHub_Trending/are/AReaL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考