1. 引言:为什么选择 vLLM 进行本地模型部署?

在当今大语言模型(LLM)应用爆发的时代,如何高效、低成本地部署和推理模型成为开发者与企业的核心挑战。vLLM(Vectorized Large Language Model serving engine)由加州大学伯克利分校的研究团队开发,以其极致的吞吐量、高效的内存管理对 PagedAttention 技术的首创性应用,迅速成为生产级 LLM 服务的事实标准之一。

与传统的模型服务框架(如 Hugging Face Transformers 的 pipelinetext-generation-inference)或其他本地部署平台(如 Ollama、LM Studio、LocalAI)相比,vLLM 的核心设计哲学是为高吞吐量、低延迟的批量推理场景而生。它特别擅长处理长序列、多并发请求,在相同的硬件条件下,往往能提供数倍甚至数十倍的吞吐量提升。

本文将提供一个从零开始的、超过万字的完整 vLLM 本地部署教程。我们将深入:

  1. 部署实践:手把手教你部署本地模型。
  2. 深度对比:详细剖析 vLLM 与 Ollama、LM Studio、LocalAI、TGI 等平台的核心差异。
  3. 实战示例:提供丰富的代码和配置案例。
  4. 排错指南:针对常见及突发情况,给出系统的解决方案。

2. 环境准备与基础安装

2.1 硬件与系统要求

  • 操作系统:Linux (Ubuntu 20.04/22.04, CentOS 7+ 推荐) 或 Windows (WSL2 强烈推荐)。macOS (Apple Silicon) 也可运行,但性能优化主要针对 NVIDIA GPU。
  • GPU强烈推荐 NVIDIA GPU (CUDA 11.8 及以上)。vLLM 的 PagedAttention 和连续批处理在 GPU 上收益最大。显存大小取决于模型,例如 7B 模型通常需要 14GB+,70B 模型需要 140GB+。
  • CPU/RAM:作为备用或运行小模型。至少 16GB 系统内存,建议 32GB+。
  • 存储:至少 50GB 可用空间用于模型缓存和依赖。

2.2 基础环境配置

步骤 1:安装 Python 与 Conda (推荐)

# 使用 Miniconda 创建独立环境,避免依赖冲突
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 按照提示完成安装并重启shell或 source ~/.bashrc

# 创建并激活 vllm 环境
conda create -n vllm python=3.9 -y
conda activate vllm

步骤 2:安装 CUDA 工具包 (GPU 用户)
确保你的 NVIDIA 驱动版本与 CUDA 版本匹配。

# 对于 Ubuntu,例如安装 CUDA 12.1
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /"
sudo apt-get update
sudo apt-get -y install cuda-12-1

步骤 3:安装 vLLM
vLLM 提供了多种安装方式以适应不同场景。

  • 方式 A:标准安装 (功能最全)

    pip install vllm
    # 此命令会安装包括 OpenAI 兼容 API 在内的所有核心功能
    
  • 方式 B:最小化安装 (仅核心引擎)

    pip install vllm --no-deps
    pip install torch --index-url https://download.pytorch.org/whl/cu121  # 根据你的 CUDA 版本选择
    
  • 方式 C:从源码安装 (用于开发或最新特性)

    git clone https://github.com/vllm-project/vllm.git
    cd vllm
    pip install -e .  # 可编辑模式安装
    

安装完成后,验证安装:

python -c "import vllm; print(vllm.__version__)"

3. 核心部署流程:启动你的第一个本地模型

3.1 模型下载与准备

vLLM 支持 Hugging Face Hub 上的绝大多数 Transformer 架构模型。它会自动从 Hugging Face 下载模型,但你也可以预先下载。

自动下载 (推荐,启动时自动完成)
无需额外步骤,vLLM 在首次加载指定模型时会自动处理。

手动下载 (网络环境受限时)

# 使用 huggingface-cli
pip install huggingface-hub
huggingface-cli download meta-llama/Llama-3.2-1B-Instruct --local-dir ./models/llama-3.2-1b-instruct

# 或者使用 snapshot_download
from huggingface_hub import snapshot_download
snapshot_download(repo_id="meta-llama/Llama-3.2-1B-Instruct", local_dir="./models/llama-3.2-1b-instruct")

3.2 启动 vLLM 服务器 (OpenAI 兼容 API)

这是最常用的部署方式,它启动一个与 OpenAI API 格式完全兼容的 HTTP 服务器。

基本启动命令:

# 在终端中运行
python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-3.2-1B-Instruct \
    --served-model-name llama-3.2-1b \
    --port 8000 \
    --host 0.0.0.0

关键参数详解:

  • --model: Hugging Face 模型 ID 或本地路径。
  • --served-model-name: 客户端调用时使用的模型名称。
  • --port/--host: 服务监听地址。
  • --tensor-parallel-size: 张量并行度,用于多 GPU 推理。例如,在 4 张 GPU 上运行模型:--tensor-parallel-size 4
  • --gpu-memory-utilization: GPU 内存利用率 (0-1),默认 0.9。在共享 GPU 环境中可调低。
  • --max-model-len: 模型支持的最大上下文长度。vLLM 会自动检测,但若需覆盖可手动指定。
  • --quantization: 量化方法,如 awq (Activation-aware Weight Quantization), gptq, squeezellm大幅降低显存,轻微影响精度
    # 使用 AWQ 量化启动,显存需求减半
    python -m vllm.entrypoints.openai.api_server \
        --model TheBloke/Llama-2-7B-Chat-AWQ \
        --quantization awq \
        --port 8000
    
  • --api-key: 启用 API 密钥认证。--api-key sk-xxxx

3.3 验证服务

服务启动后,打开另一个终端进行测试:

使用 cURL:

# 聊天补全
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama-3.2-1b",
    "messages": [
      {"role": "user", "content": "请用中文介绍一下你自己。"}
    ],
    "max_tokens": 100,
    "temperature": 0.7
  }'

# 文本补全 (兼容旧版)
curl http://localhost:8000/v1/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama-3.2-1b",
    "prompt": "法国的首都是",
    "max_tokens": 10
  }'

使用 Python 客户端 (OpenAI SDK):

from openai import OpenAI

# 指向本地 vLLM 服务器
client = OpenAI(
    api_key="token-abc123", # 若未设置 --api-key,可填任意值
    base_url="http://localhost:8000/v1"
)

response = client.chat.completions.create(
    model="llama-3.2-1b",
    messages=[{"role": "user", "content": "你好,请写一首关于春天的短诗。"}],
    max_tokens=150,
    temperature=0.8
)
print(response.choices[0].message.content)

3.4 进阶部署模式

1. 多模型同时服务:
vLLM 支持在单个服务器实例中加载多个模型,动态路由请求。

python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-3.2-1B-Instruct \
    --model mistralai/Mistral-7B-Instruct-v0.3 \
    --served-model-name llama-3.2-1b \
    --served-model-name mistral-7b \
    --port 8000

2. 使用 vLLM 作为库 (离线批量推理):
如果你不需要 HTTP 服务,只想在脚本中高效推理:

from vllm import LLM, SamplingParams

# 初始化模型
llm = LLM(model="meta-llama/Llama-3.2-1B-Instruct")

# 准备采样参数
sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=100)

# 准备提示词列表 (支持连续批处理!)
prompts = [
    "中国的首都是哪里?",
    "请解释一下机器学习。",
    "写一个简单的 Python 函数计算斐波那契数列。"
]

# 批量生成
outputs = llm.generate(prompts, sampling_params)

# 输出结果
for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}\nGenerated: {generated_text!r}\n")

4. 深度对比:vLLM vs. 其他本地部署平台

为了让你清晰地理解 vLLM 的定位,我们将其与几个流行的本地部署方案进行多维度对比。

渲染错误: Mermaid 渲染失败: Parse error on line 22: ...”] H3[“友好GUI(LM Studio)”] en ----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'PS'

4.1 vLLM vs. Ollama

特性维度 vLLM Ollama 分析与选择建议
核心目标 生产级高吞吐量服务 开发者本地体验与原型开发 vLLM 为“服务”而生,Ollama 为“使用”而生。
性能 极高。PagedAttention + 连续批处理,专为并发优化。 良好。针对单次或低并发交互进行了优化,但吞吐量不及 vLLM。 需要处理大量并发请求(如 API 后端)时,vLLM 是唯一选择。
易用性 中等。需要命令行配置,对新手有一定门槛。 极高ollama run llama3.2 即可运行,开箱即用。 想快速体验模型,选 Ollama。想搭建稳定服务,选 vLLM。
模型管理 依赖 Hugging Face 或手动管理模型文件。 优秀。内置模型库,拉取、运行、管理一条龙。 Ollama 的模型管理体验更接近 Docker。
API 完整的 OpenAI API 兼容。可直接替代 OpenAI 端点。 提供简单的 REST API(非 OpenAI 格式)和库。 需要与现有基于 OpenAI SDK 的应用无缝集成,vLLM 是完美选择。
多模型支持 支持,可在单实例加载多个模型。 支持,但每个模型运行在独立进程。 vLLM 的资源共享效率更高。
量化支持 支持 AWQ, GPTQ, SqueezeLLM。 支持 GGUF 格式(通过 llama.cpp)。 vLLM 的 AWQ 在 NVIDIA GPU 上效率更高;Ollama 的 GGUF 在 CPU/混合推理上更灵活。

总结:Ollama 是你的个人模型播放器,vLLM 是你的企业模型服务器

4.2 vLLM vs. LM Studio

特性维度 vLLM LM Studio 分析与选择建议
形态 无界面命令行/库 图形化桌面应用程序 根本区别。LM Studio 降低了非技术用户的门槛。
部署目标 服务器、云端、无头环境。 Windows/macOS 个人电脑桌面端。 在个人电脑上可视化探索模型,用 LM Studio。在 Linux 服务器部署服务,用 vLLM。
资源控制 精细。可通过参数控制 GPU 内存、并行度等。 简易。图形化滑块调节。 vLLM 给予开发者完全的控制权。
可编程性 极高。完整的 Python API 和 HTTP API。 有限。提供本地 OpenAI 兼容服务器,但底层可控性弱。 需要集成到自动化流程或复杂应用中,必须选 vLLM。
成本 免费开源。 免费使用,部分高级功能可能收费。 vLLM 完全开源透明。

总结:LM Studio 是带图形界面的模型玩具箱,vLLM 是可编程的模型发动机

4.3 vLLM vs. LocalAI

特性维度 vLLM LocalAI 分析与选择建议
架构哲学 单一引擎,深度优化。专注于用一套极致的技术栈服务 Transformer 模型。 聚合引擎,统一接口。作为后端,可调用 llama.cpp, rwkv.cpp, diffusers, vLLM 等多种引擎。 LocalAI 是“管理器”,vLLM 是“执行者”。LocalAI 可以封装 vLLM 作为其一个后端
模型兼容性 主流 Transformer 模型 (Llama, Mistral, Qwen, Phi 等)。 极广。除了 Transformer,还支持 Stable Diffusion(图像)、语音模型、嵌入模型等。 需要多模态(文、图、音)统一 API,选 LocalAI。 只需极致文本生成,选 vLLM。
API 兼容 OpenAI Chat/Completions。 多种 API:OpenAI, Anthropic Claude, Google Gemini, Cohere 等。 LocalAI 提供了更丰富的“伪装”能力,方便测试不同厂商的 API 格式。
部署复杂度 中等。需要安装 Python/CUDA 环境。 中等偏高。需要配置多个后端和模型。 如果你只需要文本生成,直接使用 vLLM 更简单纯粹。如果需要“All-in-one”的本地替代方案,LocalAI 更强大。

总结:LocalAI 是本地化的多云 API 聚合平台,vLLM 是专精的文本生成高性能引擎。两者可以结合使用(LocalAI 调用 vLLM 后端)。

4.4 vLLM vs. Hugging Face TGI (Text Generation Inference)

特性维度 vLLM TGI (Hugging Face) 分析与选择建议
出身 伯克利大学研究项目演化而来。 Hugging Face 官方出品。 都是生产级选择,有强大的背景支持。
核心技术 PagedAttention (核心)、连续批处理。 Tensor Parallelism, PT-Quantization, 连续批处理。 vLLM 的内存管理理论上有优势,尤其在长序列场景。TGI 与 Hugging Face 生态结合更紧密。
性能 极致吞吐量,在批处理场景下优势明显。 优秀吞吐量,经过生产环境充分验证。 在极高并发、长序列场景下,vLLM 通常有更好的吞吐量表现。
易用性 中等,需要一定配置。 中等,Docker 部署相对简单。 TGI 提供官方 Docker 镜像,容器化部署更标准化。
模型支持 主流 Transformer 架构模型。 广泛的 Hugging Face 模型,支持更多小众架构。 如果需要运行非主流或研究型模型,TGI 的兼容性可能更好。
量化支持 AWQ, GPTQ, SqueezeLLM。 GPTQ, bitsandbytes (NF4/FP4)。 vLLM 的 AWQ 在 NVIDIA GPU 上效率突出;TGI 的 bitsandbytes 集成更原生。
部署方式 Python 包、HTTP 服务器、库。 主要 Docker 部署,提供 Helm Chart 用于 Kubernetes。 TGI 的云原生部署体验更成熟,vLLM 的 Python 集成更灵活。
社区与生态 活跃的学术与工程社区。 庞大的 Hugging Face 生态,官方支持。 依赖 Hugging Face 全家桶的团队可能更倾向 TGI。

总结:TGI 是 Hugging Face 生态的官方标准服务,适合深度集成 HF 工具链的团队;vLLM 是 追求极致性能的学术派引擎,适合对吞吐量和内存效率有极致要求的场景。两者都是生产级选择,可根据团队技术栈和性能需求决定。

5. 总结与展望

通过本文的详细教程,你应该已经掌握了 vLLM 从环境准备到生产部署的完整流程。让我们回顾一下核心要点:

5.1 核心优势回顾

  1. 极致性能:vLLM 的 PagedAttention 和连续批处理技术,使其在高并发、长序列场景下拥有无可比拟的吞吐量优势。
  2. 内存高效:创新的 KV Cache 分页管理,让大模型在有限显存中处理更长的上下文。
  3. 完全兼容:提供与 OpenAI API 完全兼容的接口,现有应用可无缝迁移。
  4. 灵活部署:支持单模型、多模型、量化推理、离线批量处理等多种部署模式。

5.2 适用场景建议

  • ✅ 强烈推荐使用 vLLM

    • 需要搭建高并发 API 服务
    • 处理长文本生成任务(文档总结、代码生成等)
    • 资源有限但需要服务多个用户或请求
    • 已有基于 OpenAI SDK 的应用需要本地化部署
  • ⏸️ 考虑其他方案

    • 个人快速体验模型 → OllamaLM Studio
    • 需要多模态(图文音)统一 API → LocalAI
    • 深度集成 Hugging Face 生态 → TGI
    • 无 GPU 或极低配置环境 → llama.cpp(CPU 推理)

5.3 下一步学习建议

  1. 性能调优:尝试调整 --gpu-memory-utilization--tensor-parallel-size 等参数,找到最适合你硬件配置的平衡点。
  2. 量化实践:在 TheBloke 等仓库寻找 AWQ/GPTQ 量化模型,体验显存大幅降低的效果。
  3. 生产部署:学习使用 Docker 容器化 vLLM,并结合 Kubernetes 或 Docker Compose 进行多实例管理。
  4. 监控与运维:集成 Prometheus 监控指标,设置日志轮转和健康检查,构建完整的运维体系。
  5. 高级特性:探索 vLLM 的 SGLang 集成,实现更复杂的推理工作流。

5.4 结语

vLLM 不仅仅是一个推理引擎,它代表了 LLM 服务从“能跑起来”到“跑得高效”的技术演进。随着模型规模的持续增长和应用场景的不断深化,高效的推理框架将成为 AI 基础设施的关键组成部分。

无论你是个人开发者尝试本地部署,还是企业团队构建生产服务,掌握 vLLM 都将为你打开一扇通往高效、低成本 LLM 服务的大门。现在,你已经拥有了从零开始部署和优化 vLLM 的完整知识体系,接下来就是动手实践,将理论转化为实际价值的时候了。

开始你的 vLLM 之旅吧,让每一分计算资源都发挥最大效能!

Logo

免费领 200 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐