实战指南:如何在Kubernetes集群中用vLLM和SGLang部署多模型推理服务(附完整YAML)
·
Kubernetes集群中vLLM与SGLang多模型推理服务实战指南
1. 生产级多模型推理架构设计
在Kubernetes集群中部署多模型推理服务需要解决三个核心问题:动态路由、资源隔离和弹性扩展。与单机部署不同,分布式环境需要考虑网络延迟、GPU资源调度和故障恢复等复杂因素。
典型架构拓扑:
Client → Ingress → Router Service → Model Pods (vLLM/SGLang) → Persistent Storage
关键组件选型建议:
- 路由层:采用Nginx+OpenResty或Traefik实现动态路由
- 编排层:使用Kubernetes原生LeaderWorkerSet管理分布式工作负载
- 监控体系:Prometheus-Operator采集GPU利用率/请求延迟指标
资源分配策略对比:
| 策略类型 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| 静态分区 | 模型规模固定 | 隔离性好 | 资源利用率低 |
| 动态共享 | 流量波动大 | 弹性高 | 存在干扰风险 |
| 混合模式 | 生产推荐方案 | 平衡性能与隔离 | 配置复杂 |
提示:实际部署时应根据模型显存需求预留20%缓冲,避免OOM导致Pod重启
2. 基于ACK的分布式部署实践
2.1 基础设施准备
首先创建持久化存储卷,以阿里云OSS为例:
# pv-oss.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: llm-model-pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadOnlyMany
csi:
driver: ossplugin.csi.alibabacloud.com
volumeHandle: model-storage
volumeAttributes:
bucket: "your-bucket"
url: "oss-cn-hangzhou-internal.aliyuncs.com"
path: "/Qwen3-32B/"
挂载模型到容器时需注意:
- 使用
ReadOnlyMany访问模式 - 设置
sizeLimit限制内存盘大小 - 配置
emptyDir作为共享内存缓存
2.2 vLLM多机部署配置
使用LeaderWorkerSet实现张量并行:
# vllm-leader-workerset.yaml
apiVersion: leaderworkerset.x-k8s.io/v1
kind: LeaderWorkerSet
metadata:
name: vllm-32b
spec:
replicas: 2 # 两个计算组
leaderWorkerTemplate:
size: 2 # 每组2个Pod(TP=2)
leaderTemplate:
spec:
containers:
- name: vllm
image: vllm/vllm-openai:v0.3.0
command:
- sh
- -c
- |
vllm serve /models/Qwen3-32B \
--tensor-parallel-size=2 \
--gpu-memory-utilization=0.8 \
--max-num-batched-tokens=4096
resources:
limits:
nvidia.com/gpu: "1"
关键参数说明:
--tensor-parallel-size:必须与组内Pod数一致--gpu-memory-utilization:建议设为0.7-0.9--max-num-batched-tokens:根据显存调整
2.3 SGLang动态路由方案
SGLang原生支持多模型路由,部署示例如下:
# 启动路由服务
python -m sglang_router.launch_router --port 30000
# 启动模型实例(不同节点)
python -m sglang.launch_server \
--model-path /models/Qwen3-32B \
--tp 2 \
--nnodes 2 \
--node-rank 0 # 另一节点设为1
对应的Kubernetes Service配置:
apiVersion: v1
kind: Service
metadata:
name: sglang-router
spec:
ports:
- port: 30000
targetPort: 30000
selector:
app: sglang-router
3. 性能优化技巧
3.1 GPU参数调优
关键指标监控:
# 查看GPU利用率
nvidia-smi --query-gpu=utilization.gpu,memory.used \
--format=csv -l 5
推荐启动参数组合:
| 场景 | vLLM参数 | SGLang参数 |
|---|---|---|
| 高吞吐 | --max-parallel-loading 4 | --max-concurrency 32 |
| 低延迟 | --disable-log-stats | --prefetch-factor 1 |
| 长文本 | --max-model-len 8192 | --context-length 8192 |
3.2 自适应批处理配置
动态批处理能显著提升吞吐量,建议:
# 客户端请求示例
import openai
client = openai.Client(base_url="http://router:30000")
response = client.chat.completions.create(
model="Qwen3-32B",
messages=[...],
extra_body={
"batch_size": "auto", # 启用动态批处理
"priority": "high" # 关键请求优先
}
)
4. 完整部署示例
4.1 组合部署YAML
# multi-model-deployment.yaml
apiVersion: apps/v1/v1
kind: Deployment
metadata:
name: model-router
spec:
template:
spec:
containers:
- name: router
image: nginx:1.25
volumeMounts:
- mountPath: /etc/nginx/conf.d
name: config
volumes:
- name: config
configMap:
name: routing-rules
---
apiVersion: v1
kind: ConfigMap
metadata:
name: routing-rules
data:
model-router.conf: |
server {
location /v1/completions {
set $target "";
if ($arg_model = "Qwen") {
set $target "vllm-service:8000";
}
if ($arg_model = "DeepSeek") {
set $target "sglang-service:30000";
}
proxy_pass http://$target;
}
}
4.2 自动化扩缩容策略
配置HPA实现基于GPU利用率的自动扩缩:
# 创建HPA规则
kubectl autoscale deployment vllm-deploy \
--min=2 --max=10 \
--cpu-percent=60 \
--metrics=nvidia.com/gpu:60%
5. 故障排查指南
常见问题及解决方案:
-
OOM错误:
- 检查
--gpu-memory-utilization设置 - 减少
--max-num-batched-tokens - 启用
--swap-space参数
- 检查
-
路由失败:
- 验证Service的selector标签
- 检查Nginx的
$arg_model变量传递
-
性能下降:
- 使用
nsys profile进行GPU内核分析 - 检查PCIe带宽是否成为瓶颈
- 使用
# 诊断命令示例
kubectl exec -it pod/vllm-pod -- \
nsys profile --stats=true python -m vllm.entrypoints.api_server
更多推荐
所有评论(0)