容器服务 在 Serverless 集群上玩转深度学习

本系列文章将记录在 TKE Serverless 上部署深度学习的一系列实践,从直接部署 TensorFlow 到后续实现 Kubeflow 的部署,旨在提供一个较完整的容器深度学习实践方案。

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

一、前提条件

这篇会在上一篇文档 构建深度学习容器镜像 基础上继续操作,利用自建集群,在 TKE Serverless 上运行深度学习任务。自建镜像已上传到镜像仓库中:ccr.ccs.tencentyun.com/carltk/tensorflow-model,无需重新构建,可以直接拉取使用。

二、创建 TKE Serverless 集群

请参见 创建集群 文档创建 TKE Serverless 集群。

注意:说明:

注意:由于需要运行 GPU 训练任务,在创建集群时,请注意选择的容器网络所在区的支持资源,选择支持 GPU 的可用区:

注意:

三、创建 CFS 文件系统(可选)

容器在任务结束后会自动删除,并释放资源。为了实现对模型和数据的持久化存储,建议通过挂载外部存储的方式进行数据存储。目前支持 云硬盘 CBS、文件存储 CFS、对象存储 COS 等方式。在这篇示例中,我们将使用 NFS 盘的方式,利用 CFS 实现多读多写的持久化存储。

四、创建文件存储

1. 登录 文件存储 CFS 控制台,进入文件系统页面。

2. 单击创建,在新建文件系统页面中,选择文件系统类型,并单击下一步:详细设置。

3. 在详细设置页面进行相关配置,CFS 类型信息与配置细节可参见 创建文件系统及挂载点 文档。

4. 确认无误之后单击立即购买并完成付费即可创建文件存储。

五、获取文件系统挂载信息

1. 在文件系统页面,单击需获取子目标路径的文件系统 ID,进入该文件系统详情页。

2. 选择挂载点信息页签,从 “Linux下挂载” 获取该文件系统挂载信息。如下:


注意:在挂载点详细中需要记住 IPv4 地址,IPv4 将作为 NFS 路径,后续配置挂载时需要,例如 10.0.0.161:/。

六、创建训练任务

这篇任务以 MNIST 手写数字识别数据集,加两层 CNN 为例,相关示范镜像为上一章 自建镜像,如需自定义镜像,请参见 深度学习容器镜像构建 文档。以下提供两种创建任务的方式。

控制台操作指引Kubectl 操作指引

由于深度学习任务的性质,这篇以部署 Job 节点为例。如何部署 Job 请参见 Job 管理 文档。以下提供控制台的部署范例:

1. 在数据卷(选填)配置项中,选择 NFS 盘,并输入上述步骤创建的 CFS 名称和 IPv4地址。如下:

2. 在实例内容器中的挂载点配置项里,选择数据卷,并配置挂载点。如下:

注意:注意:

你还可以使用 YAML 文件创建任务。

1. 准备 YAML 文件,示例 gpu_pod.yaml 如下:

apiVersion: v1kind: Podmetadata: name: tf-cnn annotations: #eks.tke.cloud.tencent.com/cpu: "8" #eks.tke.cloud.tencent.com/gpu-count: "1" eks.tke.cloud.tencent.com/gpu-type: T4 #eks.tke.cloud.tencent.com/mem: 32Gispec: containers: – name: tf-cnn image: hkccr.ccs.tencentyun.com/carltk/tensorflow-model:latest # 训练任务的镜像 env: – name: MODEL_DIR value: /tf/model – name: DATA_DIR value: /tf/data command: – "sh" – "-c" # 触发训练任务的脚本 – "python3 official/vision/image_classification/mnist_main.py \\ –model_dir=$MODEL_DIR \\ –data_dir=$DATA_DIR \\ –train_epochs=5 \\ –distribution_strategy=one_device \\ –num_gpus=1 \\ –download" resources: limits: #cpu: "8" #memory: 32Gi nvidia.com/gpu: "1" requests: #cpu: "8" #memory: 32Gi nvidia.com/gpu: "1" volumeMounts: – name: tf-model-cfs mountPath: /tf volumes: – name: tf-model-cfs #训练结果持久化,保存到CFS nfs: path: / #此处填写CFS保存的根目录 server: 10.0.1.8 #此处填写之前创建的CFS的IPv4地址 restartPolicy: OnFailure

2. 执行以下命令完成部署。

kubectl create -f [yaml_name]

注意:除了控制台操作指引中提到的 注意事项,还需注意:

七、查看运行结果

以下提供控制台和命令行两种方式查看运行结果:

控制台查看命令行查看

在创建 Job 之后,默认进入 Job 管理页面。你也可以通过以下步骤进入 Job 管理页面:

1. 登录容器服务控制台,选择左侧导航栏中的 集群。

2. 在集群列表中,单击需要查看的事件集群 ID,进入集群管理页面。

3. 选择工作负载 > Job,在 Job 列表中单击上述步骤创建的 Job。

·选择事件页签查看事件:


·选择日志页签查看日志:


你可以使用命令查看事件或日志:

·执行以下命令查看事件:

kubectl describe pod [name]

如下:


·执行以下命令持续输出日志:

kubectl logs -f [pod_name]

如下:

因为 TKE Serverless 即用即消的特性,导致如果需要查看日志,必须当且仅当 Pod 处于 Running 状态时才可查看。解决方法请参见常见问题 日志采集相关。

八、查看存储

如果已经按照前面的配置 NFS,此时可以前往挂载点,查看 NFS 内存储:

1. 执行以下命令进入相关挂载目录,查看是否存在相关目录。

cd /mound_data

如下:


2. 进入 model 目录,查看目录下是否有相关数据。如下:


3. 进入 data 目录,查看目录下是否有相关数据。如下:


九、在 TKE 上使用 GPU 部署深度学习任务

在 TKE 上部署深度学习任务与 TKE Serverless 的部署几乎没有区别。以使用 kubectl 通过 YAML 部署为例,需要进行以下两点改动:

·创建 TKE 节点时,选择带有 GPU 的节点。详情请参见 新建 GPU 云服务器。

·因为节点自带 GPU 资源,因此无需 Annotations 和 Resources。在实践操作中,你可以保留 Annotations,TKE 不会处理这部分。但是,建议注释掉 Resources,因为在某些情况下可能会导致不合理的资源需求。

十、常见问题

在进行本实践过程中遇到的问题,请参见 常见问题 文档进行排查解决。

赞 (0)
上一篇 4天前
下一篇 4天前