前提條件
確保您已經創建Serverless集群,具體操作請參閱創建Serverless集群 。
已開通天翼云彈性文件或對象存儲服務,用于存儲tensorflow訓練結果。
背景信息
TensorFlow是一個開源的機器學習框架,由Google開發和維護。它提供了一個靈活的編程環境,可以用于構建和訓練各種機器學習模型,包括神經網絡。TensorFlow使用圖形計算的方式來表示計算任務,并通過優化技術來實現高效的計算。它支持多種編程語言,包括Python和C++,并且可以在各種硬件平臺上運行,包括CPU、GPU和TPU。TensorFlow已經成為機器學習和深度學習領域最受歡迎的框架之一,被廣泛應用于各種領域,如圖像識別、自然語言處理、推薦系統等。
準備工作
準備訓練數據和容器鏡像。
訓練數據:本文以Github的一個TensorFlow訓練任務為例。
容器鏡像:在最佳實踐中,已準備好適用的示例鏡像,示例鏡像已上傳到天翼云容器鏡像倉庫中。
創建鏡像緩存。在ECI控制臺的鏡像緩存頁面手動創建鏡像緩存,如下圖所示:
創建鏡像緩存時需拉取鏡像,受鏡像大小和網絡的影響,需要一定時間。可通過鏡像緩存列表頁或者鏡像緩存詳情頁查看進度。鏡像緩存狀態顯示ready時,表示鏡像緩存已經創建成功。
創建NAS文件系統。在文件存儲控制臺創建文件系統。NAS文件系統需和ACK Serverless集群處于同一VPC。
操作步驟
創建NAS文件系統對應的PV和PVC。
準備YAML文件。示例static-nas.yaml的內容如下:
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/provisioned-by: nas.csi.cstor.com
name: pvc-pv-static-nas
namespace: default
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 500Gi
csi:
driver: nas.csi.cstor.com
volumeAttributes:
server: "172.xx.xx.xxx:/mnt/sfs_cap/xxxxxxaa91d_34uhx3bu11i485pg"
volumeHandle: 0104-0D-pv-static-nas
mountOptions:
- vers=3
- proto=tcp
- async
- nolock
- noatime
- nodiratime
- noresvport
- wsize=1048576
- rsize=1048576
- timeo=600
volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
volume.beta.kubernetes.io/storage-provisioner: nas.csi.cstor.com
name: pvc-static-nas
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Gi
volumeMode: Filesystem
volumeName: pvc-pv-static-nas
創建pv和pvc。
kubectl create -f static-nas.yaml創建ECI Pod來運行訓練任務。
準備YAML文件。示例tensorflow.yaml的內容如下:
apiVersion: v1
kind: Pod
metadata:
name: tensorflow
labels:
app: tensorflow
annotations:
k8s.daliqc.cn/eci-use-specs: "pi7.4xlarge.4" # 指定GPU規格
k8s.daliqc.cn/eci-image-cache: "true" # 開啟自動匹配鏡像緩存
spec:
restartPolicy: OnFailure
containers:
- name: tensorflow
image: user1-registry-huadong1.crs-internal.daliqc.cn/library/tensorflow:1.0.0
command:
- python
args:
- /home/classify_image/classify_image.py # 容器啟動后執行訓練腳本
resources:
limits:
daliqc.cn/gpu: "1" # 容器所需的GPU個數
volumeMounts: # 掛載NAS,將訓練結果持久化存儲
- name: pvc-nas
mountPath: /tmp/classify_image_model
volumes:
- name: pvc-nas
persistentVolumeClaim:
claimName: pvc-static-nas
創建Pod。
kubectl create -f tensorflow.yaml查看訓練任務的執行情況。
kubectl get pod等待ECI實例創建并運行完成,然后就可以到彈性文件中查看訓練結果。