基于UAI-Train平台的分布式训练

栏目: 后端 · 发布时间: 7年前

内容简介:在大型数据集上进行训练的现代神经网络架构,可以跨广泛的多种领域获取可观的结果,涵盖从图像识别、自然语言处理到欺诈检测和推荐系统等各个方面,但训练这些神经网络模型需要大量浮点计算能力。虽然,近年来 GPU 硬件算力和训练方法上均取得了重大进步,但在单一机器上,网络训练所需要的时间仍然长得不切实际,因此需要借助分布式GPU环境来提升神经网络训练系统的浮点计算能力。TensorFlow 采用了数据流范式, 使用节点和边的有向图来表示计算。TensorFlow 需要用户静态声明这种符号计算图,并对该图使用复写和分

在大型数据集上进行训练的现代神经网络架构,可以跨广泛的多种领域获取可观的结果,涵盖从图像识别、自然语言处理到欺诈检测和推荐系统等各个方面,但训练这些神经网络模型需要大量浮点计算能力。虽然,近年来 GPU 硬件算力和训练方法上均取得了重大进步,但在单一机器上,网络训练所需要的时间仍然长得不切实际,因此需要借助分布式GPU环境来提升神经网络训练系统的浮点计算能力。

TensorFlow分布式训练

基于UAI-Train平台的分布式训练

(TensorFlow分布式训练概述图)

TensorFlow 采用了数据流范式, 使用节点和边的有向图来表示计算。TensorFlow 需要用户静态声明这种符号计算图,并对该图使用复写和分区(rewrite & partitioning),将其分配到机器上进行分布式执行。

基于UAI-Train平台的分布式训练

(TensorFlow训练数据流转图)

TensorFlow 中的分布式机器学习训练使用了如图所示的参数服务器方法 。

Cluster、Job、Task

关于TensorFlow的分布式训练,主要概念包括Cluster、Job、Task,其关联关系如下:

1. TensorFlow分布式Cluster由多个Task组成,每个Task对应一个tf.train.Server实例,作为Cluster的一个单独节点; 2.   多个相同作用的Task可以被划分为一个Job,在分布式深度学习框架中,我们一般把Job划分为Parameter Server和Worker,Parameter Job是管理参数的存储和更新工作,而Worker Job运行OPs,作为计算节点只执行计算密集型的Graph计算; 3.  Cluster中的Task会相对进行通信,以便进行状态同步、参数更新等操作,如果参数的数量过大,一台机器处理不了,这就要需要多个Task。

TensorFlow分布式计算模式

◆  In-graph 模式

In-graph模式,将模型计算图的不同部分放在不同的机器上执行。把计算从单机多GPU扩展到了多机多GPU, 不过数据分发还是在一个节点。这样配置简单, 多机多GPU的计算节点只需进行join操作, 对外提供一个网络接口来接受任务。训练数据的分发依然在一个节点上, 把训练数据分发到不同的机器上, 将会影响并发训练速度。在大数据训练的情况下, 不推荐使用这种模式。

◆  Between-graph 模式

Between-graph模式下,数据并行,每台机器使用完全相同的计算图。训练的参数保存在参数服务器,数据不用分发,而是分布在各个计算节点自行计算, 把要更新的参数通知参数服务器进行更新。这种模式不需要再练数据的分发, 数据量在TB级时可以节省大量时间,目前主流的分布式训练模式以 Between-graph为主。

参数更新方式

◆  同步更新

各个用于并行计算的节点,计算完各自的batch 后,求取梯度值,把梯度值统一送到PS参数服务机器中,并等待PS更新模型参数。PS参数服务器在收集到一定数量计算节点的梯度后,求取梯度平均值,更新PS参数服务器上的参数,同时将参数推送到各个worker节点。

◆  异步更新

PS参数服务器只要收到一台机器的梯度值,就直接进行参数更新,无需等待其它机器。这种迭代方法比较不稳定,因为当A机器计算完更新了PS参数服务器中的参数,可能B机器还是在用上一次迭代的旧版参数值

分布式训练步骤

1. 命令行参数解析,获取集群的信息ps_hosts和worker_hosts,以及当前节点的角色信息job_name和task_index

2. 创建当前Task结点的Server

cluster = tf.train.ClusterSpec({“ps”: ps_hosts, “worker”: worker_hosts})server = tf.train.Server(cluster, job_name=FLAGS.job_name, task_index=FLAGS.task_index)

3. 如果当前节点是Parameter Server,则调用server.join()无休止等待;如果是Worker,则执行下一步

if FLAGS.job_name == “ps”:server.join()

4. 构建要训练的模型

# build tensorflow graph model

5. 创建tf.train.Supervisor来管理模型的训练过程

while not sv.should_stop()

# train model

UAI-Train分布式训练部署

UCloud AI 训练服务(UCloud AI Train)是面向AI训练任务的大规模分布式计算平台,基于高性能GPU计算节点提供一站式托管AI训练任务服务。用户在提交AI训练任务后,无需担心计算节点调度、训练环境准备、数据上传下载以及容灾等问题。

目前,UAI-Train平台支持TensorFlow 和MXNet框架的分布式训练。需要将PS代码和Worker代码实现在同一个代码入口中,执行过程中,PS 和 Worker 将使用相同的 Docker 容器镜像和相同的 python 代码入口进行执行,系统将自动生成PS和Worker的env环境参数。TensorFlow 分布式训练采用PS-Worker的分布式格式,并提供python的接口运行分布式训练。

基于UAI-Train平台的分布式训练 (图:AI训练平台概述)

UAI-Train分布式训练采用Parameter Server和Worker Server混合部署的方法,所有计算节点均由GPU物理云主机组成。PS 仅使用CPU进行计算,Worker Server则同时使用GPU和CPU进行计算,PS 和 Worker的比例为1:1。

基于UAI-Train平台的分布式训练

(图:AI 训练平台分布式训练集群部署范例)

数据存储

分布式训练所使用的输入数据可以来自不同的数据源,目前UAI-Train仅支持UFS作为数据的存储。

◆  Input 数据存储

指定一个UFS网盘作为Input数据源,UAI-Train平台在训练执行过程中会将对应的UFS数据映射到训练执行的Worker容器的 /data/data 目录下,系统会自动将数据映射到执行的容器中,如 ip:/xxx/data/imagenet/tf → /data/data/。

◆  Output 数据存储

指定一个UFS网盘作为output数据源,UAI-Train平台在训练执行过程中会将对应的UFS数据映射到训练执行的每一个PS容器和Worker容器的 /data/output 目录下,并以共享的方式访问同一份数据。同时,在训练过程,可以通过其它云主机实时访问训练保存的模型checkpoint。

案例分析:通过CIFAR-10进行图像识别

CIFAR-10是机器学习中常见的图像识别数据集,该数据集共有60000张彩色图像。这些图像分为10个类,每类6000张图,有50000张用于训练,另外10000用于测试。

http://groups.csail.mit.edu/vision/TinyImages/

基于UAI-Train平台的分布式训练

(图:CIFAR-10数据集简介)

调整训练代码

为了在UAI平台上进行训练,首先下载源代码,并对 cifar10_main.py 做如下修改:

1. 添加相关参数: –data_dir, –output_dir, –work_dir, –log_dir, –num_gpus ,UAI-Train平台将会自动生成这些参数;

2. 在代码中增加UAI参数:使用 data_dir 配置输入文件夹、使用 output_dir 配置输出文件夹。

具体案例代码可以在 https://github.com/ucloud/uai-sdk/tree/master/examples/tensorflow/train/cifar  获取。

在UAI-Train平台执行训练

1. 根据 https://github.com/tensorflow/models/tree/master/tutorials/image/cifar10_estimator 的说明生成 CIFAR-10的tfrecords

2. 使用UAI-SDK提供的 tf_tools.py  生成 CIFAR-10 样例的Docker镜像;

3. 确保Docker镜像已经上传至UHub,在UAI-Train平台上执行。

/data/cifar10_main.py –train-batch-size=16

在UAI平台上的分布式训练

CIFAR-10样例代码使用 tf.estimator.Estimator API ,只需一个分布式环境和分布式环境配置,便可直接进行分布式训练,该配置需要适用于 tf.estimator.Estimator API 的标准,即定义一个 TF_CONFIG  配置。

“task”:{“type”:”worker”,”index”:0},

“environment”:”cloud”

}

UAI-Train平台的分布式训练功能可以自动生成TensorFlow分布式训练的GPU集群环境,同时为每个训练节点自动生成 TF_CONFIG 。因此,在UAI-Train平台上执行 CIFAR-10 的分布式训练和单机训练一样,仅需要指定 input/output 的UFS地址并执行如下指令即可:

/data/cifar10_main.py –train-batch-size=16

总结

UAI-TrainTensorFlow的分布式训练环境实现基于TensorFlow 的分布式训练系统实现,采用默认的grpc协议进行数据交换。PS和Worker采用混合部署的方式部署,PS使用纯CPU计算,Worker使用GPU+CPU计算。

在UAI-Train平台中可以非常方便的开展分布式计算,提高效率、压缩训练时间。最后通过CIFAR-10 案例解析在UAI-Train平台上进行训练所需作出的修改,并在UAI-Train平台上进行分布式训练。

想要获取更多技术和活动资讯,可扫描以下二维码,关注“UCloud技术公告牌”微信公众号;或搜索微信ID:ucloud_tech进行关注。

基于UAI-Train平台的分布式训练


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Tagging

Tagging

Gene Smith / New Riders / 2007-12-27 / GBP 28.99

Tagging is fast becoming one of the primary ways people organize and manage digital information. Tagging complements traditional organizational tools like folders and search on users desktops as well ......一起来看看 《Tagging》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试