如何在Kubernetes中以最简方式运行Docker深度学习训练容器?
在Kubernetes GPU集群上运行深度学习训练任务的最简方案
核心思路
用Kubernetes的Job资源来运行一次性训练任务——Job专为批处理、一次性任务设计,任务完成后自动终止,完美匹配你的需求(无需长期部署,仅执行脚本并获取日志)。
步骤1:构建并推送Docker镜像
先把你的Dockerfile构建成镜像,推送到集群可访问的镜像仓库(比如学校内部的私有镜像库):
# 构建镜像,替换<镜像仓库地址>为实际地址,例如harbor.example.com docker build -t <镜像仓库地址>/dl-training:v1 . # 推送到镜像仓库 docker push <镜像仓库地址>/dl-training:v1
步骤2:编写最简Job配置文件
创建名为training-job.yaml的文件,内容如下:
apiVersion: batch/v1 kind: Job metadata: name: dl-training-job spec: # 任务失败最多重试3次,按需调整 backoffLimit: 3 template: spec: containers: - name: training-container # 替换为你推送的镜像地址 image: <镜像仓库地址>/dl-training:v1 # 请求并限制GPU资源,按需调整数量 resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 # 仅当Pod失败时重启,避免正常完成后重复执行 restartPolicy: OnFailure
注意:确保集群已部署NVIDIA设备插件,否则Kubernetes无法识别GPU资源(学校GPU集群一般已配置)。
步骤3:提交任务到集群
执行命令提交Job:
kubectl apply -f training-job.yaml
步骤4:查看任务状态
- 查看Job整体状态:
kubectl get jobs # 当COMPLETIONS列显示1/1时,任务完成
- 查看对应的Pod运行状态:
kubectl get pods # 找到名称包含dl-training-job的Pod,状态为Completed则任务结束
步骤5:获取训练日志
方式1:直接查看/保存控制台日志(推荐)
如果你的train.py将日志输出到标准输出(stdout)或标准错误(stderr),直接用以下命令获取:
# 查看实时日志(类似tail -f) kubectl logs -f <你的Pod名称> # 保存日志到本地文件 kubectl logs <你的Pod名称> > training_result.log
方式2:获取容器内生成的日志文件(若脚本生成本地文件)
如果训练脚本会生成日志文件到容器内路径(比如/tmp/training.log),需要给Pod挂载持久化存储(PVC),避免Pod删除后文件丢失。修改Job配置文件,添加存储挂载:
apiVersion: batch/v1 kind: Job metadata: name: dl-training-job spec: backoffLimit: 3 template: spec: containers: - name: training-container image: <镜像仓库地址>/dl-training:v1 resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 # 挂载存储到容器内日志输出路径 volumeMounts: - name: training-storage mountPath: /tmp # 假设脚本将日志写入/tmp目录 volumes: - name: training-storage # 使用提前创建好的PVC,替换为你的PVC名称 persistentVolumeClaim: claimName: training-pvc restartPolicy: OnFailure
任务完成后,可通过PVC对应的存储后端(比如NFS、Ceph)直接获取日志文件,或进入Pod拷贝:
kubectl cp <你的Pod名称>:/tmp/training.log ./local_training.log
内容的提问来源于stack exchange,提问作者ludog
相关产品推荐
相关产品推荐

