2、vLLM基础:vLLM架构、推理引擎、多卡部署模式

2.1 核心原理:vLLM的架构与PagedAttention

vLLM 之所以能在多卡环境下实现高吞吐推理,其底层核心是 PagedAttention 机制。传统推理框架在管理 KV Cache(键值缓存)时,需要为每个请求预先分配连续显存,这会导致严重的内部碎片和预留浪费。vLLM 将 KV Cache 划分为固定大小的“块”(Block),通过块表(Block Table)动态映射到物理显存,类似操作系统中的虚拟内存分页。这一设计使得显存利用率接近 100%,并允许请求之间共享 KV Cache(如并行采样时),从而大幅提升批处理规模。

从整体架构看,vLLM 分为三层:前端调度层(负责请求排队、连续批处理)、执行引擎层(负责模型加载、算子执行、KV Cache 管理)和后端硬件层(GPU/NPU 资源抽象)。在多卡场景下,vLLM 通过 Ray 或自定义分布式运行时将模型切分到多张卡上,并协调各卡上的注意力计算与 KV Cache 同步。

关键点:vLLM 的连续批处理(Continuous Batching)机制允许新请求动态插入当前迭代,而不是等待整个批次结束。这要求调度器实时感知每张卡的显存余量,因此多卡部署时,显存监控与块分配策略直接决定吞吐上限。
前端调度层 (Scheduler) 请求队列 连续批处理决策 显存块分配策略 优先级/抢占管理 执行引擎层 (Executor) 模型并行组 TP=2, PP=2 配置 PagedAttention 算子 块表查找 + 分块计算 KV Cache 管理器 物理块分配 / 释放 / 共享 后端硬件层 (Hardware) GPU 0 (Layer 0-3) GPU 1 (Layer 4-7) GPU 2 (Layer 8-11) GPU 3 (Layer 12-15) NCCL / NVLink 通信

2.2 方法流程:多卡部署的三种模式

vLLM 多卡部署并非简单地将模型复制到多张卡,而是根据模型规模和显存需求选择不同的并行策略。实际生产环境中最常用的是以下三种模式:

部署模式 适用场景 显存要求 通信开销 典型配置
张量并行 (TP) 单模型超大,单卡放不下 每卡存放部分权重 高(每层需 AllReduce) TP=4, 8
流水线并行 (PP) 层数极深,跨节点部署 每卡存放连续若干层 中(仅层间传输激活值) PP=2, 4
数据并行 (DP) 高并发,多副本推理 每卡完整模型副本 低(仅梯度同步) DP=4, 8

实际部署时,vLLM 支持 TP + PP + DP 混合并行。例如 8 卡 A100 环境,可以配置 TP=4、PP=2,即先对模型做 4 路张量切分,再按层切分为 2 段流水线,最终形成 2 组数据并行副本。这种组合能兼顾单卡显存容量与整体吞吐。

2.3 案例/场景:8卡环境下的部署配置

假设我们有一个 70B 参数的 LLM,单张 A100 (80GB) 无法容纳完整权重和 KV Cache。以下是一个典型的 vLLM 多卡启动命令:

# 使用 Ray 启动多卡集群
ray start --head --num-gpus 8

# 启动 vLLM 服务,TP=4, PP=2
python -m vllm.entrypoints.openai.api_server \
    --model /data/models/llama-70b \
    --tensor-parallel-size 4 \
    --pipeline-parallel-size 2 \
    --gpu-memory-utilization 0.92 \
    --max-num-seqs 64 \
    --port 8000

在这个配置下,模型权重被切分为 4 份分布在 4 张卡上(TP),同时模型层被分为 2 段(PP),另外 4 张卡作为另一组数据并行副本。调度器会动态将请求分配到负载较低的副本上。

调优提示:当 TP 规模增大时,AllReduce 通信量呈平方级增长。在 8 卡节点内建议优先使用 TP=8(NVLink 全互联),跨节点时再考虑 PP 或 DP 以减少网络通信。

2.4 误区/复盘:多卡部署的常见陷阱

误区一:TP 越大越好。 实际上,当 TP 超过节点内 GPU 数量时,通信会走 PCIe 或 InfiniBand,延迟急剧上升。例如 2 节点 16 卡环境,TP=16 的性能往往不如 TP=8 + DP=2。

误区二:忽略 KV Cache 的显存预留。 即使模型权重能放下,如果 KV Cache 预留不足,vLLM 会频繁触发块驱逐(Eviction),导致请求排队时间暴涨。建议通过 --gpu-memory-utilization 参数预留 8%~15% 显存给 KV Cache 动态扩展。

误区三:所有层均匀切分。 在 PP 模式下,不同层的激活值显存占用不同(如 Attention 层比 MLP 层占用更多)。vLLM 支持不均匀层分配,但默认配置是均匀切分。若发现某张卡显存溢出而其他卡空闲,应手动调整 --pp-layer-partition 参数。

复盘案例:某团队在 4 卡 A100 上部署 13B 模型,使用 TP=4 后吞吐反而低于单卡。排查发现:模型较小,TP=4 的通信开销超过了并行收益。最终改为 DP=4(每卡独立推理),吞吐提升 3.2 倍。这说明并行策略必须结合模型规模和硬件拓扑综合判断。