大数据频道 频道

Kubeflow实战系列:阿里云上小试TFJob

  【IT168 技术】本系列将介绍如何在阿里云容器服务上运行Kubeflow方案, 本文介绍如何使用TfJob运行模型训练。

  TFJob简介

  模型训练是机器学习最主要的实践场景,尤其以使用机器学习框架TensorFlow进行模型训练最为流行,但是随着机器学习的平台由单机变成集群,这个问题变得复杂了。GPU的调度和绑定,涉及到分布式训练的编排和集群规约属性的配置(cluster spec)也成了数据科学家们巨大的负担。

  为了解决这一问题,一个新的资源类型TFJob,即TensorFlow Job被定义出来了。通过这个资源类型,使用TensorFlow的数据科学家无需编写复杂的配置,只需要关注数据的输入,代码的运行和日志的输入输出。

  TFJob 定义

  简单介绍一下TFJob的定义, TFJob实际上遵循Kubernetes标准的API定义。本文介绍v1alpha1的版本,对于v1alpha2,Kubeflow 0.2会支持,目前仍在开发中。

  TFJob 对象

Kubeflow实战系列:阿里云上小试TFJob

  其中spec 非常重要,以下是其定义。

  TFJobSpec 对象

Kubeflow实战系列:阿里云上小试TFJob

  具体的TFReplicaSpec定义:

  TFReplicaSpec 对象

Kubeflow实战系列:阿里云上小试TFJob

  前提要求

  ·Kubernetes集群包含GPU的能力

  ·Kubeflow核心模块安装

  可以通过以下命令确认tf-operator这个核心组件已经正常启动

  kubectl get deploy -n kubeflow tf-job-operator

  NAMEDESIRED CURRENT UP-TO-DATE AVAILABLE AGE

  tf-job-operator 1 1 11 1m

  运行TFJob进行训练

  其实数据科学家运行模型训练关心的是三件事:

  ·数据从哪里来

  ·如何运行机器学习的代码

  ·训练结果(模型和日志)到哪里去

  对于运行在桌面机上的机器学习代码来说,这是很容易的事情;但是如果您的运行时环境是多台机器的集群环境,这个工作就变得复杂了。而TFJob希望机器学习训练的工程师们在集群的控制节点上实现中心化的配置管理,并且只需要了解如何编写和配置TFJob就能够像在单机上运行机器学习代码。

  本文将提供三个例子阐述如何在云上使用数据和训练结果:

  1. 数据和训练结果都在容器内

  以下为示例yaml:

Kubeflow实战系列:阿里云上小试TFJob

  将该模板保存到mnist-simple-gpu.yaml, 并且创建TFJob:

Kubeflow实战系列:阿里云上小试TFJob

  在Pod运行过程中,可以通过kubectl logs检查训练日志。

Kubeflow实战系列:阿里云上小试TFJob

  从日志中可以看到该训练过程需要先下载数据,再在GPU上进行训练,但是训练出来的结果只是留在了容器里,难于导出。

  如果需要将模型导出,就需要借用Kubernetes的数据卷,我们来看一下第二个例子:

  2. 将训练结果保存在OSS上

  2.1 创建OSS数据卷kubeflow-oss,具体可以参考文档创建OSS Bucket

  2.2 创建OSS的PV, 以下为示例oss-pv.yaml

Kubeflow实战系列:阿里云上小试TFJob

  更多细节,请参考kubernetes配置数据卷

  # kubectl create -f oss-pv.yaml

  persistentvolume "kubeflow-oss-mnist" created

  2.3 利用oss-pvc.yaml创建PVC

Kubeflow实战系列:阿里云上小试TFJob

  一旦完成,就可以运行kubectl get pvc检查pvc的创建结果:

Kubeflow实战系列:阿里云上小试TFJob

  2.4 创建TFJob

Kubeflow实战系列:阿里云上小试TFJob

  将该模板保存到mnist-simple-gpu-oss.yaml, 并且创建TFJob:

Kubeflow实战系列:阿里云上小试TFJob

  一旦TFJob运行, 就能从OSS的客户端看到保存的模型文件,这些文件就会永远保存到OSS Bucket中。

Kubeflow实战系列:阿里云上小试TFJob

  3. 利用NAS上的训练数据进行模型训练

  3.1 创建NAS数据卷,并且设置与当前Kubernetes集群的同一个具体vpc的挂载点。操作详见文档

  3.2 在NAS上创建 /tfdata/tensorflow/input_data的数据文件夹, 下载mnist训练所需要的数据

Kubeflow实战系列:阿里云上小试TFJob

  3.3 创建NAS的PV, 以下为示例nas-pv.yaml

Kubeflow实战系列:阿里云上小试TFJob

  3.4 利用nas-pvc.yaml创建PVC

Kubeflow实战系列:阿里云上小试TFJob

  具体命令:

  # kubectl create -f nas-pvc.yaml

  persistentvolumeclaim "kubeflow-nas-mnist" created

  3.5 创建TFJob

Kubeflow实战系列:阿里云上小试TFJob

  将该模板保存到mnist-simple-gpu-nas.yaml, 并且创建TFJob:

  # kubectl create -f mnist-simple-gpu-nas.yaml

  tfjob "mnist-simple-gpu-nas" created

  通过kubectl logs检查训练日志, 可以看到这里的数据无需下载,直接解包就可以开始训练:

Kubeflow实战系列:阿里云上小试TFJob

  通过TFJob UI查看训练状态

  1. 可以通过kubectl命令查看Jupyter Hub的外网访问ip, 在本例子里,外网ip为120.55.145.9

  2. Kubeflow实战系列:阿里云上小试TFJob

  2. 查看TFJob的UI界面

Kubeflow实战系列:阿里云上小试TFJob

  总结

  tf-operator是Kubeflow的第一个CRD实现,解决的是TensorFlow模型训练的问题,它提供了广泛的灵活性和可配置,可以与阿里云上的NAS,OSS无缝集成,并且提供了简单的UI查看训练的历史记录。可以称得上是数据科学家用于TensorFlow模型训练的利器,与此同时Kubeflow社区还提供了包括pytorch-operator等其他机器学习框架的支持。

0
相关文章