AI Infra实战03:vLLM部署实战——跑通第一个大模型推理服务

在这里插入图片描述

本篇目标

在真实GPU环境中部署vLLM推理服务,成功让大模型对外提供API。这是AI Infra工程师最核心的技能之一。

学完本篇你将掌握:

  • vLLM是什么、为什么快
  • 模型下载和加载
  • vLLM推理服务启动
  • OpenAI兼容API的使用(对话、流式输出、System角色)
  • 常见报错处理

实操环境

配置
平台AutoDL
GPUTesla T4(16GB显存)
CPU8核 Xeon
内存56GB
系统盘50GB
驱动550.107.02
CUDA12.4
镜像vllm-project/vllm/VLLM_simple(PyTorch 2.6)
vLLM版本0.10.1.1
模型Qwen2-1.5B-Instruct
费用0.78元/小时,本篇实操约1元

什么是vLLM

vLLM是一个高性能的大模型推理引擎,专门优化LLM的推理速度。

为什么比普通推理快:

技术作用
PagedAttention像操作系统管理内存一样管理KV Cache,减少显存浪费
Continuous Batching多个请求合并在GPU上并行计算,不用等一个完了再算下一个
高效显存管理动态分配显存,同样的GPU能服务更多并发

简单理解: 普通推理是一个请求一个请求排队处理,vLLM是把多个请求"打包"到GPU上一起算。


架构图

客户端(curl/应用/前端)
        │
        ▼ HTTP请求(OpenAI兼容格式)
┌─────────────────────────────┐
│     vLLM API Server         │  ← 端口8000
│     (/v1/chat/completions)  │
└──────────────┬──────────────┘
               │
               ▼
┌─────────────────────────────┐
│     vLLM推理引擎             │
│  - PagedAttention           │
│  - Continuous Batching      │
│  - KV Cache管理             │
└──────────────┬──────────────┘
               │
               ▼
┌─────────────────────────────┐
│     GPU(Tesla T4 16GB)     │
│     模型权重 + KV Cache      │
└─────────────────────────────┘

完整操作步骤

Step 1:验证GPU可用

nvidia-smi

输出:

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.107.02             Driver Version: 550.107.02     CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
|   0  Tesla T4                       On  |   00000000:00:06.0 Off |                    0 |
| N/A   48C    P0             26W /   70W |       0MiB /  15360MiB |      0%      Default |
+-----------------------------------------+------------------------+----------------------+

确认:Tesla T4、15360MiB显存、CUDA 12.4 ✅

Step 2:确认vLLM已安装

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

输出:0.10.1.1

Step 3:下载模型

# 设置HuggingFace镜像(国内网络无法直连HuggingFace)
export HF_ENDPOINT=https://hf-mirror.com

# 下载Qwen2-1.5B-Instruct模型(约3GB)
hf download Qwen/Qwen2-1.5B-Instruct --local-dir /root/models/Qwen2-1.5B-Instruct

⚠️ 踩坑记录: 直接下载会报 ConnectTimeout,因为AutoDL在国内无法直连 huggingface.co。解决方案:设置 HF_ENDPOINT=https://hf-mirror.com 使用国内镜像。

下载约2-3分钟完成。

Step 4:启动vLLM推理服务

vllm serve /root/models/Qwen2-1.5B-Instruct --host 0.0.0.0 --port 8000

⚠️ 踩坑记录: 首次启动报错 ImportError: flash_attn_2_cuda...undefined symbol。原因是T4(Turing架构,compute capability 7.5)不支持FlashAttention-2。解决方案:

pip uninstall flash-attn -y

卸载flash-attn后重新启动即可。vLLM会自动fallback到XFormers后端。

启动成功日志:

INFO: Using XFormers backend.
INFO: Started server process [1278]
INFO: Application startup complete.

看到 Application startup complete 说明服务就绪。

Step 5:发起推理请求(另开终端)

基本对话:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "/root/models/Qwen2-1.5B-Instruct",
    "messages": [
      {"role": "user", "content": "你好,请用一句话介绍你自己"}
    ],
    "max_tokens": 100
  }'

返回:

{
  "choices": [{
    "message": {
      "role": "assistant",
      "content": "我是你的AI助手,致力于帮助你解答问题、提供信息和完成任务。"
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 18,
    "total_tokens": 43
  }
}

推理成功! 🎉


API功能演示

1. System角色设定

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "/root/models/Qwen2-1.5B-Instruct",
    "messages": [
      {"role": "system", "content": "你是一个DevOps专家"},
      {"role": "user", "content": "K8s中Pod一直Pending怎么排查?"}
    ],
    "max_tokens": 200
  }'

模型会以DevOps专家的角色回答,列出资源限制、网络问题等排查思路。

2. Temperature控制(创意程度)

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "/root/models/Qwen2-1.5B-Instruct",
    "messages": [
      {"role": "user", "content": "给我的技术博客起5个标题,主题是GPU监控"}
    ],
    "temperature": 0.9,
    "max_tokens": 200
  }'
  • temperature=0:每次回答相同(确定性)
  • temperature=0.9:更有创意和多样性

3. 流式输出(像ChatGPT一样逐字返回)

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "/root/models/Qwen2-1.5B-Instruct",
    "messages": [
      {"role": "user", "content": "解释什么是NAT Gateway,用小学生能听懂的方式"}
    ],
    "max_tokens": 150,
    "stream": true
  }'

"stream": true 后返回格式变为SSE(Server-Sent Events),逐token返回。前端可以实现"打字机"效果。

4. 查看模型信息

curl http://localhost:8000/v1/models

返回当前加载的模型名称和配置(max_model_len=32768等)。


API参数说明

参数类型说明
modelstring模型路径或名称
messagesarray对话消息列表(role: system/user/assistant)
max_tokensint最多生成多少token
temperaturefloat0-2,越高越随机
streambool是否流式返回
top_pfloat0-1,nucleus sampling
frequency_penaltyfloat重复惩罚

vLLM完全兼容OpenAI API格式——你用过ChatGPT的API的话,代码不用改,只要把URL从 api.openai.com 改成 localhost:8000 就行。


GPU显存分析

模型加载后查看显存:

nvidia-smi
# Memory-Usage: 11925MiB / 15360MiB
用途占用
模型权重(Qwen2-1.5B,float16)~3GB
KV Cache + vLLM运行时开销~9GB
剩余可用~3.4GB

T4的16GB显存运行1.5B模型绑绑有余。如果换7B模型大约需要14GB显存,T4也能勉强跑。


踩坑记录

问题1:HuggingFace下载超时

报错: ConnectTimeout: Connection to huggingface.co timed out

原因: AutoDL在国内,无法直连huggingface.co

解决:

export HF_ENDPOINT=https://hf-mirror.com

问题2:flash_attn报错

报错: ImportError: flash_attn_2_cuda...undefined symbol

原因: T4是Turing架构(compute capability 7.5),FlashAttention-2需要Ampere架构(8.0+)

解决:

pip uninstall flash-attn -y
# vLLM自动fallback到XFormers后端

问题3:huggingface-cli命令废弃提示

提示: Warning: 'huggingface-cli download' is deprecated. Use 'hf download' instead.

影响: 不影响执行,只是提示用新命令。可以直接用 hf download


延伸思考:面试常见问题

面试问题答案要点
vLLM为什么比普通推理快?PagedAttention管理KV Cache + Continuous Batching并行处理多请求
vLLM的API兼容什么格式?完全兼容OpenAI API格式,drop-in replacement
T4能跑多大的模型?16GB显存,float16下最大跑7B模型,int4量化可以跑13B
模型加载后显存怎么分配的?模型权重 + KV Cache + 运行时开销
什么是Continuous Batching?不等当前batch处理完就插入新请求,GPU利用率更高

费用说明

项目费用
AutoDL T4实例0.78元/小时
本篇实操时长约30分钟
总费用约0.4元

小结

本篇核心收获:

  1. vLLM一条命令启动推理服务vllm serve 模型路径
  2. 完全兼容OpenAI API:messages格式、stream输出、temperature控制
  3. 国内下载模型用镜像HF_ENDPOINT=https://hf-mirror.com
  4. T4不支持FlashAttention-2:卸载flash-attn让vLLM用XFormers
  5. 1.5B模型占用约12GB显存,T4(16GB)运行绰绰有余

下一篇预告

AI Infra实战04:vLLM生产化——性能调优与压测

下一篇我们将学习:

  • 串行vs并发性能对比
  • vLLM关键调优参数(max-model-len、gpu-memory-utilization)
  • 压测方法和吞吐量分析
  • Continuous Batching效果验证

参考链接

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐