KubeFlow提供TFJob和PyTorchJob等CRD(CustomResourceDefinition),基於這些CRD,您可以在Kubernetes叢集上運行分布式訓練,無需過多關注分布式代碼邏輯,也無需過多考慮叢集的營運工作,可以將全部精力集中到模型開發當中,DataScience叢集為您提供穩定的算力輸出,以及Tensorflow和PyTorch等豐富的機器學習架構。
前提條件
- 已建立DataScience叢集,並且選擇了Kubeflow服務,詳情請參見建立叢集。
- 下載dsdemo代碼:請已建立DataScience叢集的使用者,使用DingTalk搜尋DingTalk群號32497587加入DingTalk群以擷取dsdemo代碼。
背景資訊
通過以下三種方式為您展示Training樣本:
準備工作
- 通過SSH方式串連叢集,詳情請參見登入叢集。
- 上傳並解壓縮下載的程式碼封裝至叢集Master節點的/dsdemo目錄下。本文樣本是上傳並解壓縮在root/dsdemo目錄下,您可以指定目錄。
estimator-API
- 執行以下命令,進入estimator-API目錄。
cd /root/dsdemo/kubeflow_samples/training/tf/estimator-API - 製作Train鏡像。
- 執行以下命令,製作Train鏡像。
make - 執行以下命令,製作鏡像並將鏡像push到鏡像倉庫。
make push
- 執行以下命令,製作Train鏡像。
- 根據您的實際需求,修改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
- 執行以下命令,擷取Pod資訊。
- 查看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目錄。
cd 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
- 執行以下命令,進入default_storage_class目錄。
keras-API
重要 此樣本需要GPU環境,因此建立DataScience叢集時需要選擇GPU的配置,並且製作鏡像時也需要GPU。
- 執行以下命令,進入keras-API目錄。
cd /root/dsdemo/kubeflow_samples/training/tf/keras-API - 製作Train鏡像。
- 執行以下命令,製作Train鏡像。
make - 執行以下命令,製作鏡像並將鏡像push到鏡像倉庫。
make push
- 執行以下命令,製作Train鏡像。
- 根據您的實際需求,修改目錄下訓練設定檔的鏡像名稱。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
- 執行以下命令,擷取Pod資訊。
- 進入如下目錄,查看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
- 執行以下命令,製作Train鏡像。
- 根據您的實際需求,修改訓練設定檔的鏡像名稱。
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
- 執行以下命令,擷取Pod資訊。
- 進入如下目錄,查看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