KubeFlow提供TFJob和PyTorchJob等CRD(CustomResourceDefinition),基于这些CRD,您可以在Kubernetes集群上运行分布式训练,无需过多关注分布式代码逻辑,也无需过多考虑集群的运维工作,可以将全部精力集中到模型开发当中,DataScience集群为您提供稳定的算力输出,以及Tensorflow和PyTorch等丰富的机器学习框架。
前提条件
- 已创建DataScience集群,并且选择了Kubeflow服务,详情请参见创建集群。
- 下载dsdemo代码:请已创建DataScience集群的用户,使用钉钉搜索钉钉群号32497587加入钉钉群以获取dsdemo代码。
准备工作
- 通过SSH方式连接集群,详情请参见登录集群。
- 上传并解压缩下载的代码包至集群Master节点的/dsdemo目录下。
本文示例是上传并解压缩在root/dsdemo目录下,您可以指定目录。
estimator-API
- 执行以下命令,进入estimator-API目录。
cd /root/dsdemo/kubeflow_samples/training/tf/estimator-API
- 制作Train镜像。
- 执行以下命令,制作Train镜像。
make
- 执行以下命令,制作镜像并将镜像push到镜像仓库。
make push
- 根据您的实际需求,修改distributed_tfjob.yaml文件内容。
您需要修改代码中
image
的值,
distributed_tfjob.yaml文件内容如下。
apiVersion: "kubeflow.org/v1"
kind: "TFJob"
metadata:
name: "distributed-training"
spec:
cleanPodPolicy: None
tfReplicaSpecs:
Worker:
replicas: 3
restartPolicy: Never
template:
metadata:
annotations:
scheduling.k8s.io/group-name: "distributed-training"
spec:
containers:
- name: tensorflow
image: datascience-registry.cn-beijing.cr.aliyuncs.com/kubeflow-examples/distributed_worker:0.1.4
volumeMounts:
- mountPath: /train
name: training
volumes:
- name: training
persistentVolumeClaim:
claimName: strategy-estimator-volume
- 执行以下命令,使修改的配置生效。
kubectl apply -f distributed_tfjob.yaml
- 根据您的实际需求,修改pvc.yaml配置文件。
pvc.yaml文件内容如下。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: strategy-estimator-volume
labels:
app: strategy-estimator-volume
spec:
storageClassName: "nfs-client"
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
说明 您可以修改storage
的值,调大存储空间,例如50 Gi。
- 执行以下命令,使修改的配置生效。
kubectl apply -f pvc.yaml
- 查看训练状态。
- 执行以下命令,获取Pod信息。
kubectl get pods
返回如下类似信息。
NAME READY STATUS RESTARTS AGE
distributed-training-worker-0 0/1 Completed 0 22h
distributed-training-worker-1 0/1 Completed 0 22h
distributed-training-worker-2 0/1 Completed 0 22h
nfs-client-provisioner-5cb8b7cf76-k2z4d 1/1 Running 0 25h
说明 当Pod的状态为Completed时,表示训练结束。
- 执行以下命令,查看Log信息。
kubectl logs distributed-training-worker-0
- 查看Checkpoint模型导出文件。
- 执行以下命令,进入default_storage_class目录。
cd /mnt/disk1/k8s_pv/default_storage_class
- 执行
ll
命令,获取模型目录。total 28
drwxrwxrwx 2 root root 4096 Jul 8 16:56 anonymous-workspace-ds-notebook2-pvc-09789bbd-aa40-4381-af63-ebcab57c584f
drwxrwxrwx 7 root root 4096 Jul 8 18:09 anonymous-workspace-ds-notebook-pvc-ae4db112-9491-4449-854a-7b0e67264703
drwxrwxrwx 5 root root 4096 Jul 8 16:27 default-strategy-estimator-volume-pvc-6cd2979e-f925-45b7-8c25-ce67e12e2f03
drwxrwxrwx 3 root root 4096 Jul 8 13:47 kubeflow-katib-mysql-pvc-9a3ebbfe-2952-4eaa-8a83-36e42d620cac
drwxrwxrwx 3 root root 4096 Jul 8 13:47 kubeflow-metadata-mysql-pvc-5778e165-8a08-4536-8e36-9185144d3d6d
drwxrwxrwx 3 root root 4096 Jul 8 13:47 kubeflow-minio-pvc-pvc-10015211-fc40-460e-b723-a5c220112d08
drwxrwxrwx 6 polkitd ssh_keys 4096 Jul 8 13:54 kubeflow-mysql-pv-claim-pvc-5136b864-c868-4951-9b34-f6c5f06c2d6f
- 执行以下命令,进入模型目录。
cd default-strategy-estimator-volume-pvc-6cd2979e-f925-45b7-8c25-ce67e12e2f03
说明 default-strategy-estimator-volume-pvc-6cd2979e-f925-45b7-8c25-ce67e12e2f03
需要替换为您实际生成的目录。
- 执行以下命令,进入master目录。
- 执行下
ll
命令,查看目录信息。total 4
drwxr-xr-x 3 root root 4096 Jul 8 16:27 1625732821
- 执行以下命令,进入1625732821目录。
cd 1625732821
说明 1625732821
需要替换为您实际生成的目录。
- 执行下
ll
命令,查看目录信息。total 1788
-rw-r--r-- 1 root root 130 Jul 8 16:27 checkpoint
-rw-r--r-- 1 root root 838550 Jul 8 16:27 events.out.tfevents.1625732823.distributed-training-worker-0
-rw-r--r-- 1 root root 523304 Jul 8 16:27 graph.pbtxt
drwxr-xr-x 2 root root 4096 Jul 8 16:27 keras
-rw-r--r-- 1 root root 780 Jul 8 16:27 model.ckpt-0.data-00000-of-00001
-rw-r--r-- 1 root root 249 Jul 8 16:27 model.ckpt-0.index
-rw-r--r-- 1 root root 218354 Jul 8 16:27 model.ckpt-0.meta
-rw-r--r-- 1 root root 780 Jul 8 16:27 model.ckpt-3200.data-00000-of-00001
-rw-r--r-- 1 root root 249 Jul 8 16:27 model.ckpt-3200.index
-rw-r--r-- 1 root root 218354 Jul 8 16:27 model.ckpt-3200.meta
keras-API
重要 此示例需要GPU环境,因此创建DataScience集群时需要选择GPU的配置,并且制作镜像时也需要GPU。
- 执行以下命令,进入keras-API目录。
cd /root/dsdemo/kubeflow_samples/training/tf/keras-API
- 制作Train镜像。
- 执行以下命令,制作Train镜像。
make
- 执行以下命令,制作镜像并将镜像push到镜像仓库。
make push
- 根据您的实际需求,修改目录下训练配置文件的镜像名称。
multi_worker_tfjob.yaml文件内容如下。
apiVersion: kubeflow.org/v1
kind: TFJob
metadata:
name: multi-worker
spec:
cleanPodPolicy: None
tfReplicaSpecs:
Worker:
replicas: 3
restartPolicy: Never
template:
spec:
containers:
- name: tensorflow
image: datascience-registry.cn-beijing.cr.aliyuncs.com/kubeflow-examples/multi_worker_strategy:0.1.1
volumeMounts:
- mountPath: /train
name: training
resources:
limits:
nvidia.com/gpu: 1
volumes:
- name: training
persistentVolumeClaim:
claimName: strategy-volume
- 执行以下命令,使修改的配置生效。
kubectl apply -f multi_worker_tfjob.yaml
- 修改pvc配置文件。
pvc.yaml文件内容如下。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: strategy-volume
labels:
app: strategy-volume
spec:
storageClassName: "nfs-client"
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
说明 您可以修改storage
的值,调大存储空间,例如50 Gi。
- 执行以下命令,使修改的配置生效。
kubectl apply -f pvc.yaml
- 查看训练状态。
- 执行以下命令,获取Pod信息。
kubectl get pods
返回如下类似信息。
NAME READY STATUS RESTARTS AGE
multi-worker-worker-0 0/1 Pending 0 5m33s
multi-worker-worker-1 0/1 Pending 0 5m33s
multi-worker-worker-2 0/1 Pending 0 5m33s
nfs-client-provisioner-5cb8b7cf76-k2z4d 1/1 Running 0 25h
说明 当Pod的状态为Completed时,表示训练结束。
- 执行以下命令,查看Log信息。
kubectl logs distributed-training-worker-0
- 进入如下目录,查看Checkpoint模型导出文件。
ll /mnt/disk1/k8s_pv/default_storage_class/default-strategy-estimator-volume-pvc-aa16c081-cd94-4565-bfde-daee90ee25a4/master/1625553118/
说明 default-strategy-estimator-volume-pvc-aa16c081-cd94-4565-bfde-daee90ee25a4
和1625553118
需要替换为您实际的目录。
total 1788
-rw-r--r-- 1 root root 130 Jul 6 14:32 checkpoint
-rw-r--r-- 1 root root 838550 Jul 6 14:32 events.out.tfevents.1625553120.distributed-training-worker-0
-rw-r--r-- 1 root root 523405 Jul 6 14:32 graph.pbtxt
drwxr-xr-x 2 root root 4096 Jul 6 14:31 keras
-rw-r--r-- 1 root root 780 Jul 6 14:32 model.ckpt-0.data-00000-of-00001
-rw-r--r-- 1 root root 249 Jul 6 14:32 model.ckpt-0.index
-rw-r--r-- 1 root root 218354 Jul 6 14:32 model.ckpt-0.meta
-rw-r--r-- 1 root root 780 Jul 6 14:32 model.ckpt-3200.data-00000-of-00001
-rw-r--r-- 1 root root 249 Jul 6 14:32 model.ckpt-3200.index
-rw-r--r-- 1 root root 218354 Jul 6 14:32 model.ckpt-3200.meta
Pytorch训练
- 执行以下命令,进入mnist目录。
cd /root/dsdemo/kubeflow_samples/training/pytorch/mnist
- 制作Train镜像。
- 执行以下命令,制作Train镜像。
make
- 执行以下命令,制作镜像并将镜像push到镜像仓库。
make push
- 根据您的实际需求,修改训练配置文件的镜像名称。
apiVersion: "kubeflow.org/v1"
kind: "PyTorchJob"
metadata:
name: "pytorch-dist-mnist-gloo"
spec:
pytorchReplicaSpecs:
Master:
replicas: 1
restartPolicy: OnFailure
template:
metadata:
annotations:
sidecar.istio.io/inject: "false"
spec:
containers:
- name: pytorch
image: datascience-registry.cn-beijing.cr.aliyuncs.com/kubeflow-examples/pytorch-dist-mnist-test:0.1.5
args: ["--backend", "gloo"]
volumeMounts:
- mountPath: /train
name: training
# Comment out the below resources to use the CPU.
resources:
limits:
nvidia.com/gpu: 1
volumes:
- name: training
persistentVolumeClaim:
claimName: strategy-pytorch-volume
Worker:
replicas: 1
restartPolicy: OnFailure
template:
metadata:
annotations:
sidecar.istio.io/inject: "false"
spec:
containers:
- name: pytorch
image: datascience-registry.cn-beijing.cr.aliyuncs.com/kubeflow-examples/pytorch-dist-mnist-test:0.1.5
args: ["--backend", "gloo"]
volumeMounts:
- mountPath: /train
name: training
# Comment out the below resources to use the CPU.
resources:
limits:
nvidia.com/gpu: 1
volumes:
- name: training
persistentVolumeClaim:
claimName: strategy-pytorch-volume
- 修改pvc配置文件。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: strategy-pytorch-volume
labels:
app: strategy-pytorch-volume
spec:
storageClassName: "nfs-client"
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
说明 您可以修改storage
的值,调大存储空间,例如50 Gi。
- 申请PVC并提交训练。
kubectl apply -f ./v1/pytorch_job_mnist_gloo.yaml
- 查看训练状态。
- 执行以下命令,获取Pod信息。
kubectl get pods
返回如下类似信息。
NAME READY STATUS RESTARTS AGE
pytorch-dist-mnist-gloo-worker-0 0/1 Pending 0 11m
说明 当Pod的状态为Completed时,表示训练结束。
- 执行以下命令,查看Log信息。
kubectl logs pytorch-dist-mnist-gloo-master-0
- 进入如下目录,查看Checkpoint模型导出文件。
cd /mnt/disk1/k8s_pv/default_storage_class/default-strategy-pytorch-volume-pvc-633b12ab-5f63-4e63-97b9-24c2b3de733c/
说明 default-strategy-pytorch-volume-pvc-633b12ab-5f63-4e63-97b9-24c2b3de733c
需要替换为您实际的目录。
返回信息类似如下所示。
total 1688
-rw-r--r-- 1 root root 1725813 Jul 6 15:35 mnist_cnn.pt
问题反馈
如果您在使用DataScience集群过程中有任何疑问或问题,请联系我们的技术人员协助处理,同时也欢迎您使用钉钉搜索钉钉群号32497587加入钉钉群进行反馈或交流。