vLLM是一个专为大规模语言模型设计的高性能推理库,由加州大学伯克利分校的研究团队开发。它通过PagedAttention、连续批处理和优化的CUDA内核等技术,显著提升了大语言模型的推理性能和内存运用效率,特别适合生产环境中的模型服务部署。

vLLM支持多种部署方式,包括单机部署、多卡分布式部署和集群部署。本教程将重点介绍单机多卡部署的完整流程,从环境准备到服务提供的每个步骤。

相比较于我们在之前章节提到的Ollama,vLLM支持部署safetensors格式的全量模型,因而学习 vLLM 相关知识有充分的必要性。

前置教程

如想快速开始本vLLM教程,你可能需要先完成以下前置教程:

资源下载

1. 环境准备与安装

1.1 创建虚拟环境

使用Conda创建独立的Python环境:

# 创建名为vllm的虚拟环境,Python版本3.10
conda create -n vllm python=3.10

# 激活虚拟环境
conda activate vllm

1.2 安装vLLM

vLLM支持多种安装方式,这里推荐使用uv + pip安装,uv可以检查已安装的CUDA驱动版本,从而在运行时自动选择合适的 PyTorch index,避免因CUDA与PyTorch版本不匹配导致安装失败。

拓展阅读:Pytorch安装与版本选择问题详解

# 安装uv
pip install uv

# 使用uv安装vLLM
uv pip install vllm --torch-backend=auto

2. 模型下载

你可以从网盘中下载Qwen3-0.6B模型文件或通过Git克隆模型仓库下载:

# 创建模型目录
mkdir -p /mnt/c/models
cd /mnt/c/models

# git lfs 初始化
git lfs install

# 下载Qwen3-0.6B模型 网盘中提供了相应的模型文件,此步可跳过
git clone https://www.modelscope.cn/Qwen/Qwen3-0.6B.git

注意:最终的模型目录一定是位于C盘根目录下的models目录下的Qwen3-0.6B目录,打开后可以看到具体的模型文件,否则vLLM无法正确加载模型。

模型文件目录结构,显示Qwen3-0.6B模型文件列表

3. 启动vLLM服务

3.1 单卡部署

由于在WSL2环境下运行vLLM不支持CUDA 的统一虚拟寻址(UVA)功能,因此需要设置环境变量以避免使用UVA:

export VLLM_WSL2_ENABLE_PIN_MEMORY=1

你也可以将该临时变量持久化:

# 将临时变量添加到系统环境变量中
echo 'export VLLM_WSL2_ENABLE_PIN_MEMORY=1' >> ~/.bashrc
source ~/.bashrc

注意:在生产环境中要根据实际情况判定是否需要进行该项设置

然后启动vLLM服务:

vllm serve /mnt/c/models/Qwen3-0.6B \
  --port 8000 \
  --host 0.0.0.0 \
  --dtype half \
  --gpu-memory-utilization 0.5 \
  --max-model-len 8192

参数说明

  • --host 0.0.0.0:允许外部访问
  • --dtype half:使用半精度浮点数,减少显存占用
  • --gpu-memory-utilization 0.5:使用GPU的50%显存
  • --port 8000:服务端口
  • --max-model-len 8192:限制单次输入的最大token数量,防止内存溢出

3.2 功能验证

启动成功验证

加载过程大约需要2-3分钟,终端中最终显示以下内容,表示vLLM服务已经成功启动:

(APIServer pid=6120) INFO:     Started server process [6120]
(APIServer pid=6120) INFO:     Waiting for application startup.
(APIServer pid=6120) INFO:     Application startup complete.

接口通过验证

下载安装接口测试工具Apipost

安装完成后,添加一个测试接口,通过cURL导入:

Apipost导入cURL请求的对话框界面

在对话框中粘贴以下内容:

在Apipost中粘贴cURL请求内容后的界面

点击发送按钮,等待接口返回结果,如返回以下类似内容表示接口调用成功:

Apipost发送vLLM API请求后返回的成功响应结果

3.3 多卡分布式部署

对于较大的模型,由于单卡显存空间不足,则需要多卡部署,vLLM支持多种多GPU并行推理,这里以张量并行计算为例:

vllm serve /mnt/c/models/Qwen3-0.6B \
  --port 9000 \
  --host 0.0.0.0 \
  --dtype=half \
  --gpu-memory-utilization 0.85 \
  --max-model-len 6000 \
  --tensor-parallel-size 2

--tensor-parallel-size 2 表示使用 2 块 GPU 来共同运行同一个模型。这是一种叫“张量并行”(Tensor Parallelism,简称 TP)的分布式推理。

4. 详细参数说明

4.1 并行计算参数

参数 并行模式 适用场景
--tensor-parallel-size 张量并行 (TP) 模型参数刚好超过单卡显存,或追求极致的低推理延迟。需要 GPU 间有高速互联(如 NVLink)。
--pipeline-parallel-size 流水线并行 (PP) 模型极大,远超单卡显存,如千亿、万亿参数模型,或跨多节点部署时。通信开销比 TP 小。
--data-parallel-size 数据并行 (DP) 处理高并发请求,提升整体吞吐量。每张卡独立处理请求,非常适合稠密模型和 MoE 模型。
--expert-parallel-size 专家并行 (EP) 部署 MoE 模型(如 DeepSeek 系列)时,可有效利用专家网络稀疏性的特点,提升效率和吞吐量。
--decode-context-parallel-size 上下文并行 (CP) 专门优化长序列推理,能显著降低长文本的首 token 延迟(TTFT)和显存占用。

4.2 内存优化参数

参数 作用 建议值/示例 适用场景
--gpu-memory-utilization 限制 GPU 显存使用比例,主要用于预先分配 KV Cache 空间 0.9 表示最多占用 90% 显存 模型接近显存上限,或需预留空间处理并发请求
--cpu-offload-gb 当 GPU 显存不足时,将部分模型权重或 KV Cache 卸载到 CPU 内存(受编译选项限制) 10 表示卸载 10GB 数据到 CPU 内存 GPU 显存不足但 CPU 内存充足,且可接受性能下降
--swap-space 设置 CPU 内存中用于 KV Cache 交换的缓冲区大小(单位 GB) 通常为 4,用于突发并发场景 GPU 显存不足时,将不活跃请求的 KV Cache 临时交换到 CPU 内存
--sharding (针对 LoRA) 将不同 LoRA 适配器的权重分散存储到多 GPU 启用即可 需同时加载大量 LoRA 适配器时,减少单卡 LoRA 存储压力

4.3 计算精度与加速参数

参数 作用 可选值 说明
--dtype 设置模型推理的数据类型 auto(默认)、half/float16bfloat16 half/float16 可减少显存占用,auto 自动选择最佳精度
--quantization 启用模型量化,减少显存占用 awqgptqfp8int8 awqgptq 用于权重量化,fp8int8 用于 8 位量化
--kv-cache-dtype 设置 KV 缓存的数据类型 auto(默认)、fp8fp16 使用 fp8 可显著减少 KV 缓存显存占用,需 vLLM >= 0.6.0 且 GPU 支持 FP8 计算

4.4 模型与推理控制参数

参数 准确作用 建议值/示例 准确权衡说明
--max-model-len 限制 Prompt + 生成回复 的总 Token 数量上限 根据显存调整 决定 KV Cache 占用。设得越大,能并发处理的序列数(--max-num-seqs)就越少。长文本场景必须设大,但会牺牲并发吞吐量。
--max-num-seqs 限制同时正在处理的请求队列数量(并发数) - 7B 模型:256-512
- 70B 模型:16-32
- 视具体硬件显存而定
增大可提高 GPU 利用率(吞吐量),但每个并发序列都会消耗额外 KV Cache 显存。设太大会直接导致 OOM(显存溢出)。
--max-batch-delay 批处理最大等待时间(毫秒),用于积攒足够请求后统一推理 - 延迟敏感:设 10ms
- 吞吐优先:设 100-500ms
值越小,延迟越低,但 GPU 利用率越低(小 batch);值越大,batch 越大(吞吐越高),但首 Token 延迟会明显增加。仅在请求稀疏时生效。该参数仅在异步调度模式(默认开启)下生效,若启用 --disable-async-output-proc 则失效。

三个参数必须联动调整:若调高 --max-model-len,需 成比例降低 --max-num-seqs,否则推理引擎(如 vLLM)启动时会因 KV Cache 分配失败而报错。

4.5 服务与日志配置参数

参数 作用 可选值/示例 说明
--log-level 控制日志详细程度 DEBUGINFOWARNINGERROR DEBUG 最详细,ERROR 仅显示错误
--disable-log-stats 禁用统计信息日志输出(如吞吐量、延迟等) 启用即可 减少日志输出量,略微提升高并发下的性能
--max-num-seqs 控制服务端最大并发处理请求数(单个批次内同时处理的序列数) - 7B 模型:256-512
- 70B 模型:16-32
- 视具体硬件显存而定
这是 vLLM 服务端控制并发能力的核心参数。增大可提高吞吐量,但每个并发序列都会消耗 KV Cache 显存。设太大会直接导致 OOM(显存溢出)。

4.6 参数优化建议

场景 推荐调整的参数 配置示例与说明
GPU显存不足 --max-model-len--max-num-seqs--gpu-memory-utilization 1) 先降低 --max-model-len(如 8192 → 4096)
2) 再降低 --max-num-seqs(如 256 → 64)
3) 最后调整 --gpu-memory-utilization 0.85
注意:--cpu-offload-gb 会严重影响速度,谨慎使用
多GPU加速 --tensor-parallel-size N --tensor-parallel-size 2
需确保 N ≤ 可用 GPU 数量,且模型注意力头数能被 N 整除
超长文本生成 --max-model-len --max-model-len 8192
Prompt + 生成回复总 Token 数,需根据实际数据长度和显存共同决定
低延迟需求 --max-batch-delay--max-num-seqs --max-batch-delay 50 --max-num-seqs 128
小 batch + 短等待时间,牺牲吞吐换取响应速度
高吞吐需求 --max-num-seqs--max-batch-delay --max-num-seqs 512 --max-batch-delay 200
大 batch + 长等待时间,牺牲首 Token 延迟换取整体吞吐
量化加速 --quantization --quantization awq
注意:--kv-cache-dtype fp8vLLM >= 0.6.0GPU 支持 FP8(如 H100、L40S)

通过合理组合这些参数,可以显著优化大语言模型的推理效率、内存占用和服务稳定性。

5. 总结

本教程详细介绍了vLLM的安装、配置、部署和使用的完整流程。vLLM作为目前最流行的大语言模型推理引擎之一,为AI应用的开发和部署提供了强大的技术支持。掌握vLLM的使用将大大提升你在大模型应用开发中的效率。