3、环境搭建与部署:硬件要求、Python环境配置、vLLM安装、启动服务、验证部署

好,咱们直接进入正题。这一章我带你亲手把vLLM跑起来。

说实话,很多人在大模型部署上栽跟头,不是因为模型多复杂,而是环境没搭对。我见过太多人花了两天装包,最后发现CUDA版本对不上——那种感觉,嗯,挺难受的。

所以这一章,我会把每一步拆开揉碎。你跟着做就行。

3.1 硬件要求:别让GPU拖后腿

先说说硬件。vLLM对GPU的要求其实不算苛刻,但有几个硬指标你得心里有数。

组件 最低要求 推荐配置 备注
GPU NVIDIA T4 (16GB) A100 80GB / H100 显存决定你能跑多大的模型
CPU 8核 16核以上 CPU负责调度,别太弱
内存 32GB 64GB+ 模型加载时内存消耗不小
磁盘 50GB SSD 200GB NVMe 模型文件动辄几十GB
CUDA 11.8 12.1+ vLLM对CUDA版本敏感
⚠️ 注意: 显存是硬门槛。比如你要跑Llama 2 7B(FP16),至少需要14GB显存。但vLLM本身还要占一些,所以16GB的T4勉强能跑,但批处理大小就别指望了。

我个人习惯是:先看模型大小,再选GPU。模型参数量(B)× 2(FP16)≈ 显存需求。比如7B模型就是14GB,再加20%的余量,大概17GB。所以T4(16GB)其实有点悬。

3.2 Python环境配置:虚拟环境是底线

Python环境这块,我踩过太多坑了。以前我图省事直接在base环境里装,结果项目一多,依赖冲突到怀疑人生。

所以,请务必用虚拟环境。我推荐conda,当然venv也行。

# 创建虚拟环境,Python 3.10以上
conda create -n vllm_env python=3.10 -y

# 激活环境
conda activate vllm_env

# 升级pip
pip install --upgrade pip
💡 小技巧: 我建议Python版本选3.10或3.11。3.12虽然新,但有些包还没完全适配。别追新,稳定第一。

然后安装PyTorch。这里有个关键点:CUDA版本必须和你的驱动匹配

# 查看CUDA版本
nvidia-smi

# 根据CUDA版本安装PyTorch
# CUDA 12.1
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# CUDA 11.8
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

验证一下PyTorch能不能看到GPU:

python -c "import torch; print(torch.cuda.is_available())"

如果输出 True,恭喜,环境第一步走通了。

3.3 vLLM安装:两种方式,任你选

vLLM的安装有两种主流方式。我两种都用过,给你说说区别。

方式一:pip安装(推荐新手)

pip install vllm

就这么简单。它会自动拉取对应的CUDA版本。不过要注意,pip安装的是预编译的wheel包,对CUDA版本有严格限制。我试过在CUDA 11.8上装vLLM 0.4.0,结果报错说找不到libcuda.so——后来发现是版本不匹配。

方式二:源码安装(推荐进阶用户)

如果你需要定制化,或者想用最新的特性,那就源码编译。

git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -e .

编译过程大概10-20分钟,取决于你的机器。我第一次编译时等了半小时,还以为死机了……其实它在编译CUDA kernel,正常现象。

🔑 关键点: 源码安装可以让你用上最新的优化。比如vLLM 0.5.0之后引入了PagedAttention v2,吞吐量提升了30%左右。如果你用pip安装,可能还在旧版本上。

3.4 启动服务:一行命令搞定

环境搭好了,咱们来启动vLLM服务。这里我用一个经典的模型做演示:meta-llama/Llama-2-7b-chat-hf

# 启动vLLM服务
python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-2-7b-chat-hf \
    --tensor-parallel-size 1 \
    --gpu-memory-utilization 0.9 \
    --max-num-seqs 256 \
    --port 8000

参数说明:

  • --model:模型路径或Hugging Face模型名
  • --tensor-parallel-size:GPU数量,单卡就写1
  • --gpu-memory-utilization:显存利用率,0.9表示留10%给其他进程
  • --max-num-seqs:最大并发请求数,这个值直接影响吞吐量
  • --port:服务端口
⚠️ 注意: 第一次启动时,vLLM会下载模型文件。Llama 2 7B大概13GB,下载时间取决于你的网速。我建议提前用 huggingface-cli 下载好,避免服务启动时卡住。

启动成功后,你会看到类似这样的输出:

INFO:     Started server process [12345]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000

看到这个,说明服务已经跑起来了。

3.5 验证部署:用curl测一下

服务启动了,怎么知道它是不是真的能用?我习惯用curl发一个请求试试。

curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "meta-llama/Llama-2-7b-chat-hf",
        "messages": [
            {"role": "user", "content": "Hello, how are you?"}
        ],
        "max_tokens": 100,
        "temperature": 0.7
    }'

如果返回了类似下面的JSON,说明部署成功:

{
    "id": "cmpl-xxx",
    "object": "chat.completion",
    "created": 1234567890,
    "model": "meta-llama/Llama-2-7b-chat-hf",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "Hello! I'm doing well, thank you for asking. How can I assist you today?"
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 10,
        "completion_tokens": 18,
        "total_tokens": 28
    }
}

看到 finish_reason": "stop" 了吗?这说明模型正常生成了回复。

💡 小技巧: 如果你用的是OpenAI的Python客户端,也可以这样测:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="none")
response = client.chat.completions.create(
    model="meta-llama/Llama-2-7b-chat-hf",
    messages=[{"role": "user", "content": "Hello"}]
)
print(response.choices[0].message.content)

3.6 知识体系总览

这一章的内容,我用一张图给你总结一下。从硬件到部署,每一步都是环环相扣的。

vLLM环境搭建与部署流程 硬件检查 GPU / CPU / 内存 Python环境 conda / PyTorch 安装vLLM pip / 源码编译 启动服务 API Server 验证部署 curl / Python 性能调优 批处理 / 显存优化 生产部署 Docker / 负载均衡 本章重点:从硬件检查到服务验证,走通vLLM部署全流程 关键指标:显存利用率 ≥ 90% | 首token延迟 < 500ms | 吞吐量 ≥ 1000 tokens/s

这张图把整个流程串起来了。你会发现,从硬件到部署,每一步都影响最终的性能。尤其是显存利用率和批处理大小,这两个参数直接决定了你的吞吐量能到多少。

好了,环境搭好了,服务也跑起来了。下一章我会带你深入vLLM的批处理策略,看看它是怎么把GPU的算力压榨到极致的。


公众号:蓝海资料掘金营,微信deep3321