vLLM是一个专为大规模语言模型设计的高性能推理库,由加州大学伯克利分校的研究团队开发。它通过PagedAttention、连续批处理和优化的CUDA内核等技术,显著提升了大语言模型的推理性能和内存运用效率,特别适合生产环境中的模型服务部署。
vLLM支持多种部署方式,包括单机部署、多卡分布式部署和集群部署。本教程将重点介绍单机多卡部署的完整流程,从环境准备到服务提供的每个步骤。
相比较于我们在之前章节提到的Ollama,vLLM支持部署safetensors格式的全量模型,因而学习 vLLM 相关知识有充分的必要性。
前置教程
如想快速开始本vLLM教程,你可能需要先完成以下前置教程:
- Windows环境下安装WSL2、Ubuntu及Conda教程,由于vLLM不支持在原生Windows环境下运行,本节内容将在WSL2环境下安装vLLM。
- Python环境管理详解与UV的安装与使用教程,为了避免Pytorch版本不匹配导致安装失败,本节内容使用
uv + pip安装Pytorch。
资源下载
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无法正确加载模型。

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导入:

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

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

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/float16、bfloat16 |
half/float16 可减少显存占用,auto 自动选择最佳精度 |
--quantization |
启用模型量化,减少显存占用 | awq、gptq、fp8、int8 |
awq 和 gptq 用于权重量化,fp8 和 int8 用于 8 位量化 |
--kv-cache-dtype |
设置 KV 缓存的数据类型 | auto(默认)、fp8、fp16 |
使用 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 |
控制日志详细程度 | DEBUG、INFO、WARNING、ERROR |
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 8192Prompt + 生成回复总 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 fp8 需 vLLM >= 0.6.0 且 GPU 支持 FP8(如 H100、L40S) |
通过合理组合这些参数,可以显著优化大语言模型的推理效率、内存占用和服务稳定性。
5. 总结
本教程详细介绍了vLLM的安装、配置、部署和使用的完整流程。vLLM作为目前最流行的大语言模型推理引擎之一,为AI应用的开发和部署提供了强大的技术支持。掌握vLLM的使用将大大提升你在大模型应用开发中的效率。
举手提问