【DSW Gallery】如何使用DLC进行TensorFlow 2.x 分布式训练

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 如何使用DLC进行TensorFlow 2.x 分布式训练

直接使用

请打开如何使用DLC进行TensorFlow 2.x 分布式训练,并点击右上角 “ 在DSW中打开” 。

image.png

如何使用DLC进行Tensorflow2的分布式训练

基于云原生深度学习训练平台DLC可以进行分布式训练,本文以TensorFlow分布式训练为例,讲述如何使用DLC进行TensorFlow分布式训练。一般来说,分布式TensorFlow的使用者需要关心下面3件事情:

  1. 寻找足够运行训练的资源。在数据并行的情况下,有下列两种模式: a. PS/Worker模式 b. AllReduce模式 两种模式各有优点,PS/Worker模式为例,展示如何使用DLC进行TensorFlow的数据并行模式的分布式训练。
  2. 安装和配置支撑程序运算的软件和应用
  3. 根据分布式TensorFlow的设计,需要配置ClusterSpec。这个json格式的ClusterSpec是用来描述整个分布式训练集群的架构,比如需要使用两个Worker和PS。一般而言,我们需要在模型代码中去手动的配置ClusterSpec中的worker和ps的属性,这样告诉我们的训练框架他们的彼此的位置,然后在训练的过程中实现weight的归集和分发。

针对上面的三个点,DLC都相应的给出了很便捷,基于云原生的解决方案。

  1. DLC是云原生的深度学习训练平台,所以基于k8s的调度能力和云的资源,可以很好的实现CPU/GPU的按需高效调度
  2. 第二点实际上是运行环境,这一点Docker完美契合这个场景
  3. 最后一点, 针对不同版本的TensorFlow,需要有不同的处理方式。对于TensorFlow 1.x版本而言,我们将配置ClusterSpec的工作自动化的完成,用户可以从模型代码中获取TF_CONFIG环境变量,然后按照实际的模型逻辑的需求进行适配.

TensorFlow 2.x 针对分布式训练进行了进一步分封装,可以很方便的将单机版本的代码修改称为分布式训练的代码:

(1). MirroredStrategy

MirroredStrategy 是一种单机的同步的分布式训练策略。它支持在一台机器的多个 GPU 之间进行分布式训练,它会在每个 GPU 上创建一个模型副本,模型中的每个变量 (Variables) 都会进行镜像复制并放置到相应的 GPU 上,这些变量被称作镜像变量 (MirroredVariable)。 MirroredStrategy 策略通过 AllReduce 算法使得所有镜像变量在每个 GPU 之间保持同步更新, AllReduce 算法默认使用英伟达的 NcclAllReduce ,也可以通过 cross_device_ops 参数修改为其他的 AllReduce 算法,如 HierarchicalCopyAllReduce 。 MirroredStrategy 策略会自动使用所有能被 TensorFlow 发现的 GPU 来做分布式训练,如果只想使用部分的 GPU 则可以通过 devices 参数来指定。 MirroredStrategy 实例的创建代码如下所示:

指定特定device来初始化MirroredStrategy的方式
strategy = tf.distribute.MirroredStrategy(  
    devices=["/gpu:0", "/gpu:1"],
    cross_device_ops=tf.distribute.HierarchicalCopyAllReduce(),
)

如果 TensorFlow 没有发现 GPU 则默认会退化为使用 CPU 来进行训练。 MirroredStrategy 的典型使用场景为单机多 GPU 。

(2). MultiWorkerMirroredStrategy

MultiWorkerMirroredStrategy 策略与 MirroredStrategy 策略很相似,可以理解为MirroredStrategy 策略的多机的同步的分布式训练版本,它也会在每一台机器上创建所有变量的副本。 MultiWorkerMirroredStrategy 策略目前有两种可供选择的 CollectiveOps 。 一种为 CollectiveCommunication.RING ,它使用 gRPC 作为通信层实现了基于环的 AllReduce 操作。 另一种为 CollectiveCommunication.NCCL, 它使用了英伟达的 NCCL 库来实现 AllReduce 操作。在实际使用中,可以基于自己的运行环境选择合适的 CollectiveOps,或者使用 CollectiveCommunication.AUTO 交由 TensorFlow 运行时自行选择。 MultiWorkerMirroredStrategy 实例的创建代码如下所示:

multiworker_strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy(
    tf.distribute.experimental.CollectiveCommunication.RING)  

MultiWorkerMirroredStrategy 策略因为要涉及到多个 worker 节点之间的通信交互,因此每个 worker 节点需要提前获知集群中各节点配置信息以便在变量更新时使用。 TensorFlow 中定义集群配置信息的标准方式是使用 TF_CONFIG 环境变量来实现的,该环境变量定义了集群中所有节点的配置信息,包括所有 worker 节点的网络地址,当前 worker 节点的索引 (index) 以及当前 worker 节点的角色 (type)。 由于DLC拉起的分布式TensorFlow训练任务的镜像中已经包含了当前JOB的TF_CONFIG信息,所以不需要手动的去处理。 如果所有 worker 节点都不包含 GPU ,则该策略会退化为使用 CPU 在多个 worker 节点间进行分布式训练。如果集群中的 worker 节点数量只有一个则该策略会退化为 MirroredStrategy 策略。

1. 创建新的工作空间

image.png

2. 进入工作空间,新增代码配置

也可以参考: https://help.aliyun.com/document_detail/202277.html

创建新的代码配置: 如下图,用户在创建代码配置的时候,需要输入下列信息:

  1. 代码配置的名称
  2. 代码仓库的Git地址
  3. 如果用用户名密码或者Token,也请输入
  4. 本地存储目录,这个参数定义了代码被clone到容器中之后,保存的路径,默认是 /root/code/ 输入上述信息之后,保存代码配置
  5. image.png

3. 创建数据集配置

目前工作空间中支持下列四种数据集(如下图): 推荐使用阿里云存储,这样无论是性能还是可靠性都有保障

image.png

下面以阿里云存储的数据集为例,展示如何创建数据集。 目前支持两种阿里云存储:

NAS:

这里有三个参数:

  1. 数据存储类型:本例选择NAS
  2. 选择要挂载的NAS文件系统的ID,这里会有一个列表,列出当前用户所有的NAS文件系统
  3. 挂载路径:这是指定要挂载的文件系统的目录,本例中挂载文件系统的根目录
  4. image.png
  5. OSS:
  6. 数据存储类型:本例选择OSS
  7. 路径: 要挂载的文件系统的路径,可以点击红色框中的按钮选择当前用户所有的OSS文件系统
  8. image.png

4. 提交JOB

本文以PS/Worker模式的分布式训练为例,展示如何使用DLC创建一个TensorFlow分布式训练任务。

image.png

上面图中的配置是JOB的通用配置,下面选择“进阶模式”,配置分部署训练相关的规格信息:

image.png

image.png

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
1月前
|
机器学习/深度学习 算法 TensorFlow
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
98 0
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
|
6月前
|
TensorFlow 算法框架/工具
tensorflow/train训练指令
tensorflow/train训练指令
40 0
|
1月前
|
机器学习/深度学习 TensorFlow 调度
优化TensorFlow模型:超参数调整与训练技巧
【4月更文挑战第17天】本文探讨了如何优化TensorFlow模型的性能,重点介绍了超参数调整和训练技巧。超参数如学习率、批量大小和层数对模型性能至关重要。文章提到了三种超参数调整策略:网格搜索、随机搜索和贝叶斯优化。此外,还分享了训练技巧,包括学习率调度、早停、数据增强和正则化,这些都有助于防止过拟合并提高模型泛化能力。结合这些方法,可构建更高效、健壮的深度学习模型。
|
1月前
|
机器学习/深度学习 运维 监控
TensorFlow分布式训练:加速深度学习模型训练
【4月更文挑战第17天】TensorFlow分布式训练加速深度学习模型训练,通过数据并行和模型并行利用多机器资源,减少训练时间。优化策略包括配置计算资源、优化数据划分和减少通信开销。实际应用需关注调试监控、系统稳定性和容错性,以应对分布式训练挑战。
|
8月前
|
Java TensorFlow 算法框架/工具
【tensorflow】TF1.x保存.pb模型 解决模型越训练越大问题
在上一篇博客【tensorflow】TF1.x保存与读取.pb模型写法介绍介绍的保存.pb模型方法中,保存的是模型训练过程中所有的参数,而且训练越久,最终保存的模型就越大。我的模型只有几千参数,可是最终保存的文件有1GB。。。。
|
8月前
|
机器学习/深度学习 存储 自然语言处理
|
1月前
|
机器学习/深度学习 人工智能 API
人工智能应用工程师技能提升系列2、——TensorFlow2——keras高级API训练神经网络模型
人工智能应用工程师技能提升系列2、——TensorFlow2——keras高级API训练神经网络模型
55 0
|
1月前
|
机器学习/深度学习 数据可视化 TensorFlow
用TensorBoard可视化tensorflow神经网络模型结构与训练过程的方法
用TensorBoard可视化tensorflow神经网络模型结构与训练过程的方法
172 1
|
6月前
|
机器学习/深度学习 存储 TensorFlow
Azure 机器学习 - 使用 Visual Studio Code训练图像分类 TensorFlow 模型
Azure 机器学习 - 使用 Visual Studio Code训练图像分类 TensorFlow 模型
86 0
|
7月前
|
机器学习/深度学习 TensorFlow API
学习 TensorFlow:构建和训练机器学习模型的利器
学习 TensorFlow:构建和训练机器学习模型的利器