【免费下载链接】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 )
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 22GB | TP=2 | NVLink(NV2) | 220.84 tok/s(NVFP4) |
| 4x Tesla T10 16GB | TP=4 | PCIe 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),按优先级依次尝试多个后端,哪个条件满足走哪个:
| 优先级 | 后端 | 实现文件 | 说明 |
|---|---|---|---|
| 1 | NCCL Symmetric Memory | pynccl.py | 满足对称内存条件时的高通量路径 |
| 2 | QuickAllReduce | quick_all_reduce.py | 量化加速(INT8/INT4 等),当前面向 ROCm MI300 |
| 3 | FlashInfer PCIe IPC All-Reduce | flashinfer_pcie_ipc_all_reduce.py | 专为纯 PCIe 单机的小规模 TP设计,支持 world size 2/4/8 |
| 4 | FlashInfer All-Reduce | flashinfer_all_reduce.py | 通用 FlashInfer 路径 |
| 5 | Custom All-Reduce | custom_all_reduce.py | 基于 CUDA IPC 共享内存的低延迟实现,初始化前会做 P2P 可达性检查(_can_p2p) |
| 6 | PyNccl | pynccl.py | NCCL 兜底 |
| 7 | torch.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.shlauncher 会依次完成:选择 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 )
相关推荐
vLLM-Omni分布式推理指南:TP/PP/DP并行策略详解
vLLM Omni分布式推理指南:TP/PP/DP并行策略详解 vLLM Omni是一个专为全模态模型设计的高效推理框架,支持文本、图像、音频和视频等多种模态的
人工智能大模型模型推理服务多模态语音音频媒体生成本地部署TensorRT-LLM 多 GPU 与多节点推理部署完全指南:TP/PP/EP 并行策略实战
TensorRT LLM 多 GPU 与多节点推理部署完全指南:TP/PP/EP 并行策略实战 导读 本文以 AI Research SKILLs 仓库中 Te
AI 技能人工智能大模型深度学习GLM-4.5 vLLM部署:多GPU并行推理
GLM 4.5 vLLM部署:多GPU并行推理 概述 GLM 4.5作为智谱AI推出的3550亿参数大语言模型,在智能体应用场景中展现出卓越性能。然而,如此庞大
基础模型大模型人工智能
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考