用途
本技能用于在 Kubernetes 上以生产级方式部署机器学习模型,核心工具为 KServe(原 KFServing)与 NVIDIA Triton Inference Server。适用场景包括:规模化服务 scikit-learn、PyTorch、TensorFlow 或 ONNX 模型;为 ML 模型实现金丝雀发布与 A/B 测试;基于请求速率或 GPU 指标对推理 Pod 自动扩缩容;在 Kubernetes 上使用 Triton 或 KServe 部署 LLM;通过流量拆分管理多个模型版本。
前置条件
- Kubernetes 1.28+,且具备 GPU 节点
- 已安装 KServe(或独立部署 Triton)
- 已配置 kubectl 与 helm
- 集群已安装 NVIDIA GPU Operator
主要能力
KServe 安装
通过 Helm 安装 KServe:
helm repo add kserve https://kserve.github.io/helm-charts
helm repo update
helm install kserve kserve/kserve \
--namespace kserve \
--create-namespace \
--set kserve.controller.gateway.ingressGateway.className=nginx
# 验证
kubectl get pods -n kserve
kubectl get crd | grep kserve
基础 InferenceService
定义并部署一个 sklearn 模型的 InferenceService,包含存储路径与资源请求/限制,随后可获取推理服务 URL 并发送预测请求。
GPU 启用的 LLM InferenceService
通过自定义容器(如 vllm/vllm-openai)部署 LLM,配置 GPU 资源请求与限制、就绪探针、Hugging Face Token 环境变量以及 GPU 节点选择器。
金丝雀部署(流量拆分)
在 InferenceService 中设置 canaryTrafficPercent 控制新版本流量比例,可通过 kubectl patch 逐步提升金丝雀流量,或移除该字段将金丝雀提升为稳定版本。
使用 KEDA 自动扩缩容
通过 ScaledObject 定义基于 Prometheus 指标的扩缩容策略,设置最小/最大副本数及触发阈值。
NVIDIA Triton Inference Server
以 Deployment 方式部署 Triton,配置模型仓库(如 S3)、模型控制模式(poll 自动加载新版本)、轮询间隔、指标端口、HTTP/gRPC 端口、GPU 资源与就绪探针。
Triton 模型仓库结构
模型仓库按模型名与版本号组织目录,每个模型包含 config.pbtxt 与版本子目录。config.pbtxt 可定义后端、最大批大小、动态批处理、输入输出张量及 GPU 实例组。
模型管理命令
提供 Triton 的模型列表、加载新版本、卸载模型等 HTTP 接口调用方式,以及 KServe 的 rollout 状态查看命令。
使用方式
按照技能文档中的 YAML 清单与命令逐步操作:先安装 KServe 或部署 Triton,再定义 InferenceService 或 Triton Deployment,最后通过 kubectl apply、curl 或 kubectl patch 进行部署、预测与流量调整。
适用场景
- 需要将训练好的模型以 API 形式对外提供推理服务
- 需要灰度发布与快速回滚模型版本
- 需要根据负载自动调整推理副本数量
- 需要在 GPU 集群上高效运行 LLM 或传统 ML 模型
限制与常见问题
文档列出常见问题及修复方式:InferenceService 未就绪(模型加载或 OOM,检查日志并提高内存限制);金丝雀卡在 0%(KNative 路由问题,检查 ksvc);Triton 缺少模型(S3 权限或路径问题,验证 IAM 角色与 model-store 路径);GPU 利用率低(未启用动态批处理,在 Triton 配置中启用);自动扩缩容未触发(Prometheus 查询错误,在 Prometheus UI 中测试查询)。
最佳实践
- 所有模型更新使用金丝雀部署,指标恶化时可在数秒内回滚
- 启用 Triton 动态批处理,小模型可提升 GPU 吞吐 5–10 倍
- 将模型存储在 S3/GCS 并使用版本化路径
- 固定 GPU 节点选择器,防止模型 Pod 落到仅 CPU 节点
- 金丝雀发布期间监控每个模型版本的 p99 延迟与错误率
相关技能
vllm-server(vLLM 用于 LLM 服务)、llm-inference-scaling(KEDA 自动扩缩容)、kubernetes-ops(核心 Kubernetes 操作)、gpu-server-management(GPU 节点)。