vLLM 专家并行部署指南

Share

Summary

本文档介绍了如何在 vLLM 中部署专家并行(EP),包括单节点和多节点配置,以及专家并行负载均衡器(EPLB)和分离式服务(预填充/解码分离)的详细信息。

vLLM 专家并行部署指南

Highlights

专家并行概述

vLLM 支持专家并行(EP),它允许将混合专家(MoE)模型中的专家部署在独立的 GPU 上,从而提高局部性、效率和吞吐量。EP 通常与数据并行(DP)结合使用,尽管 DP 可以独立使用,但与 EP 结合使用时效率更高。部署 EP 需要安装 DeepEP 和 DeepGEMM 库,对于分离式服务还需要安装 gdrcopy。

后端选择指南

vLLM 为 EP 提供了多种通信后端,可以通过 --all2all-backend 参数选择。allgather_reducescatter 是默认后端,适用于通用 EP+DP 配置。deepep_high_throughput 优化了预填充阶段,适用于预填充密集型工作负载。deepep_low_latency 优化了解码阶段,支持 CUDA 图,适用于低延迟场景。FlashInfer 的 nvlink_one_sided 和 nvlink_two_sided 适用于多节点 NVLink 系统,分别针对高吞吐量和 NVLink 跨节点系统。

单节点部署

在单节点部署中,需要通过 --enable-expert-parallel 标志启用 EP。EP 大小会自动计算为 TP_SIZE × DP_SIZE。当 EP 启用时,MoE 层会跨所有 EP 秩进行分片,而注意力层在 TP=1 时复制,在 TP>1 时跨 TP 秩分片。这与传统数据并行部署不同,传统部署中 MoE 层使用张量并行。提供了在单个 H200 (或 H20) 节点上部署 DeepSeek-V3-0324 模型的示例命令。

多节点部署

多节点部署需要为每个节点运行单独的命令,配置网络,并设置节点角色(主节点处理请求,次节点以无头模式运行)。示例展示了使用 deepep_low_latency 模式在 2 个节点上部署 DeepSeek-V3-0324 模型,其中一个节点为主节点,另一个节点为无头模式的次节点。需要注意配置 --data-parallel-start-rank 和 --api-server-count。InfiniBand 集群需要设置 GLOO_SOCKET_IFNAME 环境变量。

专家并行负载均衡器 (EPLB)

由于专家路由可能导致专家负载不均衡,vLLM 提供了 EPLB 来重新分配专家映射以平衡负载。通过 --enable-eplb 标志启用,并通过 --eplb-config JSON 字符串配置参数,如 window_size、step_interval、num_redundant_experts 和 policy。EPLB 会引入内存开销,具体取决于冗余专家的数量。提供了启用 EPLB 的单节点部署示例命令,并建议在大规模使用时将 num_redundant_experts 设置为 32。

高级配置与故障排除

性能优化方面,提到了 DeepEP 内核、双批次重叠(DBO)和异步调度。故障排除部分列出了常见的错误和解决方案,例如非零状态、IBGDA 初始化失败以及 NVSHMEM 对等断开连接。基准测试时建议使用模拟器标志 VLLM_MOE_ROUTING_SIMULATION_STRATEGY 和 VLLM_RANDOMIZE_DP_DUMMY_INPUTS,并可以通过调整 VLLM_MOE_DP_CHUNK_SIZE 和 NVSHMEM_QP_DEPTH 来优化吞吐量。

分离式服务(预填充/解码分离)

分离式服务允许独立扩展预填充和解码操作,以满足严格的 SLA 要求。预填充实例使用 deepep_high_throughput 后端,解码实例使用 deepep_low_latency 后端,并通过 NIXL 或其他 KV 连接器进行 KV 缓存传输。设置步骤包括安装 gdrcopy/ucx/nixl,并为两个实例配置 --kv-transfer-config。提供了客户端编排示例,演示了如何协调预填充和解码操作。基准测试时,可以使用 DecodeBenchConnector 来模拟解码部署,并利用 CUDAGraph 捕获进行性能分析。

Recently Summarized Articles

Loading...