文章

生产部署与运维

生产部署与运维

把模型跑通 localhost 只是第一步。生产要的是:可水平扩展、可观测、可恢复、成本可控、安全可控。本文覆盖 Docker/K8s 部署、API 网关、监控、扩缩容、安全。


一、单机 Docker 部署 vLLM

# 直接用官方镜像
docker run --gpus all --shm-size=1g -p 8000:8000 \
  -v /models:/models \
  vllm/vllm-openai:latest \
  --model /models/Qwen2.5-7B-Instruct \
  --tensor-parallel-size 1 \
  --gpu-memory-utilization 0.90 \
  --enable-prefix-caching
  • --shm-size 给 PagedAttention 的 block 表足够共享内存
  • --gpus all 需 nvidia-container-toolkit

二、K8s 部署(生产形态)

2.1 基础 Deployment + Service

apiVersion: apps/v1
kind: Deployment
metadata: { name: vllm-7b }
spec:
  replicas: 2
  template:
    spec:
      containers:
      - name: vllm
        image: vllm/vllm-openai:latest
        args: ["--model","Qwen/Qwen2.5-7B-Instruct","--tensor-parallel-size","1"]
        resources:
          limits: { nvidia.com/gpu: 1, memory: 32Gi }
        ports: [{ containerPort: 8000 }]
        readinessProbe:
          httpGet: { path: /health, port: 8000 }
---
apiVersion: v1
kind: Service
metadata: { name: vllm-7b-svc }
spec:
  selector: { app: vllm-7b }
  ports: [{ port: 80, targetPort: 8000 }]

2.2 GPU 调度要点

  • GPU 资源声明 nvidia.com/gpu: 1(扩展器按卡分配)
  • 多卡 TP 必须 同节点(TP 走 NVLink),用 nodeSelectorpodAntiAffinity 的反面约束到单节点
  • 长上下文/高并发要 大显存卡(H100 80GB / A100 80GB)
  • 节点断电/驱逐:模型权重在本地或 PVC,重启后需重新加载(冷启动慢,建议预热)

2.3 进阶:GPU Operator + MIG

  • MIG(A100/H100)把一张卡切成多个实例,适合小模型多副本隔离
  • 配合 Cilium 做 Pod 网络策略与可观测

三、统一 API 网关(多模型/多引擎)

多个模型/引擎共存时,用网关做路由、限流、鉴权、fallback:

网关特点
LiteLLM统一 OpenAI 格式,路由到 vLLM/SGLang/云厂商,含预算/限流
Higress / APISIX云原生网关,插件化限流/鉴权/灰度
自研 Envoy最灵活,但成本高
# LiteLLM 路由示例
model_list:
  - model_name: qwen-7b
    litellm_params: { model: "openai/qwen2.5-7b", api_base: "http://vllm-7b-svc:80" }
  - model_name: qwen-72b
    litellm_params: { model: "openai/qwen2.5-72b", api_base: "http://vllm-72b-svc:80" }
router_settings: { enable_pre_call_checks: true, max_parallel_requests: 100 }

四、关键监控指标

4.1 业务指标(SLO 核心)

指标含义告警建议
TTFT首 token 延迟p99 > 2s 告警
TPOT每 token 间隔p99 > 100ms 告警
Throughput总 token/s低于基线 70% 查因
Queue length排队请求数持续 > 0 说明容量不足
Error rate5xx 比例> 1% 告警

4.2 资源指标

  • vllm:gpu_cache_usage_sys:KV Cache 占用(>0.9 危险,见 KV Cache 原理与 PagedAttention
  • vllm:num_preemptions:抢占次数(>0 说明 KV 不够)
  • DCGM_FI_PROF_GPU_UTIL:GPU 利用率
  • DCGM_FI_PROF_DRAM_ACTIVE:HBM 带宽利用率(decode 瓶颈信号)

4.3 采集链路

vLLM /metrics → Prometheus → Grafana 看板
DCGM-exporter → Prometheus(GPU 指标)
Hubble (若 Cilium) → 网络层可观测

五、自动扩缩容

LLM 服务扩缩比普通服务难(模型大、冷启动慢):

方案A:固定副本 + 队列缓冲
  → 简单,适合流量平稳;波峰靠排队吸收

方案B:基于 GPU 利用率 / 队列长度 HPA
  → K8s HPA 自定义指标:queue_length > N 扩副本
  → 冷启动慢(加载权重 10-60s),需预热或缩容保护

方案C:分离式 + 独立扩缩 prefill/decode 池
  → 见 [[高并发调度与吞吐优化]],弹性最佳但架构复杂

实践建议:按”模型大小”分组部署(小模型多副本易扩、大模型少副本稳),配合网关限流兜底。


六、成本控制

杠杆做法
量化权重 INT4/FP8(见 LLM 推理量化部署)降显存 → 可用更小/更少卡
复用Prefix Cache 降重复 prefill 算力
调度低谷缩容、spot 实例跑非核心
路由简单任务路由小模型,省大模算力
能效关注 tokens/watt(见 推理性能基准测试与调优

七、安全

风险措施
未授权调用API 网关鉴权(key/OAuth)、网络策略隔离
提示注入/越权输入校验、输出过滤、权限最小化
资源滥用限流(per-key RPM/TPM)、max_tokens 上限
模型文件篡改权重签名校验、私有模型仓库 + 镜像扫描
数据泄露请求日志脱敏、不落盘用户 prompt

K8s 安全加固Cilium 网络策略 联动,构成推理服务的纵深防御。


关联知识

参考资源

学习时间

阶段时间备注
内容创建2026-07-20Docker/K8s 部署、API 网关、监控指标、扩缩容、成本、安全

状态标记

📖 已掌握 — K8s 部署形态、网关路由、监控指标、扩缩容难点、安全要点 📝 待补充 — Helm chart 实例、KServe/Triton 集成、spot 实例实战