ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

verl 昇腾 NPU 高级特性指南:推理与训练后端优化实战

verl 昇腾 NPU 高级特性指南:推理与训练后端优化实战 verl 昇腾 NPU 高级特性指南推理与训练后端优化实战【免费下载链接】verlverl/HybridFlow: A Flexible and Efficient RL Post-Training Framework项目地址: https://gitcode.com/GitHub_Trending/ve/verl本篇技术指南以 verl 在华为昇腾 NPU 上的高级特性支持为主线系统梳理 vLLM / SGLang 推理后端与 FSDP / Megatron 训练后端在 NPU 上的能力边界、关键配置参数与 MindSpeed Monkey Patch 底层原理并覆盖内存优化、计算加速、并行策略与 MoE 模型特性。读者阅读后可掌握在 verl 中为 NPU 环境正确选择后端、配置高级参数并规避已知限制的完整方法直接指导昇腾集群上的 RL 后训练任务落地。1. 推理后端高级特性当前 verl 支持 vLLM 与 SGLang 两种主流推理后端二者均可在昇腾 NPU 上运行。Rollout 侧的相关参数统一由actor_rollout_ref.rollout配置段管理其默认值定义在 verl/trainer/config/rollout/rollout.yaml 中通过rollout.name可选值hf/vllm/sglang/trtllm选择后端。1.1 vLLM 推理后端昇腾通过vllm-ascend 插件支持 vLLM 推理后端。该插件遵循 vLLM 社区的 RFCIssue #11162提供了一个可插拔接口将 Ascend NPU 与 vLLM 解耦因此 verl 无需针对 NPU 修改 vLLM 调用逻辑仅需在环境中正确安装插件即可。vLLM 后端在 NPU 上可用的关键特性参数均映射到 verl 通用配置包括vLLM 参数verl 对应通用参数功能说明gpu_memory_utilizationactor_rollout_ref.rollout.gpu_memory_utilization控制每个阶段可用的 NPU 显存比例取值 0.0~1.0例如 0.8 表示使用总显存的 80%verl 默认 0.51.0 表示全部占用不推荐无缓冲预留enforce_eageractor_rollout_ref.rollout.enforce_eager禁用图模式verl 默认False即默认启用图模式以获得最佳性能enable_chunked_prefillactor_rollout_ref.rollout.enable_chunked_prefill分块预填充将大的预填充请求切分成更小的块并与解码请求一起批处理verl 默认Truefree_cache_engineactor_rollout_ref.rollout.free_cache_engine生成阶段结束后卸载 KV Cache降低训练-推理切换期的显存峰值verl 默认Trueenable_prefix_cachingactor_rollout_ref.rollout.enable_prefix_caching启用自动前缀缓存共享前缀的请求复用 KV Cache 块避免重复计算verl 默认Truemax_model_lenactor_rollout_ref.rollout.max_model_len模型可处理的最大序列长度限制单个输入序列的上限max_num_seqsactor_rollout_ref.rollout.max_num_seqs正在运行的请求最大并发数verl 默认 256max_num_batched_tokensactor_rollout_ref.rollout.max_num_batched_tokens单个 batch 内可处理的最大总 Token 数verl 默认 8192load_formatactor_rollout_ref.rollout.load_format加载的模型权重格式verl 默认dummy实际训练需按需设置为hf/safetensors等skip_tokenizer_initactor_rollout_ref.rollout.skip_tokenizer_init跳过分词器初始化直接将input_ids传入推理请求verl 默认Truequantizationactor_rollout_ref.rollout.quantization量化方法默认null当前仓库支持 fp8、torchao 等disable_log_statsactor_rollout_ref.rollout.disable_log_stats控制是否记录 rollout 统计日志verl 默认Truetrust_remote_codeactor_rollout_ref.model.trust_remote_code是否允许执行 Hub 上自定义模型的定义代码其中tp_size对应 verl 的actor_rollout_ref.rollout.tensor_model_parallel_size * data_parallel_sizedp_size对应actor_rollout_ref.rollout.data_parallel_sizeep_size对应actor_rollout_ref.rollout.expert_parallel_sizenode_rank、nnodes等节点级参数由 verl 根据实际实例数与卡数自动计算无需手动配置。上述默认值可在 rollout.yaml 中逐一核对。1.2 SGLang 推理后端昇腾对 SGLang 的支持方式是直接向 SGLang 社区持续建设与维护相关功能在 verl 中使用 SGLang 时还会涉及以下两个 Ascend 核心组件组件描述sgl_kernel_npuAscend NPU 优化的 SGL 推理内核集合涵盖注意力机制、归一化、激活函数、LoRA 适配器等算子实现deepepDeepEP 的 Ascend 实现为 MoE 模型提供高度优化的专家并行EP通信内核高级参数配置SGLang 参数verl 对应通用参数功能说明attention_backendactor_rollout_ref.rollout.engine_kwargs.sglang.attention_backend注意力后端选择— NPU 上应设置为ascend以调用昇腾优化内核quantizationactor_rollout_ref.rollout.quantization量化支持— 支持模型量化加载与推理默认nullmem_fraction_staticactor_rollout_ref.rollout.gpu_memory_utilization静态分配模型权重 KV Cache 内存池所占显存比例disable_cuda_graphactor_rollout_ref.rollout.enforce_eager禁用图模式verl 默认Falseenable_memory_saver无verl 中默认设置为True允许通过release_memory_occupation/resume_memory_occupation动态释放/恢复显存max_running_requestsactor_rollout_ref.rollout.max_num_seqs正在运行的请求最大并发数skip_server_warmup无默认True跳过服务预热log_level无默认error日志级别在 verl 中SGLang 引擎级参数通过engine_kwargs.sglang透传。从源码看async_sglang_server.py 会从engine_kwargs中弹出attention_backend等字段若用户未显式指定非 NPU 环境下会根据硬件自动选择aiter/flashinfer/fa3等实现而 NPU 场景下则要求显式设置为ascend以命中昇腾优化内核。此外SGLang 后端的更多特性参数如base_gpu_id、gpu_id_step、dist_init_addr等由 verl 自动计算或使用默认值相关完整对照可参考姊妹文档 ascend_backend_features.md。2. 训练后端高级特性2.1 FSDP 训练后端昇腾通过torch_npu提供 FSDP 相关支持能力PyTorch API 支持度以昇腾官方版本说明为准。FSDP 训练后端在 NPU 上的关键参数如下verl 参数功能说明actor_rollout_ref.actor.fsdp_config.param_offload是否将模型权重卸载到 CPU默认Falseactor_rollout_ref.actor.fsdp_config.optimizer_offload是否将优化器状态卸载到 CPU默认Falseactor_rollout_ref.actor.fsdp_config.reshard_after_forward控制前向计算后的参数行为默认True表示前向结束后重新分片参数、反向时重新全收集以内存换通信actor_rollout_ref.actor.fsdp_config.fsdp_size每个 FSDP 分片组内的 NPU 数量默认-1表示自动actor_rollout_ref.actor.ulysses_sequence_parallel_sizeUlysses 序列并行大小actor_rollout_ref.actor.entropy_from_logits_with_chunking分块计算熵以降低显存峰值默认Falseactor_rollout_ref.actor.entropy_from_logits_chunk_size熵计算分块大小默认2048见 megatron_actor.yamlactor_rollout_ref.actor.fsdp_config.entropy_checkpointing训练时对熵计算启用重计算降低显存峰值默认Falseactor_rollout_ref.actor.fsdp_config.forward_only是否只进行前向计算默认False其中forward_prefetch前向计算完成前预取下一次前向传播的 all-gather与use_orig_paramsFSDP 是否使用模块原始参数初始化仅适用于 FSDP1FSDP2 为默认推荐版本。2.2 Megatron 训练后端Megatron 是 NVIDIA 推出的模型并行训练框架。当一个基于 verl 的训练任务选用 Megatron 后端、又需要在 NPU 上运行时必须额外安装MindSpeed提供底层支持。MindSpeed 采用Monkey Patch 技术无感替换 Megatron 中的关键组件从而实现 NPU 适配。MindSpeed Monkey Patch 框架原理触发入口在 verl 中通过以下导入触发 patch 流程from mindspeed.megatron_adaptor import repatch调用链repatch ├── 执行 megatron_adaptor.py 模块导入 ├── 导入 features_manager 模块 ├── 执行 mindspeed/features_manager/__init__.py ├── AutoExecuteFunction 装饰器触发 ├── patch_features() 自动执行 └── 进行 apply_features_pre_patches 和 apply_features_patches 操作核心组件组件职责Patch类实现函数/类的动态替换支持多层装饰器叠加parse_path()动态模块导入和创建MindSpeedPatchesManager全局单例管理所有 patch 注册内部维护patches_info: Dict[str, Patch]MindSpeedFeatureFeature 基类各特性通过继承集成 patch 系统在 verl 仓库内可以找到与 MindSpeed 适配链路对应的证据Megatron 训练后端的默认参数集中在 verl/trainer/config/engine/megatron.yaml其override_transformer_config段即用于向 Megatron-Core 透传各类 Transformer 级配置权重转换与 checkpoint 保存依赖 mbridge 机制详细说明见 verl/models/mcore/readme.md。Megatron 高级参数配置内存与计算优化verl 参数功能说明actor_rollout_ref.actor.megatron.override_transformer_config.deallocate_pipeline_outputs流水线输出释放— 张量发送到下一 PP stage 后释放输出数据降低显存峰值默认Falseactor_rollout_ref.actor.megatron.override_transformer_config.recompute_granularity重计算粒度控制— 可选full/selective/nonefull重算整个 Transformer 层selective仅重算注意力核心部分源码默认recompute_modules: [core_attn]默认noneactor_rollout_ref.actor.megatron.override_transformer_config.recompute_method重计算方法— 需recompute_granularityfull才生效可选uniform/block默认nulluniform按层均分重计算单元block按流水线 stage 内指定层数重计算actor_rollout_ref.actor.megatron.override_transformer_config.recompute_num_layers重计算层数— 需recompute_granularityfull才生效值越大显存占用越小、计算成本越高且当前进程的模型层数需能被其整除默认null从 megatron.yaml 可看到这些字段在 verl 中的真实默认值均为null/[core_attn]即默认采用对性能干扰最小的重计算策略attention_backend在 verl 侧默认为flash。融合算子加速verl 参数功能说明actor_rollout_ref.actor.megatron.override_transformer_config.use_flash_attnFlash Attention— 使用 Flash Attention 加速注意力计算默认trueactor_rollout_ref.actor.megatron.override_transformer_config.use_fused_rotary_pos_emb融合旋转位置编码— 使用融合算子加速 RoPE 计算默认Falseactor_rollout_ref.actor.megatron.override_transformer_config.use_fused_swiglu融合 SwiGLU— 使用融合算子加速 SwiGLU 激活函数默认Falseactor_rollout_ref.actor.megatron.override_transformer_config.persist_layer_norm持久化 LayerNorm— 使用持久化策略优化 LayerNorm 执行默认False流水线并行优化verl 参数功能说明actor_rollout_ref.actor.megatron.override_transformer_config.account_for_loss_in_pipeline_splitLoss 层流水线划分— 为True时 loss 层被视为标准 Transformer 层参与划分与放置默认Falseactor_rollout_ref.actor.megatron.override_transformer_config.account_for_embedding_in_pipeline_splitEmbedding 层流水线划分— 为True时输入 embedding 层被视为标准 Transformer 层参与划分默认Falseactor_rollout_ref.actor.megatron.override_transformer_config.num_layers_in_first_pipeline_stage首 stage 层数— 指定第一个 pipeline stage 的层数默认nullactor_rollout_ref.actor.megatron.override_transformer_config.num_layers_in_last_pipeline_stage末 stage 层数— 指定最后一个 pipeline stage 的层数默认null权重管理verl 参数功能说明actor_rollout_ref.actor.megatron.use_mbridgeMBridge 权重转换— 启用 mbridge 进行在线权重格式转换HF ↔ Megatron-Core默认True。为True时 engine 会构造bridge并交给 checkpoint manager从而可读写model/huggingface/目录为False时一般无hf_model槽位actor_rollout_ref.actor.megatron.use_dist_checkpointing分布式 checkpoint— 为True时model槽位使用 Megatrondist_checkpointing分片model/dist_ckpt/默认False与use_mbridge相互独立可同时开启以在同一 checkpoint 中写入 HF 树与分片actor_rollout_ref.actor.megatron.dist_checkpointing_path分布式权重路径— 分布式 checkpoint 加载路径默认null这三个参数的默认值均可直接核对 megatron.yaml 与 engine.py 中McoreEngineConfig数据类的字段定义。另外值得说明的是use_mbridgeTrue时 verl 采用Megatron-Bridgevanilla_mbridgeFalse作为默认权重转换实现旧版 mbridge 通过vanilla_mbridgeTrue兼容选择详见 verl/models/mcore/readme.md。3. 性能优化特性3.1 内存优化特性推理/训练说明KV Cache 动态释放free_cache_engine推理 (vLLM)生成阶段后自动卸载 KV Cache默认启用rollout.yaml内存节省模式enable_memory_saver推理 (SGLang)支持显存动态释放/恢复verl 默认True参数 CPU 卸载param_offload训练 (FSDP/Megatron)将模型权重卸载到 CPU优化器 CPU 卸载optimizer_offload训练 (FSDP/Megatron)将优化器状态卸载到 CPU分块熵计算entropy_from_logits_with_chunking训练 (FSDP)分块计算熵值降低显存峰值熵计算分块大小entropy_from_logits_chunk_size训练 (FSDP)熵计算分块大小默认 2048熵计算重计算entropy_checkpointing训练 (FSDP)对熵计算启用重计算流水线输出释放deallocate_pipeline_outputs训练 (Megatron)PP 场景下释放已传递的张量激活重计算recompute_granularity训练 (Megatron)支持 full/selective/none 三级粒度控制3.2 计算加速特性推理/训练说明分块预填充enable_chunked_prefill推理 (vLLM)大预填充分块并与解码 batch 处理默认True前缀缓存enable_prefix_caching推理 (vLLM)自动缓存共享前缀减少重复计算默认TrueFlash Attention训练 (Megatron)加速注意力计算默认启用use_flash_attn: true融合旋转位置编码use_fused_rotary_pos_emb训练 (Megatron)融合算子加速 RoPE融合 SwiGLUuse_fused_swiglu训练 (Megatron)融合算子加速 SwiGLU 激活函数持久化 LayerNormpersist_layer_norm训练 (Megatron)优化 LayerNorm 执行策略Group GEMMmoe_grouped_gemm训练 (Megatron)MoE 场景下的 Group GEMM 优化3.3 并行策略并行类型vLLMSGLangFSDPMegatron说明数据并行 (DP)✅✅✅✅数据维度并行张量并行 (TP)✅✅—✅层内张量切分流水线并行 (PP)———✅层间流水线切分专家并行 (EP)✅✅—✅MoE 专家维度并行序列并行 (SP/Ulysses)✅✅✅✅序列维度切分支持长序列上下文并行 (CP)✅——✅上下文并行处理并行配置在 verl 中的落点rollout 侧为actor_rollout_ref.rollout.tensor_model_parallel_size/data_parallel_size/expert_parallel_size默认 2 / 1 / 1见 rollout.yamlMegatron 训练侧为actor_rollout_ref.actor.megatron.tensor_model_parallel_size/pipeline_model_parallel_size/expert_model_parallel_size/context_parallel_size默认均为 1见 megatron.yamlFSDP 侧通过actor_rollout_ref.actor.ulysses_sequence_parallel_size启用 Ulysses 序列并行。4. 混合专家模型 (MoE) 特性vLLM/SGLang 推理 MoE 支持专家并行 (EP)— 通过actor_rollout_ref.rollout.expert_parallel_size配置将不同专家分配到不同 NPU 设备。注意在 vLLM 中EP1表示基于 fused_moe 的 ETP 并行权重按 TP×DP 切分EP1需满足 EPTP×DP表示真正的 EP 并行。SGLang 通过deepep组件提供高度优化的 EP 通信内核适用于大规模 MoE 推理。Megatron 训练 MoE 支持verl 参数功能说明actor_rollout_ref.actor.megatron.expert_model_parallel_size专家并行 (EP) 大小默认1actor_rollout_ref.actor.megatron.expert_tensor_parallel_sizeTP 拓展 EP 大小默认null为 null 时与 TP 相同见 megatron.yamlactor_rollout_ref.actor.megatron.override_transformer_config.moe_grouped_gemmGroup GEMM— MoE 场景下使用 Group GEMM 优化专家计算默认Falseactor_rollout_ref.actor.megatron.override_transformer_config.moe_router_dtype路由数据类型— 路由与专家输出加权平均的数据类型可选fp32/fp64默认fp32专家数量较多时提高数值稳定性仓库内已有 MoE 模型在 NPU 上开启这些特性的实际用法例如 grpo_qwen35_35b_megatron_async.sh 中通过actor_rollout_ref.actor.megatron.override_transformer_config.moe_grouped_gemmTrue与moe_router_dtypefp32组合开启 Group GEMM 并固定路由精度。此外 config_converter.py 展示了moe_grouped_gemmTrue、moe_router_dtypefp64等高精度配置在 mcore 模型转换中的实际映射说明 verl 会将这两个参数透传给 Megatron-Core 的 MoE 实现。5. 限制与注意事项mbridge 与 VPP 互斥actor_rollout_ref.actor.megatron.use_mbridge与actor_rollout_ref.actor.megatron.virtual_pipeline_model_parallel_sizeVPP暂不支持同时开启。由于 verl 默认开启 mbridgeuse_mbridge: True使用 VPP 参数时需手动将use_mbridge置为False。FSDP1 vs FSDP2 差异forward_prefetch和use_orig_params仅适用于 FSDP1。FSDP2 为默认推荐版本API 支持度参照昇腾 PyTorch 版本说明如 torch 2.7.1 的torch.distributed.fsdp文档。重计算参数依赖关系recompute_method需recompute_granularityfull才生效。recompute_num_layers需recompute_granularityfull才生效。当recompute_methoduniform时recompute_num_layers表示每个重计算单元包含的 Transformer 层数需能被当前进程模型层数整除。SGLang NPU 特有配置attention_backend必须设置为ascend以调用昇腾优化内核通过actor_rollout_ref.rollout.engine_kwargs.sglang.attention_backendascend传入。enable_memory_saver在 verl 中默认启用无需额外配置。6. 附录参数速查表推理后端参数速查参数类别vLLM 参数SGLang 参数verl 通用参数模型路径model_pathmodel_pathactor_rollout_ref.model.path显存控制gpu_memory_utilizationmem_fraction_staticactor_rollout_ref.rollout.gpu_memory_utilization图模式enforce_eagerdisable_cuda_graphactor_rollout_ref.rollout.enforce_eager量化quantizationquantizationactor_rollout_ref.rollout.quantization最大序列长度max_model_len—actor_rollout_ref.rollout.max_model_len最大并发数max_num_seqsmax_running_requestsactor_rollout_ref.rollout.max_num_seqs分词器skip_tokenizer_initskip_tokenizer_initactor_rollout_ref.rollout.skip_tokenizer_init远程代码trust_remote_codetrust_remote_codeactor_rollout_ref.model.trust_remote_codeTP 并行tp_sizetp_sizeactor_rollout_ref.rollout.tensor_model_parallel_sizeDP 并行dp_sizedp_sizeactor_rollout_ref.rollout.data_parallel_sizeEP 并行ep_sizeep_sizeactor_rollout_ref.rollout.expert_parallel_size训练后端参数速查参数类别FSDP 参数Megatron 参数参数卸载fsdp_config.param_offloadmegatron.param_offload优化器卸载fsdp_config.optimizer_offloadmegatron.optimizer_offload序列并行ulysses_sequence_parallel_sizecontext_parallel_sizeFlash Attention—override_transformer_config.use_flash_attn重计算粒度—override_transformer_config.recompute_granularity分布式 Checkpoint—use_dist_checkpointing7. 实战参考NPU 任务配置示例FSDP vLLM 后端Qwen3-32B GRPO仓库 examples/ascend_extras/grpo_trainer/run_qwen3_32b_fsdp.sh 给出了完整的昇腾 NPU FSDP 训练脚本其中与本指南高级特性直接相关的配置包括# 推理侧vLLM 后端 显存与性能特性 actor_rollout_ref.rollout.namevllm actor_rollout_ref.rollout.gpu_memory_utilization0.7 actor_rollout_ref.rollout.tensor_model_parallel_size4 actor_rollout_ref.rollout.enable_chunked_prefillTrue actor_rollout_ref.rollout.max_num_batched_tokens32768 # 训练侧FSDP 参数/优化器卸载 序列并行 actor_rollout_ref.actor.ulysses_sequence_parallel_size4 actor_rollout_ref.actor.fsdp_config.param_offloadTrue actor_rollout_ref.actor.fsdp_config.optimizer_offloadFalse actor_rollout_ref.ref.fsdp_config.param_offloadTrueMegatron 后端的 NPU 任务Megatron 后端的 NPU 用例可参考 examples/ascend_extras/grpo_trainer/run_qwen3_235b_256k_megatron.sh 与 examples/ascend_extras/grpo_trainer/run_glm5_2_megatron.sh它们在命令行中通过actor_rollout_ref.actor.megatron.override_transformer_config.*前缀覆盖重计算、融合算子与流水线切分参数是上述各表参数在实际训练脚本中的标准用法。环境安装与容器构建方式见 docs/ascend_tutorial/zh/get_start/install_guidance.rst 与 docker/ascend 目录下对应的 NPU Dockerfile。注意上述示例脚本仅供查看与参考运行方式请勿在只读仓库内修改实际使用时复制到自己的训练环境并按需调整路径与并行度。【免费下载链接】verlverl/HybridFlow: A Flexible and Efficient RL Post-Training Framework项目地址: https://gitcode.com/GitHub_Trending/ve/verl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表