vLLM部署基础:从安装到第一个请求

说实话,很多人一上来就问我:「vLLM到底怎么部署?」。我的回答通常是——先别急着跑模型,把基础打牢再说。这一章,我就带你走一遍vLLM的完整部署流程。从安装配置,到启动服务,再到发送第一个请求。每一步我都会穿插一些我在生产环境中踩过的坑。

vLLM的安装与配置

安装vLLM其实不复杂,但有几个关键点要注意。我个人习惯用Python 3.10以上的版本,因为vLLM对3.8以下的支持已经不太好了。

# 推荐使用虚拟环境
python -m venv vllm_env
source vllm_env/bin/activate

# 安装vLLM
pip install vllm

# 如果你有GPU,建议安装带CUDA支持的版本
pip install vllm[cuda]

嗯,这里要注意。我曾经在一个客户的服务器上直接pip install,结果装了半天发现CUDA版本不匹配。后来我学乖了,安装前先检查一下环境:

# 检查CUDA版本
nvidia-smi
# 或者
nvcc --version
⚠️ 避坑指南: 我曾经因为CUDA 11.8和vLLM要求的12.1不匹配,折腾了整整一个下午。建议直接用官方推荐的CUDA版本。

启动API服务

安装完成后,启动服务就简单了。vLLM提供了一个非常方便的启动命令。我个人习惯用这种方式:

python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-2-7b-chat-hf \
    --port 8000 \
    --host 0.0.0.0 \
    --tensor-parallel-size 1

你想想看,这个命令其实做了几件事:加载模型、初始化推理引擎、启动HTTP服务。我建议第一次启动时加上--verbose参数,这样能看到详细的加载日志。

💡 小技巧: 如果你在本地测试,可以把--host改成127.0.0.1,这样更安全。生产环境再改成0.0.0.0

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

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

基础请求测试

服务启动后,我们来发第一个请求。我习惯用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
    }'

返回结果大概长这样:

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

看到这个返回,说明你的vLLM服务已经跑起来了。我记得第一次成功返回时,心里还挺激动的——毕竟从零到一,这一步很关键。

理解vLLM的请求处理流程

为什么我要强调理解请求处理流程?因为只有懂了内部机制,你才能做好安全防护和鉴权。说白了,vLLM的请求处理流程可以分成四个阶段:

  1. 请求接收:HTTP服务器(默认是Uvicorn)接收请求
  2. 请求解析:vLLM解析请求体,验证参数合法性
  3. 推理执行:模型实际进行推理计算
  4. 响应返回:将推理结果序列化后返回给客户端

我画了一张流程图,帮你更直观地理解这个过程:

vLLM请求处理流程 请求接收 Uvicorn HTTP Server 请求解析 参数验证 & 鉴权 推理执行 模型推理计算 响应返回 序列化 & 返回 持续处理下一个请求 🔒 安全防护 & 鉴权介入点

从这张图你能看到,安全防护和鉴权其实是在「请求解析」阶段介入的。我建议你在这一步做三件事:

  • 身份验证:检查请求是否携带有效的API Key
  • 权限校验:确认该用户是否有权访问这个模型
  • 请求限流:防止单个用户过度使用资源

🔑 核心要点: vLLM的请求处理流程是线性的,每个阶段都可能成为性能瓶颈。安全防护最好放在请求解析阶段,这样可以在进入推理前就拦截非法请求,节省宝贵的GPU资源。

我记得有一次在生产环境,因为没有在请求解析阶段做限流,结果一个用户发了大量请求直接把GPU显存打满了。从那以后,我每次部署都会在请求解析阶段加上限流和鉴权。

好了,这一章的内容就到这里。你掌握了vLLM的安装、启动和基础请求测试,也理解了请求处理流程。下一章我们会深入安全防护的具体实现。


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