强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

vLLM 高性能推理部署指南 / 02 - 安装与环境配置

02 - 安装与环境配置

从零搭建 vLLM 运行环境,涵盖多种安装方式和常见问题处理。


2.1 系统要求总览

在安装 vLLM 之前,请确认满足以下硬件和软件要求:

2.1.1 硬件要求

组件最低要求推荐配置
GPUNVIDIA GPU(Compute Capability ≥ 7.0)A100 80GB / H100 / H200
GPU 显存8 GB(小模型)24 GB+(7B 模型)/ 80 GB+(70B 模型)
系统内存16 GB64 GB+
磁盘50 GB 可用空间SSD,200 GB+(存放模型)
网络无特殊要求高带宽(下载模型、分布式推理)

2.1.2 支持的 GPU 型号

GPU 型号Compute CapabilityFP16BF16FP8INT8推荐场景
RTX 30908.6开发测试
RTX 40908.9中等规模
A100 40GB8.0生产环境
A100 80GB8.0生产首选
H1009.0高性能生产
H2009.0最大模型
L40S8.9性价比之选
A108.6入门生产

注意:FP8 量化仅在 H100/H200/L40S 等 Hopper 架构 GPU 上可用。

2.1.3 软件要求

软件版本要求说明
操作系统Ubuntu 20.04+ / CentOS 8+推荐 Ubuntu 22.04
Python3.9 - 3.12推荐 3.10 或 3.11
CUDA11.8+ / 12.1+推荐 CUDA 12.4
NVIDIA 驱动525.60+需匹配 CUDA 版本
pip23.0+用于包管理
Git2.0+源码安装时需要

2.2 环境检查

2.2.1 检查 NVIDIA 驱动和 GPU

# 检查 NVIDIA 驱动版本
nvidia-smi

# 预期输出示例:
# +-----------------------------------------------------------------------------+
# | NVIDIA-SMI 535.129.03   Driver Version: 535.129.03   CUDA Version: 12.2     |
# |-------------------------------+----------------------+----------------------+
# | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
# | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
# |===============================+======================+======================|
# |   0  NVIDIA A100 80GB...  Off  | 00000000:00:04.0 Off |                    0 |
# | N/A   35C    P0    62W / 300W |      0MiB / 81920MiB |      0%      Default |
# +-------------------------------+----------------------+----------------------+
# 查看 GPU 详细信息
nvidia-smi --query-gpu=name,compute_cap,memory.total --format=csv

# 检查 GPU Compute Capability
nvidia-smi --query-gpu=compute_cap --format=csv,noheader
# 输出: 8.0(A100)

2.2.2 检查 CUDA 版本

# 方法一:通过 nvcc
nvcc --version

# 方法二:通过 nvidia-smi
nvidia-smi | grep "CUDA Version"

# 方法三:检查 CUDA 安装路径
ls /usr/local/cuda/version.txt
cat /usr/local/cuda/version.txt

2.2.3 检查 Python 版本

python3 --version
# Python 3.10.12

# 确认 pip 版本
pip --version
# pip 23.3.1 from ...

2.3 安装方式一:pip 安装(推荐)

2.3.1 创建虚拟环境

# 使用 venv
python3 -m venv vllm-env
source vllm-env/bin/activate

# 或使用 conda
conda create -n vllm python=3.10 -y
conda activate vllm

2.3.2 安装 vLLM

# 最新稳定版(推荐)
pip install vllm

# 指定版本安装
pip install vllm==0.6.6

# 使用国内镜像加速
pip install vllm -i https://pypi.tuna.tsinghua.edu.cn/simple

2.3.3 安装特定 CUDA 版本

如果默认安装的 CUDA 版本不匹配,可以指定:

# CUDA 12.1 版本
pip install vllm --extra-index-url https://download.pytorch.org/whl/cu121

# CUDA 11.8 版本
pip install vllm --extra-index-url https://download.pytorch.org/whl/cu118

2.3.4 安装可选依赖

# 安装全部可选依赖
pip install vllm[all]

# 仅安装推理相关
pip install vllm[inference]

# 安装 OpenAI 兼容客户端(用于测试)
pip install openai

# 安装性能分析工具
pip install vllm[metrics]

# 安装 Ray(分布式推理)
pip install ray[default]

2.3.5 验证安装

# verify_install.py
import vllm

print(f"vLLM version: {vllm.__version__}")

# 检查 CUDA 是否可用
import torch
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"CUDA version: {torch.version.cuda}")
print(f"GPU count: {torch.cuda.device_count()}")
print(f"GPU name: {torch.cuda.get_device_name(0)}")
print(f"GPU memory: {torch.cuda.get_device_properties(0).total_mem / 1e9:.1f} GB")
python verify_install.py

# 预期输出:
# vLLM version: 0.6.6
# CUDA available: True
# CUDA version: 12.4
# GPU count: 1
# GPU name: NVIDIA A100 80GB PCIe
# GPU memory: 80.0 GB

2.4 安装方式二:Docker 安装

2.4.1 准备 Docker 和 NVIDIA Container Toolkit

# 安装 Docker(如果未安装)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER

# 安装 NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
    sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# 配置 Docker 使用 NVIDIA runtime
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

# 验证
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

2.4.2 使用官方 Docker 镜像

# 拉取官方镜像
docker pull vllm/vllm-openai:latest

# 运行容器(基本用法)
docker run -d \
    --name vllm-server \
    --gpus all \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    -p 8000:8000 \
    --ipc=host \
    vllm/vllm-openai:latest \
    --model Qwen/Qwen2.5-7B-Instruct

# 运行容器(完整参数)
docker run -d \
    --name vllm-server \
    --gpus '"device=0"' \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    -v /data/models:/models \
    -p 8000:8000 \
    --ipc=host \
    --ulimit memlock=-1:-1 \
    --shm-size=16g \
    -e HUGGING_FACE_HUB_TOKEN=$HF_TOKEN \
    vllm/vllm-openai:latest \
    --model /models/Qwen2.5-72B-Instruct \
    --tensor-parallel-size 4 \
    --max-model-len 8192 \
    --gpu-memory-utilization 0.9 \
    --served-model-name qwen-72b

2.4.3 Docker 参数说明

参数说明
--gpus all使用所有 GPU
--gpus '"device=0,1"'使用指定 GPU
--ipc=host共享主机 IPC 命名空间(必需,用于共享内存)
--shm-size=16g设置共享内存大小(推荐 ≥ 16GB)
--ulimit memlock=-1:-1解除内存锁定限制
-v ~/.cache/huggingface:/root/.cache/huggingface挂载模型缓存
-p 8000:8000映射端口

关键--ipc=host 是必需参数,vLLM 需要大量共享内存用于进程间通信。


2.5 安装方式三:源码安装

适用于需要修改源码或使用最新开发特性的场景。

2.5.1 克隆和编译

# 克隆仓库
git clone https://github.com/vllm-project/vllm.git
cd vllm

# 切换到特定版本(可选)
git checkout v0.6.6

# 安装编译依赖
pip install -r requirements-build.txt

# 编译安装(耗时较长,需要 CUDA 编译器)
pip install -e .

# 以开发模式安装(可编辑)
pip install -e ".[all]"

2.5.2 源码安装注意事项

编译时间:首次编译可能需要 30-60 分钟,取决于 CPU 性能。

内存需求:编译过程需要大量系统内存,建议 32 GB+。

CUDA Toolkit:需要完整安装 CUDA Toolkit(不仅是 runtime)。


2.6 安装方式四:conda 安装

# 创建环境
conda create -n vllm python=3.10 -y
conda activate vllm

# 安装 PyTorch(先安装 PyTorch 确保 CUDA 版本匹配)
conda install pytorch pytorch-cuda=12.1 -c pytorch -c nvidia

# 安装 vLLM
pip install vllm

2.7 模型下载与缓存

2.7.1 HuggingFace 模型缓存

vLLM 从 HuggingFace Hub 下载模型,缓存默认位置:

# 默认缓存路径
~/.cache/huggingface/hub/

# 自定义缓存路径
export HF_HOME=/data/huggingface
export HUGGING_FACE_HUB_TOKEN=hf_xxxxxxxxxxxxx  # 访问 gated 模型

2.7.2 提前下载模型

# 方法一:使用 huggingface-cli
pip install huggingface_hub
huggingface-cli download Qwen/Qwen2.5-7B-Instruct

# 方法二:使用 Python
python -c "
from huggingface_hub import snapshot_download
snapshot_download(
    'Qwen/Qwen2.5-7B-Instruct',
    local_dir='/data/models/qwen2.5-7b'
)
"

# 方法三:使用 modelscope(国内加速)
pip install modelscope
modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir /data/models/qwen2.5-7b

2.7.3 使用本地模型

# 本地模型路径
vllm serve /data/models/qwen2.5-7b --served-model-name qwen-7b

# 或设置环境变量
export HF_HOME=/data/models
vllm serve Qwen/Qwen2.5-7B-Instruct  # 从缓存加载

2.7.4 HuggingFace 镜像加速

# 设置 HuggingFace 镜像(国内用户)
export HF_ENDPOINT=https://hf-mirror.com

# 验证镜像
curl -I https://hf-mirror.com

# 之后所有 huggingface 操作自动使用镜像
huggingface-cli download Qwen/Qwen2.5-7B-Instruct

2.8 多 GPU 环境配置

2.8.1 指定可见 GPU

# 使用所有 GPU
export CUDA_VISIBLE_DEVICES=0,1,2,3

# 使用指定 GPU
export CUDA_VISIBLE_DEVICES=0,1

# 在 Python 中指定
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3"

2.8.2 GPU 持久化模式

# 启用 GPU 持久化模式(减少初始化延迟)
sudo nvidia-smi -pm 1

# 设置 GPU 功率限制(可选,降低功耗)
sudo nvidia-smi -pl 300  # 设置为 300W

# 设置 GPU 计算模式
sudo nvidia-smi -c EXCLUSIVE_PROCESS  # 独占进程模式(生产推荐)

2.9 环境变量配置

以下是 vLLM 相关的重要环境变量:

# ~/.bashrc 或 ~/.profile

# === 模型相关 ===
export HF_HOME=/data/huggingface               # HuggingFace 缓存目录
export HUGGING_FACE_HUB_TOKEN=hf_xxx           # HF Token(gated 模型需要)
export HF_ENDPOINT=https://hf-mirror.com       # HF 镜像(国内加速)

# === vLLM 相关 ===
export VLLM_WORKER_MULTIPROC_METHOD=spawn       # 多进程启动方式
export VLLM_ATTENTION_BACKEND=FLASH_ATTN        # Attention 后端
export VLLM_USE_MODELSCOPE=False                # 是否使用 ModelScope

# === CUDA 相关 ===
export CUDA_VISIBLE_DEVICES=0,1,2,3            # 可见 GPU
export CUDA_DEVICE_ORDER=PCI_BUS_ID             # GPU 编号顺序

# === 性能相关 ===
export NCCL_P2P_DISABLE=0                       # P2P 通信开关
export NCCL_IB_DISABLE=0                        # InfiniBand 开关
export OMP_NUM_THREADS=8                        # OpenMP 线程数

2.10 安装问题排查

常见问题一:CUDA 版本不匹配

错误信息

RuntimeError: CUDA error: no kernel image is available for execution on the device

解决方案

# 检查 PyTorch CUDA 版本
python -c "import torch; print(torch.version.cuda)"

# 检查系统 CUDA 版本
nvcc --version

# 确保两者匹配,重新安装 PyTorch
pip install torch --index-url https://download.pytorch.org/whl/cu124

常见问题二:共享内存不足

错误信息

torch.multiprocessing.spawn: Process exited with error: bus error

解决方案

# Docker 中增加共享内存
docker run --shm-size=16g ...

# 系统中增加 /dev/shm
sudo mount -o remount,size=16G /dev/shm

常见问题三:编译失败

错误信息

nvcc fatal: Unsupported gpu architecture 'compute_XX'

解决方案

# 确保 CUDA Toolkit 版本支持目标 GPU
# CUDA 11.8 支持 compute_89(RTX 4090)
# CUDA 12.1+ 支持 compute_90(H100)

# 使用预编译的 wheel(推荐)
pip install vllm

常见问题四:内存不足

错误信息

OutOfMemoryError: CUDA out of memory

解决方案

# 1. 减小 GPU 内存利用率(默认 0.9)
vllm serve model --gpu-memory-utilization 0.85

# 2. 减小最大序列长度
vllm serve model --max-model-len 2048

# 3. 使用量化模型
vllm serve model --quantization awq

2.11 安装验证全流程

完成安装后,运行以下完整验证脚本:

# full_verify.py
"""vLLM 安装完整验证脚本"""

import sys

def check_imports():
    """检查关键模块导入"""
    modules = ["vllm", "torch", "transformers"]
    for mod in modules:
        try:
            m = __import__(mod)
            version = getattr(m, "__version__", "unknown")
            print(f"  ✅ {mod}: {version}")
        except ImportError as e:
            print(f"  ❌ {mod}: {e}")
            return False
    return True

def check_cuda():
    """检查 CUDA 环境"""
    import torch
    if not torch.cuda.is_available():
        print("  ❌ CUDA 不可用")
        return False
    
    print(f"  ✅ CUDA: {torch.version.cuda}")
    print(f"  ✅ cuDNN: {torch.backends.cudnn.version()}")
    print(f"  ✅ GPU 数量: {torch.cuda.device_count()}")
    
    for i in range(torch.cuda.device_count()):
        props = torch.cuda.get_device_properties(i)
        print(f"  ✅ GPU {i}: {props.name}, {props.total_mem / 1e9:.1f} GB, CC {props.major}.{props.minor}")
    return True

def check_vllm():
    """检查 vLLM 功能"""
    from vllm import LLM, SamplingParams
    
    print("  尝试加载小模型进行测试...")
    try:
        llm = LLM(
            model="Qwen/Qwen2.5-0.5B-Instruct",
            max_model_len=512,
            gpu_memory_utilization=0.5,
        )
        outputs = llm.generate(["Hello, how are you?"], SamplingParams(max_tokens=10))
        print(f"  ✅ 推理成功: {outputs[0].outputs[0].text[:50]}")
        return True
    except Exception as e:
        print(f"  ❌ vLLM 测试失败: {e}")
        return False

if __name__ == "__main__":
    print("=== vLLM 安装验证 ===\n")
    
    print("1. 检查模块导入:")
    check_imports()
    
    print("\n2. 检查 CUDA 环境:")
    check_cuda()
    
    print("\n3. 检查 vLLM 功能:")
    check_vllm()
    
    print("\n=== 验证完成 ===")

2.12 注意事项

驱动兼容性:NVIDIA 驱动版本必须高于 CUDA 版本要求的最低版本。详见 CUDA 兼容性矩阵

Docker 共享内存:使用 Docker 运行 vLLM 时,--ipc=host必需参数,否则会出现段错误(segfault)。

防火墙:如果需要从外部访问 API 服务,确保开放 8000 端口(或自定义端口)。

模型许可证:下载模型前请确认许可证允许您的使用场景,尤其是商业用途。


2.13 扩展阅读


上一章01 - vLLM 概述与技术原理 | 下一章03 - 快速开始