模型部署与服务化
问题
如何将训练好的 LLM 部署为生产服务?有哪些主流推理引擎和服务化方案?
答案
一、主流推理引擎对比
| 引擎 | 维护方 | 特点 | 适用 |
|---|---|---|---|
| vLLM | UC Berkeley | PagedAttention,高吞吐 | 通用 LLM 推理 |
| TGI | Hugging Face | 易部署,HF 生态 | HF 模型推理 |
| TensorRT-LLM | NVIDIA | 极致优化,NVIDIA 专属 | 高性能生产 |
| Ollama | 社区 | 一键本地运行 | 开发测试 |
| llama.cpp | 社区 | CPU 推理,GGUF 格式 | 端侧/低资源 |
二、vLLM 部署
# 安装
pip install vllm
# 启动 API 服务(OpenAI 兼容)
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-8B-Instruct \
--tensor-parallel-size 1 \
--max-model-len 8192 \
--port 8000
# 客户端调用(兼容 OpenAI SDK)
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="none")
response = client.chat.completions.create(
model="meta-llama/Llama-3.1-8B-Instruct",
messages=[{"role": "user", "content": "你好"}],
stream=True,
)
vLLM 核心优势
- PagedAttention:KV Cache 分页管理,显存利用率提升 2-4 倍
- Continuous Batching:动态批处理,吞吐量提升 5-24 倍
- OpenAI 兼容 API:无需改代码即可替换 OpenAI
三、Docker 部署
docker-compose.yml
services:
vllm:
image: vllm/vllm-openai:latest
ports: ["8000:8000"]
volumes:
- ./models:/root/.cache/huggingface
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
command: >
--model meta-llama/Llama-3.1-8B-Instruct
--max-model-len 8192
四、生产部署架构
五、Kubernetes 部署
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: llm-server
spec:
replicas: 2
template:
spec:
containers:
- name: vllm
image: vllm/vllm-openai:latest
args:
- "--model"
- "meta-llama/Llama-3.1-8B-Instruct"
resources:
limits:
nvidia.com/gpu: 1
ports:
- containerPort: 8000
常见面试问题
Q1: vLLM 的 PagedAttention 是什么?
答案:
- 传统推理为每个请求预分配连续显存存 KV Cache,浪费严重(平均 60-80% 显存浪费)
- PagedAttention 借鉴 OS 虚拟内存的分页思想,将 KV Cache 分成固定大小的 block
- 不同请求的 block 可以不连续存储,按需分配和释放
- 显存利用率接近 100%,同时服务的请求数大幅提升
Q2: 如何选择推理引擎?
答案:
- 快速验证:Ollama(一行命令部署)
- 通用生产:vLLM(性能好、OpenAI 兼容、社区活跃)
- HF 生态:TGI(与 Hugging Face Hub 无缝集成)
- 极致性能:TensorRT-LLM(NVIDIA 专属优化,但配置复杂)
- CPU/端侧:llama.cpp(GGUF 格式,无需 GPU)