跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Kubernetes AI 推理服务最佳实践

在 Kubernetes 上部署 AI 推理服务的最佳实践,包括 GPU 资源管理、TensorFlow Serving 和 Triton 部署、性能优化、自动扩缩容、监控及安全策略。通过配置 GPU 插件、模型存储及 HPA,实现高性能可靠服务。

LinuxPan发布于 2026/4/6更新于 2026/5/2333 浏览

Kubernetes AI 推理服务最佳实践

1. AI 推理服务核心概念

1.1 什么是 AI 推理服务

AI 推理服务是指将训练好的 AI 模型部署为可访问的服务,用于实时或批量处理推理请求。在 Kubernetes 环境中,AI 推理服务需要考虑资源管理、性能优化和高可用性。

1.2 常见的 AI 推理框架
  • TensorFlow Serving:Google 开源的机器学习模型服务框架
  • TorchServe:PyTorch 官方的模型服务框架
  • ONNX Runtime:微软开源的跨平台推理引擎
  • Triton Inference Server:NVIDIA 开源的高性能推理服务器

2. GPU 资源管理

2.1 安装 GPU 驱动和 NVIDIA Device Plugin
# 安装 NVIDIA 驱动(在节点上执行)
apt-get install -y nvidia-driver-535
# 安装 NVIDIA Device Plugin
kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.0/nvidia-device-plugin.yml
# 验证 GPU 资源
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.capacity.nvidia\.com/gpu}{"\n"}{end}'
2.2 GPU 资源分配

部署使用 GPU 的推理服务

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tensorflow-serving
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tensorflow-serving
  template:
    metadata:
      labels:
        app: tensorflow-serving
    spec:
      containers:
      - name: tensorflow-serving
        image: tensorflow/serving:latest
        ports:
        - containerPort: 8501
        resources:
          limits:
            nvidia.com/gpu: 1
          requests:
            nvidia.com/gpu: 1
        volumeMounts:
        - name: model-volume
          mountPath: /models
      volumes:
      - name: model-volume
        persistentVolumeClaim:
          claimName: model-pvc

3. TensorFlow Serving 部署

3.1 准备模型
# 下载示例模型
mkdir -p models/mnist/1
wget -O models/mnist/1/saved_model.pb https://storage.googleapis.com/download.tensorflow.org/models/official/20181001_resnet/savedmodels/resnet_v2_fp32_savedmodel_NHWC_jpg.tar.gz
# 创建模型存储
kubectl create -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: model-pvc
  namespace: default
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
EOF
3.2 部署 TensorFlow Serving

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tf-serving
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tf-serving
  template:
    metadata:
      labels:
        app: tf-serving
    spec:
      containers:
      - name: tf-serving
        image: tensorflow/serving:latest
        ports:
        - containerPort: 8500
        - containerPort: 8501
        env:
        - name: MODEL_NAME
          value: mnist
        volumeMounts:
        - name: model-volume
          mountPath: /models
      volumes:
      - name: model-volume
        persistentVolumeClaim:
          claimName: model-pvc

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: tf-serving
  namespace: default
spec:
  selector:
    app: tf-serving
  ports:
  - port: 8501
    targetPort: 8501
  type: LoadBalancer
# 部署服务
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
# 测试推理服务
MODEL_SERVICE=$(kubectl get svc tf-serving -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
curl -d '{"instances": [[[0.0 for _ in range(28)] for _ in range(28)]]}' -X POST http://$MODEL_SERVICE:8501/v1/models/mnist:predict

4. Triton Inference Server 部署

4.1 安装 Triton Inference Server

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: triton-server
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: triton-server
  template:
    metadata:
      labels:
        app: triton-server
    spec:
      containers:
      - name: triton-server
        image: nvcr.io/nvidia/tritonserver:23.08-py3
        ports:
        - containerPort: 8000
        - containerPort: 8001
        - containerPort: 8002
        resources:
          limits:
            nvidia.com/gpu: 1
          requests:
            nvidia.com/gpu: 1
        volumeMounts:
        - name: model-volume
          mountPath: /models
      volumes:
      - name: model-volume
        persistentVolumeClaim:
          claimName: model-pvc

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: triton-server
  namespace: default
spec:
  selector:
    app: triton-server
  ports:
  - port: 8000
    targetPort: 8000
  - port: 8001
    targetPort: 8001
  - port: 8002
    targetPort: 8002
  type: LoadBalancer
# 部署服务
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
# 检查服务状态
kubectl get pods -l app=triton-server

5. 性能优化

5.1 模型优化
  1. 模型量化:将模型从 FP32 量化为 INT8 或 FP16
  2. 模型剪枝:移除冗余的神经元和连接
  3. 模型蒸馏:使用大模型训练小模型
5.2 推理服务优化

配置批处理

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tf-serving-batched
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tf-serving-batched
  template:
    metadata:
      labels:
        app: tf-serving-batched
    spec:
      containers:
      - name: tf-serving
        image: tensorflow/serving:latest
        ports:
        - containerPort: 8501
        env:
        - name: MODEL_NAME
          value: mnist
        - name: TF_FORCE_GPU_ALLOW_GROWTH
          value: "true"
        - name: BATCH_SIZE
          value: "32"
        resources:
          limits:
            nvidia.com/gpu: 1
          requests:
            nvidia.com/gpu: 1
5.3 自动缩放

HPA 配置

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: tf-serving-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: tf-serving
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
    target:
      type: Utilization
      averageUtilization: 70
  - type: Resource
    resource:
      name: memory
    target:
      type: Utilization
      averageUtilization: 80

6. 监控与可观测性

6.1 监控配置

Prometheus 配置

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: tf-serving-monitor
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: tf-serving
  endpoints:
  - port: 8501
    path: /v1/monitoring/prometheus
    interval: 15s
6.2 日志管理

日志配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tf-serving
  namespace: default
spec:
  # ...
  template:
    spec:
      containers:
      - name: tf-serving
        image: tensorflow/serving:latest
        # ...
        env:
        - name: TF_CPP_MIN_LOG_LEVEL
          value: "0"
        - name: TF_ENABLE_GPU_GARBAGE_COLLECTION
          value: "true"
        args:
        - --model_name=mnist
        - --model_base_path=/models/mnist
        - --enable_batching=true
        - --batching_parameters_file=/models/batching_parameters.txt

7. 安全最佳实践

7.1 模型安全
  1. 模型加密:使用加密技术保护模型文件
  2. 访问控制:使用 RBAC 限制模型访问
  3. 模型版本管理:追踪模型版本和变更
7.2 网络安全

网络策略

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: ai-inference-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: tf-serving
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: api-gateway
    ports:
    - protocol: TCP
      port: 8501
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: monitoring
    ports:
    - protocol: TCP
      port: 9090

8. 实际应用场景

8.1 多模型部署

多模型配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: triton-multi-model
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: triton-multi-model
  template:
    metadata:
      labels:
        app: triton-multi-model
    spec:
      containers:
      - name: triton-server
        image: nvcr.io/nvidia/tritonserver:23.08-py3
        ports:
        - containerPort: 8000
        - containerPort: 8001
        - containerPort: 8002
        resources:
          limits:
            nvidia.com/gpu: 1
          requests:
            nvidia.com/gpu: 1
        volumeMounts:
        - name: model-volume
          mountPath: /models
      volumes:
      - name: model-volume
        persistentVolumeClaim:
          claimName: models-pvc
8.2 A/B 测试

A/B 测试配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ai-inference-ingress
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "20"
spec:
  rules:
  - host: inference.example.com
    http:
      paths:
      - path: /v1/models
        pathType: Prefix
        backend:
          service:
            name: tf-serving-v2
            port:
              number: 8501

9. 故障排查

9.1 常见问题解决
# 查看 GPU 使用情况
kubectl exec -it <pod-name> -- nvidia-smi
# 查看推理服务日志
kubectl logs -l app=tf-serving
# 检查模型状态
curl http://<service-ip>:8501/v1/models/mnist
# 测试推理服务
curl -d '{"instances": [[[0.0 for _ in range(28)] for _ in range(28)]]}' -X POST http://<service-ip>:8501/v1/models/mnist:predict
9.2 调试技巧
  1. 启用详细日志:设置 TF_CPP_MIN_LOG_LEVEL=0
  2. 使用 GPU 分析工具:nvidia-smi、nvprof
  3. 检查网络连接:确保服务可以正常访问
  4. 验证模型格式:确保模型格式正确

10. 总结

Kubernetes 为 AI 推理服务提供了强大的部署和管理能力。通过合理配置 GPU 资源、优化模型和服务参数,可以构建高性能、可靠的 AI 推理服务。

关键要点:

  • 正确配置 GPU 资源管理
  • 选择适合的推理框架
  • 优化模型和服务性能
  • 实施安全最佳实践
  • 建立完善的监控和可观测性

通过以上最佳实践,可以充分发挥 Kubernetes 的优势,构建更加高效、可靠的 AI 推理服务。

目录

  1. Kubernetes AI 推理服务最佳实践
  2. 1. AI 推理服务核心概念
  3. 1.1 什么是 AI 推理服务
  4. 1.2 常见的 AI 推理框架
  5. 2. GPU 资源管理
  6. 2.1 安装 GPU 驱动和 NVIDIA Device Plugin
  7. 安装 NVIDIA 驱动(在节点上执行)
  8. 安装 NVIDIA Device Plugin
  9. 验证 GPU 资源
  10. 2.2 GPU 资源分配
  11. 3. TensorFlow Serving 部署
  12. 3.1 准备模型
  13. 下载示例模型
  14. 创建模型存储
  15. 3.2 部署 TensorFlow Serving
  16. 部署服务
  17. 测试推理服务
  18. 4. Triton Inference Server 部署
  19. 4.1 安装 Triton Inference Server
  20. 部署服务
  21. 检查服务状态
  22. 5. 性能优化
  23. 5.1 模型优化
  24. 5.2 推理服务优化
  25. 5.3 自动缩放
  26. 6. 监控与可观测性
  27. 6.1 监控配置
  28. 6.2 日志管理
  29. ...
  30. 7. 安全最佳实践
  31. 7.1 模型安全
  32. 7.2 网络安全
  33. 8. 实际应用场景
  34. 8.1 多模型部署
  35. 8.2 A/B 测试
  36. 9. 故障排查
  37. 9.1 常见问题解决
  38. 查看 GPU 使用情况
  39. 查看推理服务日志
  40. 检查模型状态
  41. 测试推理服务
  42. 9.2 调试技巧
  43. 10. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • VsCode 远程 Copilot 调用 Claude Agent 提示无效请求的参数配置修正
  • Trae 高峰期模型排队问题及无问芯穹接入方案
  • S95×S88×UNS 智能制造架构设计:以可交付机制为核心
  • 文心一言、通义千问、Kimi、豆包:四大国产大模型对比评测
  • TS2320 错误的本质、触发场景与在 Angular / RxJS 项目中的系统化应对
  • Writely 浏览器插件工作原理:AI 写作助手在网页编辑器中的实现
  • DSO.ai:Synopsys 基于 AI 的搜索优化型 EDA 工具解析
  • YOLOv8 OBB 旋转目标检测 RK3588 C++ 部署:模型转换与推理优化
  • Python 获取飞书文档内容
  • Visual C++ 运行库详解与常见问题解决方案
  • 安路科技 TD 开发工具全流程使用指南
  • 解决 Copilot 与 Codex 修改代码时中文乱码的自动化方案
  • Java 中 RestTemplate 高效发送 HTTP 请求
  • 基于 FPGA 的多层感知机设计与逻辑门实现指南
  • 初识Langchain之AI语言大模型
  • 豆包 Seedream 4.0 多图融合与主体一致性技术评测
  • ComfyUI Photoshop 插件安装指南:实现 PS 内 AI 绘画
  • OpenClaw 跨平台安装指南:Windows 与 Ubuntu
  • Windows 环境下 OpenClaw 本地部署与飞书接入指南
  • Distil-Whisper:如何用 6 倍速度实现专业级语音识别

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online