本文介绍如何使用阿里云容器服务Serverless版和弹性容器实例(ECI),快速完成基于GPU的TensorFlow训练任务。
背景信息
人工智能与机器学习已经被广泛应用到各个领域,近些年来各种各样的训练模型被提出,更多的训练任务运行到云上。然而上云之后,想要轻松、持久地运行训练任务,仍有一些痛点,例如:
-
环境搭建麻烦:您需要购买GPU实例并安装GPU驱动,即使您已经把训练任务容器化,还需要安装GPU runtime hook 。
-
使用缺乏弹性:运行完任务后,为了节约成本,您可能需要释放闲置资源,但在下次启动任务时您需要重新创建实例并配置环境;或者在计算节点资源不够的情况下,扩容需要您再次创建实例并配置环境。
针对上述痛点,推荐您使用ACK Serverless+ECI的方案来运行训练任务,可以帮助您轻松地创建和启动训练任务。该方案还具备以下优势:
-
按需付费,免运维。
-
一次配置,无限次复用。
-
镜像缓存功能加速Pod创建,训练任务启动快速。
-
数据与训练模型解耦,数据可以持久化存储。
准备工作
-
准备好训练模型的容器镜像和训练数据。
本文以Github的一个TensorFlow训练任务为例,相关示例镜像(eci/tensorflow)您可以从阿里云容器镜像仓库中获取。更多信息,请参见TensorFlow训练任务。
-
创建ACK Serverless集群。
在容器服务管理控制台上创建ACK Serverless集群。更多信息,请参见创建ACK Serverless集群。
说明
如果您需要从公网拉取镜像,或者训练任务需要访问公网,请配置NAT网关。
您可以通过kubectl管理和访问ACK Serverless集群,相关操作如下:
-
如果您需要从本地算机管理集群,请安装并配置kubectl客户端。具体操作,请参见通过kubectl连接Kubernetes集群。
-
您也可以在CloudShell上通过kubect管理集群。具体操作,请参见在CloudShell上通过kubectl管理Kubernetes集群。
-
-
创建NAS文件系统,并添加挂载点。
在NAS文件系统控制台上创建文件系统,并添加挂载点。更多信息,请参见管理文件系统和管理挂载点。
说明
NAS文件系统需和ACK Serverless集群处于同一VPC。
创建镜像缓存
镜像缓存功能已经集成到Kubernetes CRD中,可以加速镜像的拉取。更多信息,请参见使用镜像缓存CRD加速创建Pod。
操作如下:
-
准备YAML文件。
示例imagecache.yaml的内容如下:
apiVersion: eci.alibabacloud.com/v1 kind: ImageCache metadata: name: tensorflow spec: images: - registry-vpc.cn-beijing.aliyuncs.com/eci/tensorflow:1.0 # 训练任务的镜像,建议您上传到阿里云容器镜像仓库中。此处使用VPC私网地址,请确保对应VPC为集群所属的VPC。
-
创建镜像缓存。
kubectl create -f imagecache.yaml
创建镜像缓存时需要拉取镜像,受镜像大小影响,需要一定的时间。您可以通过以下命令查询镜像缓存的创建进度。
Kubectl get imagecache tensorflow
返回如下结果时,表示镜像缓存已经创建成功。
NAME AGE CACHEID PHASE PROGRESS tensorflow 11m imc-2ze1xczztv7tgesg**** Ready 100%
创建训练任务
您可以使用镜像缓存来创建训练任务。
-
准备YAML文件。
示例gpu_pod.yaml的内容如下:
apiVersion: v1 kind: Pod metadata: name: tensorflow annotations: k8s.aliyun.com/eci-use-specs: "ecs.gn6i-c4g1.xlarge" # 指定GPU规格创建ECI实例 k8s.aliyun.com/eci-image-cache: "true" # 开启镜像缓存自动匹配 spec: containers: - name: tensorflow image: registry-vpc.cn-beijing.aliyuncs.com/eci/tensorflow:1.0 # 训练任务的镜像 command: - "sh" - "-c" - "python models/tutorials/image/imagenet/classify_image.py" # 触发训练任务的脚本 resources: limits: nvidia.com/gpu: "1" # 容器所需的GPU个数 volumeMounts: - name: nfs-pv mountPath: /tmp/imagenet volumes: - name: nfs-pv #训练结果持久化,保存到NAS flexVolume: driver: alicloud/nas fsType: nfs options: server: 16cde4****-ijv**.cn-beijing.nas.aliyuncs.com #NAS文件系统挂载点 path: / #挂载目录 restartPolicy: OnFailure
-
执行命令创建Pod。
kubectl create -f gpu_pod.yaml
-
查看执行情况。
您可以根据需要查看事件或日志。
-
查看事件
kubectl describe pod tensorflow
-
查看日志
kubectl logs tensorflow
-
查看结果
您可以在控制台上查看训练任务的运行结果。
-
在NAS文件系统控制台,您可以看到训练完成的数据已占用存储容量。
说明
训练结果存储在配置的NAS文件系统中,挂载NAS后,您可以在对应的路径下获取结果数据。
-
在弹性容器实例控制台,您可以看到运行成功的ECI实例。
说明
运行成功表示实例中的容器已经运行终止,此时系统会回收底层计算资源,不再对Pod进行计费。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/157200.html