☰
多卡怎么分工:vLLM-2080Ti-Definitive的TP/PP并行部署与PCIe All-Reduce全解
2026/10/15 16:06:14 网站建设 项目流程

【免费下载链接】vLLM-2080Ti-Definitive

The definitive vLLM runtime for dual RTX 2080 Ti 22GB + NVLink, delivering Qwen 27B local inference with maximum 200+ tok/s single-request decode with support of FP8 weight ( Join Discord :https://discord.gg/VFqVVySdMS )

项目地址:https://gitcode.com/gh_mirrors/vl/vLLM-2080Ti-Definitive
点击查看免费下载

vLLM-2080Ti-Definitive 是一个面向双 RTX 2080 Ti 22GB + NVLink 及 Tesla T10 多卡环境的 vLLM 推理运行时,可将 Qwen 27B 级别的模型跑在本地消费级硬件上,单请求解码稳定在 200+ tok/s。这篇文章带你搞懂它的多卡分工机制:TP(Tensor Parallel 张量并行)、PP(Pipeline Parallel 流水线并行)如何组合部署,以及在没有 NVLink 的纯 PCIe 机器上,All-Reduce 通信是怎么被加速的。

一、为什么需要多卡:显存是第一道门槛

以 Qwen3.8-27B 为例,FP8 权重加 262K 上下文的 KV Cache,单张 22GB 显卡根本装不下。多卡方案的核心问题只有一个:每张卡负责什么、卡之间传什么。

vLLM 里有两个经典的分工维度:

方式分工逻辑通信开销适用场景
TP 张量并行每张卡持有每一层的部分权重,前向计算后每层都要做一次 All-Reduce 同步高(每层都通信)卡间带宽高(NVLink / PCIe P2P 好)
PP 流水线并行每张卡持有一部分层(一个 stage),数据像流水线一样逐级传递低(只在 stage 边界传激活值)卡间带宽有限、跨 NUMA 节点

两者可以混合:比如 4 卡机器上TP=2 x PP=2。本项目的启动器 launcher.sh 同时支持 TP、PP 与混合 TP/PP 三种拓扑,并内置了对验证过的拓扑推荐。

二、一键配置:Launcher 如何决定多卡分工

项目用交互式launcher.sh管理服务。进入主菜单后,第 3 项就是GPU/TP/PP配置,底部还会实时显示Parallel layout: TP2 x PP1这样的并行布局摘要:

选择GPU/TP/PP后,launcher 会读取nvidia-smi的拓扑矩阵,调用 tools/recommend_gpu_topology.py 按链路质量打分(NVLink 记 50+ 分,PCIe 的 PIX/PXB/PHB/NODE/SYS 分别记 40/30/20/10/0 分,P2P 直通再加 100 分),为每个 TP rank 组挑选带宽最优的 GPU 组合。

几个关键校验规则(见 launcher.sh):

  • TP_SIZE与PP_SIZE必须都是正整数;
  • 选中的 GPU 数量必须等于 TP_SIZE × PP_SIZE,否则直接报错。

自动化部署时可以用非交互模式(完整说明见 docs/non-interactive-launch.zh-CN.md):

./launcher.sh \ --model-dir /mnt/models/Qwen3.8-27B-FP8 \ --profile 2x2080Ti/qwen27b/w8a16/mtp4-fp8kv-1x262K-text-only.env \ --gpu-devices 1,5 \ --tp-size 2 \ --pp-size 1 \ --print-config

先加--print-config预览最终生效的路线参数,确认无误后去掉即可启动。已验证的拓扑布局如下:

硬件并行布局卡间互联参考性能(4K/128 解码)
2x RTX 2080 Ti 22GBTP=2NVLink(NV2)220.84 tok/s(NVFP4)
4x Tesla T10 16GBTP=4PCIe PIX(同 NUMA)191.89 tok/s(FP8)

详细数据可查 profiles/2x2080Ti/README.zh-CN.md 与 profiles/4xT10/README.zh-CN.md。

三、TP=2 到底在每张卡上做了什么

在TP=2下,Qwen 27B 的每个 Transformer 层被切成两半:两张 2080 Ti 各算一半的注意力头和 MLP,然后每层结束时必须做一次 All-Reduce,把两个分片的输出加起来得到完整结果。也就是说,TP=2 跑一层要通信一次,跑 48+ 层就要通信几十次——通信延迟直接决定解码速度。

这正是 2080 Ti 平台的难点:

  • 双 2080 Ti + NVLink:NVLink 带宽高,All-Reduce 开销小,是项目的"黄金拓扑"。
  • 纯 PCIe 机器(如 Tesla T10):没有 NVLink,All-Reduce 只能走 PCIe。标准 NCCL 在小张量(hidden state 通常只有几 MB 甚至更小)上延迟偏高,直接拖慢 decode。

4xT10 之所以选TP=4 而不是 TP=2 x PP=2,就是因为四张卡恰好位于同一 NUMA 节点、卡间为 PCIe PIX 直连,PCIe All-Reduce 的带宽足够撑住 TP=4 的每层通信。

四、PCIe All-Reduce 全解:多级后端自动择优

vLLM 没有只押注 NCCL 一条路。核心调度逻辑在 vllm/distributed/device_communicators/cuda_communicator.py 的CudaCommunicator.all_reduce中(约 L327-L405),按优先级依次尝试多个后端,哪个条件满足走哪个:

优先级后端实现文件说明
1NCCL Symmetric Memorypynccl.py满足对称内存条件时的高通量路径
2QuickAllReducequick_all_reduce.py量化加速(INT8/INT4 等),当前面向 ROCm MI300
3FlashInfer PCIe IPC All-Reduceflashinfer_pcie_ipc_all_reduce.py专为纯 PCIe 单机的小规模 TP设计,支持 world size 2/4/8
4FlashInfer All-Reduceflashinfer_all_reduce.py通用 FlashInfer 路径
5Custom All-Reducecustom_all_reduce.py基于 CUDA IPC 共享内存的低延迟实现,初始化前会做 P2P 可达性检查(_can_p2p)
6PyNcclpynccl.pyNCCL 兜底
7torch.distributed—最终兜底

对 PCIe 平台最重要的是第 3、5 项:

  • FlashInfer PCIe IPC All-Reduce(flashinfer_pcie_ipc_all_reduce.py)通过环境开关VLLM_ALLREDUCE_USE_FLASHINFER_PCIE_IPC显式启用,要求所有 TP rank 在同一台机器内,并为 CUDA Graph 捕获时的具体 batch 尺寸做调优,把小张量 All-Reduce 的往返延迟压到最低。
  • Custom All-Reduce则通过 CUDA IPC 在卡间直接映射显存缓冲,跳过 NCCL 的控制开销;初始化时gpu_p2p_access_check会验证 P2P 能力,若平台不支持可设VLLM_SKIP_P2P_CHECK信任驱动报告。

进程组与 rank 划分的底层逻辑在 vllm/distributed/parallel_state.py:vLLM 会创建tp、pp等独立进程组,custom all-reduce 等快速后端只允许挂在tp组上,PP 组走常规 NCCL 通信——分工清晰,互不干扰。

五、分工进阶:Prefill 与 Decode 也可以拆开

除了 TP/PP 的空间维度分工,vLLM 还支持把计算阶段拆开:Prefill(处理长提示词,算力密集)和 Decode(逐 token 生成,带宽密集)由不同角色承担,Prefill 算完把 KV Cache 交给 Decode 端复用,跳过重复计算:

这套机制的连接器实现位于 vllm/distributed/kv_transfer/,是多卡集群部署时的进阶玩法。本项目日常单机场景默认不启用,但了解它有助于理解"分工"的完整图景。

六、上手步骤:从零启动一个 TP=2 服务

# 1. 获取代码 git clone https://gitcode.com/gh_mirrors/vl/vLLM-2080Ti-Definitive cd vLLM-2080Ti-Definitive # 2. 构建(需要 CUDA 13.0 / PyTorch 2.13 环境) ./build.sh # 3. 以 TP=2 启动 Qwen3.8-27B FP8 服务 MODEL_DIR=/path/to/Qwen3.8-27B-FP8 \ PROFILE=2x2080Ti/qwen27b/w8a16/mtp4-fp8kv-1x262K-text-only.env \ MODE=fast GPU_DEVICES=1,5 TP_SIZE=2 \ NON_INTERACTIVE=1 ./launcher.sh

launcher 会依次完成:选择 GPU 与 TP/PP 拓扑 → 应用 profile 路线参数 → 启动服务 → 健康检查与冒烟测试。若启动失败,先用./launcher.sh --print-config核对配置,再对照 profiles/README.zh-CN.md 检查 profile 字段(GPU_UTIL、KV_CACHE_DTYPE、MAX_MODEL_LEN等)是否与你的硬件匹配。

七、验证通信效率:用 Profile 看清时间花在哪

部署完成后,建议用 Nsight Systems 抓一次 kernel 统计,确认通信没有被计算掩盖或反过来拖累计算。仓库内置的 profiler 工具链在 tools/profiler/,可将 nsys 结果导出为 CSV 查看各 kernel 的总耗时:

重点关注all_reduce类 kernel 的耗时占比:在 NVLink 拓扑上它应占很小比例;若在 PCIe 机器上占比异常升高,优先确认是否启用了上面第四节中的 PCIe IPC / Custom All-Reduce 快速路径。

总结

  • TP 切层、PP 切段:TP=2 让双 2080 Ti 各算半个模型、每层 All-Reduce 同步;PP 则把层切成 stage 逐级传递,通信更省但需要更多卡。
  • launcher 统一管理拓扑:TP_SIZE×PP_SIZE必须等于 GPU 数,recommend_gpu_topology.py按 NVLink/PCIe 链路质量自动挑选最优 rank 组合。
  • PCIe 平台的胜负手在 All-Reduce:多级后端(Symm Mem → Quick → FlashInfer PCIe IPC → Custom → NCCL)按条件自动择优,让纯 PCIe 的 4xT10 也能跑到 190+ tok/s。
  • 先--print-config再启动,用 profile 数据验证:这是复现 200+ tok/s 的两把钥匙。

掌握这套分工方法后,无论手头是 NVLink 双卡还是 PCIe 四卡,都能找到带宽与延迟都最优的并行布局。

【免费下载链接】vLLM-2080Ti-Definitive

The definitive vLLM runtime for dual RTX 2080 Ti 22GB + NVLink, delivering Qwen 27B local inference with maximum 200+ tok/s single-request decode with support of FP8 weight ( Join Discord :https://discord.gg/VFqVVySdMS )

项目地址:https://gitcode.com/gh_mirrors/vl/vLLM-2080Ti-Definitive
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询