
https://github.com/kubeflow/mpi-operator/workflows/build/badge.svg](https://github.com/kubeflow/mpi-operator/actions?query=event%3Apush+branch%3Amaster) https://goreportcard.com/badge/github.com/kubeflow/mpi-operator](https://goreportcard.com/report/github.com/kubeflow/mpi-operator)
MPI Operator便于在Kubernetes上运行allreduce风格的分布式训练。有关MPI Operator及其行业应用的介绍,请查看此博客文章。
MPI Operator是Kubeflow项目的一部分,旨在简化在Kubernetes集群上部署和管理分布式机器学习训练作业,特别是采用allreduce通信模式的训练任务(如使用Horovod等框架的分布式训练)。它通过自定义资源(CRD)MPIJob来定义和管理分布式训练作业,实现了训练任务的自动化部署、扩展和监控。
mpijobs.kubeflow.org与Kubernetes深度集成,支持Kubernetes的资源管理、调度能力。可通过以下命令使用默认设置部署operator:
shellgit clone https://github.com/kubeflow/mpi-operator cd mpi-operator kubectl create -f deploy/v1alpha2/mpi-operator.yaml
或者,按照Kubeflow快速入门指南部署Kubeflow。MPI支持的alpha版本随Kubeflow 0.2.0引入,需使用版本高于0.2.0的Kubeflow。
可通过以下命令检查MPI Job自定义资源是否已安装:
shellkubectl get crd
输出应包含mpijobs.kubeflow.org,如下所示:
NAME AGE ... mpijobs.kubeflow.org 4d ...
若未包含,可使用https://github.com/kubernetes-sigs/kustomize%E6%B7%BB%E5%8A%A0%EF%BC%9A
bashgit clone https://github.com/kubeflow/mpi-operator cd mpi-operator/manifests kustomize build overlays/kubeflow | kubectl apply -f -
注意:自Kubernetes v1.14起,kustomize成为kubectl的子命令,也可运行:
bashkubectl kustomize base | kubectl apply -f -
通过定义MPIJob配置文件创建MPI作业。例如,https://github.com/kubeflow/mpi-operator/blob/master/examples/v1alpha2/tensorflow-benchmarks.yaml%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%94%A8%E4%BA%8E%E5%90%AF%E5%8A%A8%E5%A4%9A%E8%8A%82%E7%82%B9TensorFlow%E5%9F%BA%E5%87%86%E8%AE%AD%E7%BB%83%E4%BD%9C%E4%B8%9A%EF%BC%8C%E5%8F%AF%E6%A0%B9%E6%8D%AE%E9%9C%80%E6%B1%82%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E3%80%82
查看示例配置文件内容:
shellcat examples/v1alpha2/tensorflow-benchmarks.yaml
部署MPIJob资源以启动训练:
shellkubectl create -f examples/v1alpha2/tensorflow-benchmarks.yaml
创建MPIJob资源后,可查看匹配GPU数量的pods,并通过状态部分监控作业状态。以下是作业成功完成时的示例输出:
shellkubectl get -o yaml mpijobs tensorflow-benchmarks
示例输出(部分):
yamlapiVersion: kubeflow.org/v1alpha2 kind: MPIJob metadata: name: tensorflow-benchmarks namespace: default spec: cleanPodPolicy: Running mpiReplicaSpecs: Launcher: replicas: 1 template: spec: containers: - command: - mpirun - --allow-run-as-root - -np - "2" - -bind-to - none - -map-by - slot - -x - NCCL_DEBUG=INFO - -x - LD_LIBRARY_PATH - -x - PATH - -mca - pml - ob1 - -mca - btl - ^openib - python - scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py - --model=resnet101 - --batch_size=64 - --variable_update=horovod image: mpioperator/tensorflow-benchmarks:latest name: tensorflow-benchmarks Worker: replicas: 1 template: spec: containers: - image: mpioperator/tensorflow-benchmarks:latest name: tensorflow-benchmarks resources: limits: nvidia.com/gpu: 2 slotsPerWorker: 2 status: completionTime: "2019-07-09T22:17:06Z" conditions: - lastTransitionTime: "2019-07-09T22:15:51Z" message: MPIJob default/tensorflow-benchmarks is created. reason: MPIJobCreated status: "True" type: Created - lastTransitionTime: "2019-07-09T22:17:06Z" message: MPIJob default/tensorflow-benchmarks successfully completed. reason: MPIJobSucceeded status: "True" type: Succeeded startTime: "2019-07-09T22:15:51Z"
训练通常运行100步,在GPU集群上需几分钟。作业启动后,可通过launcher pod查看日志:
shellPODNAME=$(kubectl get pods -l mpi_job_name=tensorflow-benchmarks,mpi_role_type=launcher -o name) kubectl logs -f ${PODNAME}
日志示例(部分):
TensorFlow: 1.14 Model: resnet101 Dataset: imagenet (synthetic) Mode: training Batch size: 128 global 64 per device Num batches: 100 Devices: ['horovod/gpu:0', 'horovod/gpu:1'] ... 100 images/sec: 154.2 +/- 0.4 (jitter = 4.0) 8.542 ---------------------------------------------------------------- total images/sec: 308.27
| 指标名称 | 指标类型 | 描述 | 标签 |
|---|---|---|---|
| mpi_operator_jobs_created_total | Counter | 已创建的MPI作业数量 | |
| mpi_operator_jobs_successful_total | Counter | 成功完成的MPI作业数量 | |
| mpi_operator_jobs_failed_total | Counter | 失败的MPI作业数量 | |
| mpi_operator_job_info | Gauge | MPIJob的信息 | launcher=<launcher-pod-name> namespace=<job-namespace> |
结合https://github.com/kubernetes/kube-state-metrics%EF%BC%8C%E5%8F%AF%E9%80%9A%E8%BF%87%E6%A0%87%E7%AD%BE%E5%85%B3%E8%81%94%E6%8C%87%E6%A0%87%E3%80%82%E4%BE%8B%E5%A6%82%EF%BC%9A
kube_pod_info * on(pod,namespace) group_left label_replace(mpi_operator_job_infos, "pod", "$0", "launcher", ".*")
Docker镜像会自动构建并推送到https://hub.docker.com/u/mpioperator%E3%80%82%E5%8F%AF%E4%BD%BF%E7%94%A8%E4%BB%A5%E4%B8%8BDockerfile%E8%87%AA%E8%A1%8C%E6%9E%84%E5%BB%BA%E9%95%9C%E5%83%8F%EF%BC%9A
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务