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

本篇目标
在真实GPU环境中部署vLLM推理服务,成功让大模型对外提供API。这是AI Infra工程师最核心的技能之一。
学完本篇你将掌握:
- vLLM是什么、为什么快
- 模型下载和加载
- vLLM推理服务启动
- OpenAI兼容API的使用(对话、流式输出、System角色)
- 常见报错处理
实操环境
| 配置 | 值 |
|---|---|
| 平台 | AutoDL |
| GPU | Tesla T4(16GB显存) |
| CPU | 8核 Xeon |
| 内存 | 56GB |
| 系统盘 | 50GB |
| 驱动 | 550.107.02 |
| CUDA | 12.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参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
model | string | 模型路径或名称 |
messages | array | 对话消息列表(role: system/user/assistant) |
max_tokens | int | 最多生成多少token |
temperature | float | 0-2,越高越随机 |
stream | bool | 是否流式返回 |
top_p | float | 0-1,nucleus sampling |
frequency_penalty | float | 重复惩罚 |
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元 |
小结
本篇核心收获:
- vLLM一条命令启动推理服务:
vllm serve 模型路径 - 完全兼容OpenAI API:messages格式、stream输出、temperature控制
- 国内下载模型用镜像:
HF_ENDPOINT=https://hf-mirror.com - T4不支持FlashAttention-2:卸载flash-attn让vLLM用XFormers
- 1.5B模型占用约12GB显存,T4(16GB)运行绰绰有余
下一篇预告
AI Infra实战04:vLLM生产化——性能调优与压测
下一篇我们将学习:
- 串行vs并发性能对比
- vLLM关键调优参数(max-model-len、gpu-memory-utilization)
- 压测方法和吞吐量分析
- Continuous Batching效果验证
参考链接
更多推荐



所有评论(0)