前提条件
确保您已经创建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.ctyun.cn/eci-use-specs: "pi7.4xlarge.4" # 指定GPU规格
k8s.ctyun.cn/eci-image-cache: "true" # 开启自动匹配镜像缓存
spec:
restartPolicy: OnFailure
containers:
- name: tensorflow
image: user1-registry-huadong1.crs-internal.ctyun.cn/library/tensorflow:1.0.0
command:
- python
args:
- /home/classify_image/classify_image.py # 容器启动后执行训练脚本
resources:
limits:
ctyun.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实例创建并运行完成,然后就可以到弹性文件中查看训练结果。