vLLM 是高性能大语言模型推理引擎,结合 Kubernetes 编排能力,可实现高效、弹性、可观测的 AI 推理服务。本文系统梳理 vLLM 在 K8s 环境下的部署架构、配置优化、服务暴露、监控扩缩容及最佳实践,助力构建可扩展的 LLM 推理平台。
vLLM 是专为大语言模型推理场景设计的高性能库,支持 PagedAttention、连续批处理、量化等多项优化技术,兼容 OpenAI API,具备分布式扩展能力和智能资源管理。
在 Kubernetes 中部署 vLLM 可实现弹性扩缩容与高可用,支持单节点和多 GPU 分布式场景。
适用于小规模推理服务,配置简单,便于快速上线。
apiVersion: apps/v1
kind: Deployment
metadata:
name: vllm-deployment
spec:
replicas: 1
selector:
matchLabels:
app: vllm
template:
metadata:
labels:
app: vllm
spec:
containers:
- name: vllm
image: vllm/vllm-openai:latest
command:
- python
- -m
- vllm.entrypoints.openai.api_server
args:
- --model
- meta-llama/Llama-2-7b-chat-hf
- --tensor-parallel-size
- "1"
- --host
- "0.0.0.0"
- --port
- "8000"
ports:
- containerPort: 8000
resources:
limits:
nvidia.com/gpu: 1
memory: 16Gi
cpu: 4
requests:
nvidia.com/gpu: 1
memory: 16Gi
cpu: 4
env:
- name: HUGGING_FACE_HUB_TOKEN
valueFrom:
secretKeyRef:
name: hf-token
key: token
结合 Ray 等分布式框架,提升推理吞吐与模型规模。
args:
- --model
- meta-llama/Llama-2-13b-chat-hf
- --tensor-parallel-size
- "2"
- --pipeline-parallel-size
- "1"
- --host
- "0.0.0.0"
- --port
- "8000"
resources:
limits:
nvidia.com/gpu: 2
requests:
nvidia.com/gpu: 2
合理配置 vLLM 参数可显著提升性能与资源利用率。
--quantization awq--max-num-seqs 128--cpu-offload-gb 8--enable-chunked-prefill true--max-num-batched-tokens 4096--block-size 16--quantization gptq--quantization-param-path quant_config.jsonKubernetes 支持多种服务暴露方式,便于集群内外访问 vLLM 推理接口。
通过 ClusterIP 服务实现集群内访问。
apiVersion: v1
kind: Service
metadata:
name: vllm-service
spec:
selector:
app: vllm
ports:
- name: http
port: 80
targetPort: 8000
type: ClusterIP
通过 Ingress 实现域名访问和外部流量入口。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: vllm-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: vllm.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: vllm-service
port:
number: 80
vLLM 支持 Prometheus 指标,便于集群监控与性能分析。
vllm:request_latency_secondsvllm:gpu_utilizationvllm:gpu_memory_used_bytesvllm:queue_size通过 ConfigMap 配置 Prometheus 自动抓取 vLLM 指标。
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-config
data:
prometheus.yml: |
scrape_configs:
- job_name: 'vllm'
static_configs:
- targets: ['vllm-service:8000']
结合 HPA 实现 vLLM 服务的弹性伸缩,提升资源利用率。
根据队列长度等外部指标自动扩容。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: vllm-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: vllm-deployment
minReplicas: 1
maxReplicas: 5
metrics:
- type: External
external:
metric:
name: vllm_queue_size
selector:
matchLabels:
app: vllm
target:
type: Value
value: "10"
为保障 vLLM 服务稳定高效,建议结合以下运维策略。
通过 Pod 生命周期钩子预热模型,减少首次请求延迟。
lifecycle:
postStart:
exec:
command:
- python
- -c
- |
import requests
import time
time.sleep(10)
requests.post('http://localhost:8000/v1/chat/completions',
json={
"model": "llama2",
"messages": [{"role": "user", "content": "Hello"}],
"max_tokens": 10
})
合理设置 readiness/liveness probe,提升服务可用性。
readinessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
livenessProbe:
httpGet:
path: /health
port: 8000
initialDelaySeconds: 60
periodSeconds: 30
timeoutSeconds: 10
--api-key ${API_KEY}--max-concurrent-requests 100常见问题及排查建议:
调试技巧:
# 查看 vLLM 日志
kubectl logs -f deployment/vllm-deployment
# 检查 GPU 状态
kubectl exec -it pod/vllm-pod -- nvidia-smi
# 测试 API
kubectl port-forward svc/vllm-service 8000:80
curl http://localhost:8000/v1/models
vLLM 是在 Kubernetes 环境下部署大语言模型推理服务的高效方案。通过合理配置与优化,结合 K8s 的编排、监控和弹性扩缩容能力,可构建高性能、可扩展的 AI 推理平台,满足多样化业务需求。