Docker + Kubernetes 部署深度学习模型(含资源调度)
1. 容器化核心优势
- 环境一致性:通过 Docker 镜像封装模型、依赖库和运行环境,解决"本地正常,服务器失败"问题
- 资源隔离:使用
cgroups限制 CPU/内存,避免资源争抢 - 快速扩展:K8s 根据负载自动扩缩容器实例,支持高并发推理
2. Docker 镜像构建(关键步骤)
Dockerfile 示例:
FROM nvcr.io/nvidia/pytorch:22.07-py3 # 基础镜像含 CUDA 和 PyTorch
# 安装依赖
RUN pip install -r requirements.txt && \
apt-get update && apt-get install -y libgl1-mesa-glx
# 复制模型和代码
COPY model.pth /app/
COPY inference_api.py /app/
# 设置启动命令
CMD ["python", "/app/inference_api.py"]
构建镜像:docker build -t dl-model:v1 .
测试运行:docker run -p 5000:5000 --gpus all --memory=4g dl-model:v1
3. Kubernetes 部署架构
graph LR
A[客户端请求] --> B[Ingress Nginx]
B --> C[K8s Service]
C --> D[Pod 1<br>GPU:0.5]
C --> E[Pod 2<br>GPU:0.5]
D --> F[Docker Container]
E --> G[Docker Container]
4. K8s 资源配置文件(YAML 示例)
apiVersion: apps/v1
kind: Deployment
metadata:
name: model-deployment
spec:
replicas: 3 # 初始实例数
selector:
matchLabels:
app: dl-model
template:
metadata:
labels:
app: dl-model
spec:
containers:
- name: model-container
image: registry.example.com/dl-model:v1
resources:
limits:
nvidia.com/gpu: 1 # 每容器分配1块GPU
memory: 8Gi
cpu: "2"
requests:
memory: 4Gi
cpu: "1"
---
apiVersion: v1
kind: Service
metadata:
name: model-service
spec:
selector:
app: dl-model
ports:
- protocol: TCP
port: 80
targetPort: 5000
5. 高级资源调度策略
| 策略类型 | K8s 实现方式 | 适用场景 |
|---|---|---|
| GPU 分片调度 | nvidia.com/gpu: 0.5 | 轻量模型并行推理 |
| 自动水平扩展 | HorizontalPodAutoscaler + Prometheus | 流量突发场景 |
| 优先级抢占 | priorityClassName: high-priority | 关键任务保障 |
| 多节点调度 | nodeSelector: gpu-type=a100 | 异构硬件集群 |
6. 完整部署流程
- 镜像推送:
docker push registry.example.com/dl-model:v1 - 应用部署:
kubectl apply -f deployment.yaml - 监控配置:
- 使用 Prometheus 采集 GPU 利用率指标
- 配置 HPA 基于 GPU 使用率自动扩缩容:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: model-deployment minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: nvidia.com/gpu target: type: Utilization averageUtilization: 70
7. 性能优化技巧
- 批处理推理:在模型输入层实现动态批处理,提升 GPU 利用率
- 镜像瘦身:使用多阶段构建,移除构建依赖
- 预热机制:启动时加载模型至 GPU 显存,避免首次请求延迟
通过上述方案,可实现:
- 推理延迟降低 40%(批处理优化)
- GPU 利用率提升至 85%+(资源分片调度)
- 零宕机滚动更新(K8s 蓝绿部署)
1054

被折叠的 条评论
为什么被折叠?



