资讯动态

vLLM 并行与扩展部署:从单机张量并行到多机 Ray/Multiprocessing 集群

发布时间:2026/9/7 4:04:36 来源:尧图企业网站定制
vLLM 并行与扩展部署从单机张量并行到多机 Ray/Multiprocessing 集群【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllm本文围绕 vLLM 官方文档 docs/serving/parallelism_scaling.md 展开讲清如何为一个单模型副本选择合适的分布式推理策略张量并行 TP、流水线并行 PP、数据并行 DP 与专家并行 EP并给出从 4 卡单节点到多节点 Ray 集群、Multiprocessing 多机部署的完整可复制操作步骤。读完本篇你将能够独立估算并行度配置、读懂 KV cache 容量日志、搭建多机 vLLM 服务并通过 GPUDirect RDMA 与 InfiniBand 优化跨节点通信。分布式推理策略选择按模型大小逐级扩展vLLM 的并行策略遵循“够用即可”的原则。文档给出的选型准则如下单 GPU无分布式推理如果模型能放进单张 GPU通常不需要分布式推理直接在单卡上运行即可。单节点多 GPU张量并行模型超出单卡显存、但可以放进单节点多卡时使用张量并行tensor parallelism。例如在 4 卡节点上设置tensor_parallel_size4。多节点多 GPU张量并行 流水线并行模型超出单节点容量时组合张量并行与流水线并行pipeline parallelism。将tensor_parallel_size设为每节点 GPU 数将pipeline_parallel_size设为节点数。例如 2 个节点、每节点 8 卡时设置tensor_parallel_size8与pipeline_parallel_size2。核心经验法则不断增加 GPU 与节点数量直到显存足以容纳模型tensor_parallel_size 每节点 GPU 数pipeline_parallel_size 节点数。这些并行度最终落在ParallelConfig上。从源码 vllm/config/parallel.py 可以看到pipeline_parallel_size与tensor_parallel_size默认值均为 1即默认单进程、无并行字段注释分别为 “Number of pipeline parallel groups” 与 “Number of tensor parallel groups”且均要求 1。通过启动日志验证显存与并发能力资源配置充足、模型能完整加载后运行vllm并关注如下日志来自文档示例INFO 07-23 13:56:04 [kv_cache_utils.py:775] GPU KV cache size: 643,232 tokens INFO 07-23 13:56:04 [kv_cache_utils.py:779] Maximum concurrency for 40,960 tokens per request: 15.70xGPU KV cache size一行报告 GPU KV cache 一次可存放的总 token 数Maximum concurrency一行估算“若每个请求需要 N 个 token示例中为 40,960时系统可并发服务的请求数”。这里的 N 取自模型配置的最大序列长度ModelConfig.max_model_len若这两个数值低于吞吐要求需要继续向集群中添加 GPU 或节点。在源码层面这两行日志由 vllm/v1/core/kv_cache_utils.py 中的格式化字符串GPU KV cache size: %s tokens, Maximum concurrency for %s tokens per request: %.2fx输出与文档描述完全对应。边界情况GPU 不能整切模型文档特别指出两类场景应改用流水线并行模型能装进单节点但 GPU 数量不能整除模型切分要求时——流水线并行按层切分模型支持不均匀切分。此时设置tensor_parallel_size1pipeline_parallel_size等于 GPU 数。节点上的 GPU 之间没有 NVLINK 互联例如 L40S时——改用流水线并行替代张量并行可获得更高吞吐、更低通信开销。MoE 模型为专家层使用独立并行策略对于混合专家Mixture of Experts模型利用专家本身的并行性、为专家层使用独立并行策略往往更优。vLLM 支持“Data Parallel attention Expert/Tensor Parallel MoE 层”的大规模部署组合。更详细的内容见 Data Parallel Deployment。从源码结构看这一能力由ParallelConfig中的多个字段承载vllm/config/parallel.pyenable_expert_parallel对 MoE 层使用专家并行替代张量并行、data_parallel_size数据并行组数MoE 层按 TP×PCP×DP 的乘积切分、all2all_backend专家并行通信后端如allgather_reducescatter、deepep_high_throughput、deepep_low_latency等、以及enable_eplb专家负载均衡配置。相关部署模式在 Expert Parallel Deployment 与 Data Parallel Deployment 中有进一步说明。单节点部署TP 与 PP 的最小可用配置vLLM 支持单节点内的分布式张量并行与流水线并行推理和服务。默认分布式运行时为多节点推理使用 Ray单节点推理使用原生 Pythonmultiprocessingmp。可以通过LLM类的distributed_executor_backend参数或 API server 的--distributed-executor-backend覆盖默认值取值为mp或ray。源码中的类型定义印证了这一点vllm/config/parallel.py 定义了DistributedExecutorBackend Literal[ray, mp, uni, external_launcher]且distributed_executor_backend字段注释明确“若 TP×PP 不超过本机 GPU 数将使用mp保持在单主机内处理使用mp还需设置nnodes使用ray需手动指定distributed_executor_backend为ray”vllm/config/parallel.py。离线推理LLM类指定tensor_parallel_size多 GPU 离线推理时把tensor_parallel_size设为期望的 GPU 数。以 4 卡运行facebook/opt-13b为例from vllm import LLM llm LLM(facebook/opt-13b, tensor_parallel_size4) output llm.generate(San Francisco is a)在线服务vllm serve指定并行度多 GPU 服务场景启动 server 时加上--tensor-parallel-sizevllm serve facebook/opt-13b \ --tensor-parallel-size 4启用流水线并行则追加--pipeline-parallel-size。例如下面这条命令在 8 卡上同时启用 TP4、PP2# Eight GPUs total vllm serve gpt2 \ --tensor-parallel-size 4 \ --pipeline-parallel-size 2多节点部署一Ray 集群当单节点 GPU 不足以容纳模型时把 vLLM 部署到多个节点。所有节点必须提供完全一致的执行环境包括模型路径与 Python 包推荐使用容器镜像来保证环境一致、屏蔽宿主机差异。Ray 是一个用于扩展 Python 程序的分布式计算框架多节点 vLLM 部署可将其作为运行时引擎vLLM 借助 Ray 管理跨节点任务的分布式执行、控制执行位置。Ray 还提供面向大规模离线批推理与在线服务的高级 API可以为 vLLM 工作负载附加生产级的容错、扩缩容与分布式可观测性。Ray 是可选依赖使用前需显式安装例如pip install ray[cgraph]使用容器初始化 Ray 集群辅助脚本 examples/ray_serving/run_cluster.sh 负责跨节点启动容器并初始化 Ray。该脚本默认以非管理员权限运行 Docker会导致 profiling/tracing 时无法访问 GPU 性能计数器如需管理员权限向 Docker 命令追加--cap-addCAP_SYS_ADMIN。选择一台机器作为 head 节点执行bash run_cluster.sh \ vllm/vllm-openai \ HEAD_NODE_IP \ --head \ /path/to/the/huggingface/home/in/this/node \ -e VLLM_HOST_IPHEAD_NODE_IP在每个 worker 节点执行bash run_cluster.sh \ vllm/vllm-openai \ HEAD_NODE_IP \ --worker \ /path/to/the/huggingface/home/in/this/node \ -e VLLM_HOST_IPWORKER_NODE_IP几个关键点与脚本源码 examples/ray_serving/run_cluster.sh 的实现一致VLLM_HOST_IP每个 worker 必须唯一保持运行上述命令的 shell 不要关闭——关闭任何一个 shell 都会终止整个集群脚本通过ray start --block常驻并以trap cleanup EXIT在退出时清理容器所有节点之间必须能通过所给 IP 互相通信脚本以--network host启动容器以便节点直接通信。网络安全提示VLLM_HOST_IP应设置为私有网段地址。该网络上的流量未加密节点间交换的数据格式一旦被对手获得网络访问权限可被利用执行任意代码。务必确保不可信方无法触达该网络。验证从任意节点进入容器后执行ray status与ray list nodes确认 Ray 发现了预期数量的节点与 GPU。也可选择使用 KubeRay 搭建 Ray 集群。在 Ray 集群上运行 vLLM若 Ray 运行在容器内后续命令都应在容器内执行而非宿主机上可用docker exec -it container_name /bin/bash进入容器。Ray 集群就绪后vLLM 的使用方式与单节点无异Ray 集群的所有资源对 vLLM 可见因此在单节点上执行一条vllm命令即可。通行做法是 TP 每节点 GPU 数、PP 节点数。例如 2 节点共 16 卡每节点 8 卡vllm serve /path/to/the/model/in/the/container \ --tensor-parallel-size 8 \ --pipeline-parallel-size 2 \ --distributed-executor-backend ray也可以直接把tensor_parallel_size设为集群 GPU 总数vllm serve /path/to/the/model/in/the/container \ --tensor-parallel-size 16 \ --distributed-executor-backend ray多节点部署二Multiprocessing 后端除 Ray 之外多节点 vLLM 部署还可以把multiprocessing作为运行时引擎。以 2 节点每节点 8 卡、tp_size8、pp_size2为例。head 节点执行vllm serve /path/to/the/model/in/the/container \ --tensor-parallel-size 8 --pipeline-parallel-size 2 \ --nnodes 2 --node-rank 0 \ --master-addr HEAD_NODE_IP另一个 worker 节点执行注意多出的--headless参数标识无头 worker 节点vllm serve /path/to/the/model/in/the/container \ --tensor-parallel-size 8 --pipeline-parallel-size 2 \ --nnodes 2 --node-rank 1 \ --master-addr HEAD_NODE_IP --headless这些参数在ParallelConfig中有对应定义vllm/config/parallel.pymaster_addr默认127.0.0.1、master_port默认29501、node_rank默认 0、nnodes默认 1注释均标注“用于distributed_executor_backend为mp时的多节点分布式推理”。命令行参数--nnodes别名-n、--node-rank别名-r、--master-addr由 vllm/engine/arg_utils.py 注册并在引擎参数校验中对nnodes、node_rank与总 world size 的整除关系做了显式检查--nnodes必须整除总 world size、node_rank必须落在[0, nnodes-1]区间内。优化张量并行的网络通信InfiniBand高效的张量并行依赖快速的跨节点通信首选 InfiniBand 等高速网络适配器。搭建 InfiniBand 集群时向 examples/ray_serving/run_cluster.sh 辅助脚本追加类似--privileged -e NCCL_IB_HCAmlx5的参数具体所需 flags 请咨询系统管理员。启用 GPUDirect RDMAGPUDirect RDMARemote Direct Memory Access是 NVIDIA 的技术允许网卡直接访问 GPU 显存绕过 CPU 与系统内存。这种直接访问降低了延迟与 CPU 开销对跨节点 GPU 间的大块数据传输尤其有益。启用时需要配置两项IPC_LOCK安全上下文为容器安全上下文添加IPC_LOCK能力锁定内存页、防止换页到磁盘共享内存/dev/shm在 pod spec 中挂载/dev/shm为进程间通信IPC提供共享内存。Docker 场景的容器配置docker run --gpus all \ --ipchost \ --shm-size16G \ -v /dev/shm:/dev/shm \ vllm/vllm-openaiKubernetes 场景的 pod spec... spec: containers: - name: vllm image: vllm/vllm-openai securityContext: capabilities: add: [IPC_LOCK] volumeMounts: - mountPath: /dev/shm name: dshm resources: limits: nvidia.com/gpu: 8 requests: nvidia.com/gpu: 8 volumes: - name: dshm emptyDir: medium: Memory ...如何确认 GPUDirect RDMA 已生效用详细 NCCL 日志启动 vLLMNCCL_DEBUGTRACE vllm serve ...然后检查 NCCL 版本与所用网络——日志中出现[send] via NET/IB/GDRDMANCCL 正在使用带 GPUDirect RDMA 的 InfiniBand高效日志中出现[send] via NET/SocketNCCL 使用了原始 TCP socket对跨节点张量并行并不高效。预下载 Hugging Face 模型如果使用 Hugging Face 模型建议先下载再启动 vLLM要么在每个节点下载到相同路径要么把模型放在所有节点可访问的分布式文件系统上然后把模型路径而非 repo ID传给 vLLM否则可以通过向run_cluster.sh追加-e HF_TOKENTOKEN的方式提供 Hugging Face 令牌。分布式部署排障遇到分布式部署问题时参见 vLLM 官方的排障指南 docs/serving/distributed_troubleshooting.md其中涵盖了连接、环境一致性与通信类问题的排查路径。小结一张对照表场景推荐并行策略关键参数/命令模型放入单卡无需并行默认单进程单节点多卡张量并行--tensor-parallel-size 本机GPU数单节点但 GPU 不能整切 / 无 NVLINK流水线并行--tensor-parallel-size 1 --pipeline-parallel-size GPU数多节点TP PPRay 或 mpTP每节点GPU数PP节点数加--distributed-executor-backend ray或--nnodes/--node-rank/--master-addrMoE 模型DP attention EP/TP MoEenable_expert_parallel、all2all_backend详见 docs/serving/expert_parallel_deployment.md跨节点通信InfiniBand GPUDirect RDMANCCL_IB_HCA、IPC_LOCK、/dev/shm用NCCL_DEBUGTRACE验证【免费下载链接】vllmA high-throughput and memory-efficient inference and serving engine for LLMs项目地址: https://gitcode.com/GitHub_Trending/vl/vllm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价