Kubernetes与AI推理服务最佳实践

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推理服务。

Read more

Windows安装原生Codex CLI 让你拥有更强力的AI代码助手!【支持GPT5.4、GPT5.3-codex】

Windows安装原生Codex CLI 让你拥有更强力的AI代码助手!【支持GPT5.4、GPT5.3-codex】

文章目录 * 前言 * 一、基础环境 * 1.操作系统 * 2.工具版本 * 二、部署 * 1.安装PowerShell 7 * 1.1以管理员身份运行 cmd * 1.2安装powershell7 * 2.安装Node.js * 2.1 安装nvm * 2.2 安装Node&npm * 3.安装Codex * 4.安装CC-Switch * 5.配置CC-Switch * 5.1获取公益api key * 5.2选择Codex 点击“添加供应商” * 5.3配置测试 * 三、Codex简单使用 * 1.Powershell7中输入codex回车 * 2.Codex

前端国际化:别让你的应用只懂一种语言

前端国际化:别让你的应用只懂一种语言 毒舌时刻 这应用写得跟方言似的,出了本地就没人懂。 各位前端同行,咱们今天聊聊前端国际化。别告诉我你的应用还只有中文版本,那感觉就像在国际会议上只说方言——能说,但没人懂。 为什么你需要国际化 最近看到一个项目,想拓展海外市场,但所有文本都是硬编码在代码里的。我就想问:你是在做本地应用还是在做国际产品? 反面教材 // 反面教材:硬编码文本 function App() { return ( <div> <h1>欢迎来到我的网站</h1> <p>这是一个示例应用</p> <button>点击我</button> <div>

如何从AI学生GitCode仓库下载GLM-4.6V-Flash-WEB完整镜像?

如何从AI学生GitCode仓库下载GLM-4.6V-Flash-WEB完整镜像? 在多模态大模型迅速落地的今天,一个真正“能跑起来”的开源项目,远比一纸论文更具说服力。尤其是在智能客服、电商图文理解、教育辅助等场景中,开发者不再满足于“模型性能有多强”,而是更关心:“它能不能在我这台带独显的开发机上顺利跑通?部署要多久?有没有现成的例子可以抄?” 正是在这样的现实需求下,GLM-4.6V-Flash-WEB 的出现显得格外及时。作为智谱AI推出的轻量级视觉语言模型,它不仅具备对图像内容进行细粒度语义解析的能力,更重要的是——你真的可以在一块RTX 3090上把它拉起来,用浏览器访问Web界面,上传一张截图就得到自然语言回答。 而让这一切变得简单到近乎“傻瓜式操作”的关键,正是 GitCode 上由社区维护的 AI 学生镜像仓库(aistudent/ai-mirror-list)。这个看似不起眼的开源项目,实则封装了从环境配置、依赖安装到服务启动的全部流程,把原本需要半天才能搞定的部署工作压缩成一条命令甚至一键点击。 模型不是越重越好,关键是“能用” GLM-4.6V-Fl

告别 Selenium:Playwright 现代 Web 自动化测试从入门到实战

告别 Selenium:Playwright 现代 Web 自动化测试从入门到实战

告别 Selenium:Playwright 现代 Web 自动化测试简明教程 前言:为什么选择 Playwright? 在 Web 自动化测试领域,Selenium 曾长期占据主流,但面对现代前端框架(React/Vue/Next.js)、复杂 SPA 应用和多端适配需求,其局限性逐渐凸显。Microsoft 推出的 Playwright 框架,凭借跨引擎、跨平台、智能化的特性,成为新一代自动化测试的优选方案。 相比于传统的 Selenium 或 Cypress,Playwright 具有以下优势: * 极致性能:基于浏览器上下文(Browser Context)隔离测试环境,启动速度比 Selenium 快 30%+,无冗余进程开销; * 智能等待:内置自适应等待机制,自动等待元素可交互,