多卡并行推理实战,vLLM 张量并行配置与性能测试
多卡互联与拓扑检查
手里握着多张 AMD Instinct GPU,想要跑通超大参数模型的推理,最大的挑战往往不在模型本身,而在于如何让这几张卡“像一张卡”那样高效协作。vLLM 的张量并行(Tensor Parallelism, TP)功能正是为此而生,它能把模型权重切分 across 多卡,让显存瓶颈不再是拦路虎。但在敲下启动命令之前,有一步至关重要却常被忽略的检查:PCIe 拓扑结构。
如果 GPU 之间通信走的是低速 PCIe 通道而非高速互联(如 Infinity Fabric),张量并行带来的通信开销会瞬间吞噬掉算力优势,导致吞吐量不升反降。在 Linux 环境下,我们可以使用 rocm-smi --showtopo 或 lspci -t 来查看显卡间的连接关系。理想状态下,参与并行的 GPU 应当位于同一个 PCIe Root Complex 下,或者直接通过 NVLink/Infinity Fabric 互联。如果发现显卡分散在不同的 CPU 插槽对应的 PCIe 总线上,跨 Socket 的通信延迟可能会成为性能短板。对于生产环境,尽量将需要并行的卡插在物理距离最近、拓扑层级最高的插槽中,这是降低通信延迟的物理基础。
张量并行配置与进程绑核
确认硬件拓扑无误后,就可以进入核心的配置环节。vLLM 启动时,通过 --tensor-parallel-size 参数指定参与计算的 GPU 数量。例如,你有 4 张卡,想全部利用起来,就设置 --tensor-parallel-size 4。这个参数告诉 vLLM 将模型层内的矩阵运算切分到 4 个设备上并行计算,最后再汇总结果。
python -m vllm.entrypoints.api_server \
--model meta-llama/Meta-Llama-3-70B-Instruct \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.92 \
--port 8000 \
--host 0.0.0.0
然而,仅仅设置 TP 参数还不够。在多卡高负载运行时,操作系统默认的进程调度可能会导致多个 GPU 的推理进程争抢同一个 CPU 核心,引发上下文切换抖动,进而增加推理延迟。这时候就需要 numactl 工具出场了,它能帮助我们将进程“绑定”到特定的 NUMA 节点和 CPU 核心上。
假设你的 4 张卡分别隶属于两个 NUMA 节点(每两个卡一个节点),你可以手动启动多个 worker 进程并分别绑定。虽然 vLLM 自动模式通常能处理大部分情况,但在极致性能调优场景下,显式绑定更稳妥。例如,将前两张卡的进程绑定到 Node 0 的核心:
numactl --cpunodebind=0 --membind=0 python -m vllm.entrypoints.api_server ... --device 0,1
这种“亲缘性”设置确保了 GPU 访问本地内存的速度最快,且避免了 CPU 缓存行的无效刷新。在实际操作中,可以通过 taskset -cp <pid> 实时观察进程是否运行在预期的核心上。
高并发压力测试与拐点分析
服务启动成功只是第一步,真正的考验在于高并发下的表现。大模型推理服务上线前,必须通过压力测试找到系统的“甜蜜点”。vLLM 自带的 benchmark_serving.py 脚本是绝佳的工具,它可以模拟真实用户的请求流量。
我们需要关注两个核心指标:RPS(每秒请求数)和 TTFT(首字延迟)。随着并发数(Concurrency)的增加,RPS 通常会先线性上升,然后趋于平缓甚至下降;而 TTFT 则会随着队列堆积逐渐升高。我们的目标是找到 RPS 达到峰值且 TTFT 仍在可接受范围内的那个临界点。
执行测试命令示例:
python benchmarks/benchmark_serving.py \
--backend vllm \
--dataset-name sharegpt \
--request-rate 10 \
--num-prompts 200 \
--concurrency 50
建议采用阶梯式测试法:从并发数 10 开始,逐步增加到 20、50、100,记录每一轮的 RPS 和平均 TTFT。绘制出曲线图后,你通常会发现一个明显的“拐点”。在拐点之前,系统资源利用率尚未饱和,增加并发能显著提升吞吐;一旦越过拐点,GPU 显存带宽或计算单元成为瓶颈,排队等待时间剧增,导致 TTFT 飙升,而 RPS 增长停滞。
这个拐点数据就是制定限流策略的依据。例如,如果测试显示并发超过 60 后 TTFT 突破 2 秒,那么在生产环境的网关层,就可以将最大并发连接数限制在 50 左右,预留一定的缓冲空间应对流量波动。通过这种基于数据的调优,我们不仅能榨干 Instinct GPU 的性能,还能保证服务在高负载下的响应稳定性,避免因为盲目追求高并发而导致用户体验崩塌。
200小时GPU算力已就位,快来领取:https://marketing.csdn.net/questions/Q2604140858304426315?utm_source=AIpaper
更多推荐


所有评论(0)