14.3 推理服務雲原生部署:vLLM / Triton + K8s#
推理服務和普通微服務有何不同#
普通服務擴縮看 CPU;推理服務看 KV 快取、顯存、首 Token 延遲(TTFT)與輸出吞吐(TPS)。模型載入要幾十秒甚至幾分鐘,啟動探針、滾動策略都得重寫——拿部署 Nginx 的方式部署大模型,一定翻車。
flowchart LR
REQ[推理請求] --> SVC[Service/網關]
SVC --> VLLM[vLLM Pods<br/>PagedAttention 高吞吐]
SVC --> TRI[Triton Pods<br/>多框架多模型]
VLLM --> GPU[GPU 節點池]
TRI --> GPU
MODEL[(模型倉<br/>NAS/OSS)] -.啟動時載入.-> VLLMvLLM vs Triton:怎麼選#
| 维度 | vLLM | Triton Inference Server |
|---|---|---|
| 定位 | LLM 專用推理引擎 | 通用推理伺服器(LLM/視覺/排序都可) |
| 殺手鐧 | PagedAttention、連續批處理 | 多框架(TensorRT/ONNX/PyTorch)、多模型併跑 |
| 協議 | OpenAI 相容 API | KServe/HTTP/gRPC 標準協議 |
| 適用 | 對話、導購、客服 LLM | 搜推排序、向量化、多模型混合 |
# vLLM 上 K8s:OpenAI 相容接口 + 顯存與探針調優
apiVersion: apps/v1
kind: Deployment
metadata:
name: vllm-qwen
namespace: ai
spec:
replicas: 2
template:
spec:
nodeSelector: {workload: gpu}
containers:
- name: vllm
image: registry/shop/vllm:0.6-qwen2-7b
args:
- --model=/models/qwen2-7b
- --gpu-memory-utilization=0.85
- --max-model-len=8192
ports: [{containerPort: 8000}]
resources:
limits: {nvidia.com/gpu: 1}
startupProbe: # 模型載入慢,啟動寬限給足
httpGet: {path: /health, port: 8000}
failureThreshold: 60
periodSeconds: 10
readinessProbe:
httpGet: {path: /health, port: 8000}
periodSeconds: 10
# 冒煙測試:OpenAI 協議直接調
curl http://vllm-qwen.ai:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{"model":"/models/qwen2-7b","prompt":"介紹一下","max_tokens":50}'
# 關鍵指標:TTFT、TPS、排隊長度(接 Prometheus)
curl http://vllm-qwen.ai:8000/metrics | grep vllm:
部署要點:模型、擴縮、發布#
- 模型載入:鏡像只裝引擎,模型放共享儲存(NAS/OSS)掛載或 initContainer 預拉;多副本共用只讀卷,避免每 Pod 下一份。
- 擴縮看排隊不用 CPU:HPA 自訂指標(等待隊列長度、TTFT),或 KEDA 按 Prometheus 指標;突發用 AI 網關排隊+限流擋一層(見 16.1)。
- 發布用權重切流:新模型先 5% 驗證生成品質(結合 15.2 評估),再全量;回滾 = 切回舊 Revision。
本章小結#
- 推理是「有狀態的重服務」:看顯存/KV 快取/TTFT,不看 CPU
- vLLM 專精 LLM 吞吐,Triton 通吃多框架多模型
- 三要點:模型與引擎分離、按排隊擴縮、權重發布+品質評估
- 探針寬限、GPU 節點親和缺一不可
想一想#
- 為什麼推理 Deployment 的 startupProbe 要給 10 分鐘寬限?模型載入發生了什麼?
- 用 CPU 利用率給 vLLM 做 HPA 會出什麼問題?應該看什麼指標?
- 新模型上線只驗「能跑通」夠嗎?生成品質該怎麼驗、誰來驗?