Skip to main content

VLLM 部署 大模型

vLLM 高性能推理部署指南

vLLM 是一个为大型语言模型(LLM)设计的高性能、高吞吐量的推理和服务引擎。它通过创新的 PagedAttention 算法,显著减少了内存浪费,并实现了比传统方法高出数倍的推理速度,使其成为 LLM 服务化部署的行业最佳选择之一。

核心定位: vLLM 专注于文本生成。它目前是纯粹的大语言模型(LLM)推理框架,因此天然不适用于直接部署文生图、文生音频/视频等多模态生成模型。然而,对于文本类任务,包括多模态模型的文本理解与生成部分,vLLM 提供了无与伦比的性能。


部署方式

vLLM 提供了灵活的部署选项,以适应不同的开发和生产环境。

方式一:使用 Docker 部署(推荐用于生产)

Docker 部署提供了隔离、可复现和易于扩展的环境,是生产环境的首选。

  1. 拉取官方镜像 vLLM 的官方镜像已经包含了所有必要的依赖项,包括 CUDA、PyTorch 等。

    docker pull vllm/vllm-openai:latest
    

    注意:请确保您的主机已正确安装 NVIDIA 驱动和 NVIDIA Container Toolkit。

  2. 启动服务 使用 docker run 命令启动一个 API 服务器。以下示例将部署 meta-llama/Llama-2-7b-chat-hf 模型。

    docker run --runtime nvidia --gpus all \
        -v ~/.cache/huggingface:/root/.cache/huggingface \
        -p 8000:8000 \
        --ipc=host \
        vllm/vllm-openai:latest \
        --model meta-llama/Llama-2-7b-chat-hf
    
    • --runtime nvidia --gpus all: 允许容器访问所有 GPU。
    • -v ~/.cache/huggingface:/root/.cache/huggingface: 重要! 将主机的 Hugging Face 缓存目录挂载到容器内,避免每次启动都重新下载模型。
    • -p 8000:8000: 将容器的 8000 端口映射到主机。
    • --model ...: 指定要加载的模型。

方式二:使用 Conda/venv 部署(推荐用于开发与调试)

在本地 Python 环境中部署 vLLM 提供了更大的灵活性,方便进行代码调试和定制。

  1. 创建并激活虚拟环境 使用 Conda 或 venv 创建一个干净的 Python 环境。

    # Conda
    conda create -n vllm python=3.10 -y
    conda activate vllm
    
    # 或者 venv
    # python -m venv vllm-env
    # source vllm-env/bin/activate
    
  2. 安装 vLLM 直接使用 pip 安装。vLLM 会自动处理 PyTorch 等核心依赖。

    pip install vllm
    
  3. 启动服务 vLLM 提供了与 OpenAI API 兼容的服务器。

    python -m vllm.entrypoints.openai.api_server \
        --model meta-llama/Llama-2-7b-chat-hf
    

    服务启动后,同样监听在 http://localhost:8000


模型部署场景

vLLM 可以轻松加载来自 Hugging Face Hub 的模型,或您存储在本地的模型。

场景一:部署 Hugging Face Hub 上的模型

这是最常见的方式。只需在 --model 参数后指定模型的 ID 即可。vLLM 会自动从 Hugging Face Hub 下载并加载。

# Docker 部署
docker run ... vllm/vllm-openai:latest --model Qwen/Qwen1.5-7B-Chat

# 本地环境部署
python -m vllm.entrypoints.openai.api_server --model Qwen/Qwen1.5-7B-Chat

场景二:部署本地模型

如果模型文件已存储在本地磁盘,直接将本地路径传递给 --model 参数。

假设您的模型文件位于 /path/to/my-local-model

# Docker 部署 (需要将本地目录挂载到容器内)
docker run --runtime nvidia --gpus all \
    -v /path/to/my-local-model:/app/my-local-model \
    -p 8000:8000 \
    vllm/vllm-openai:latest \
    --model /app/my-local-model

# 本地环境部署
python -m vllm.entrypoints.openai.api_server --model /path/to/my-local-model

常用启动参数

以下是一些在部署 vLLM 服务时非常关键和常用的参数:

参数 示例 描述
--model meta-llama/Llama-2-7b-chat-hf (必需) 指定要加载的模型,可以是 Hugging Face ID 或本地路径。
--tensor-parallel-size 2 设置张量并行的大小,用于在多张 GPU 上拆分模型以实现加速。
--gpu-memory-utilization 0.9 设置每张 GPU 内存的最大使用率(0到1之间)。默认为 0.9
--max-model-len 4096 模型可以处理的最大序列长度(上下文长度)。
--dtype bfloat16 加载模型时的数据类型,可选 auto, half, float16, bfloat16, float, float32auto 会自动选择最佳类型。
--host 0.0.0.0 服务器监听的主机地址。默认为 localhost,改为 0.0.0.0 以允许外部访问。
--port 8000 服务器监听的端口。
--trust-remote-code (无值) 如果模型需要执行自定义代码(如一些多模态模型或特殊架构),则需添加此标志。

一个更完整的启动命令示例:

python -m vllm.entrypoints.openai.api_server \
    --model mistralai/Mistral-7B-Instruct-v0.2 \
    --tensor-parallel-size 2 \
    --gpu-memory-utilization 0.85 \
    --max-model-len 8192 \
    --host 0.0.0.0

这个命令将在 2 张 GPU 上以张量并行方式部署 Mistral-7B 模型,最大上下文长度为 8192,并允许从任何 IP 地址访问。