FlyAI小课堂:Tensorflow-分布式训练
人工智能学习离不开实践的验证,推荐大家可以多在FlyAI-AI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力。FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台。每周免费提供项目开源算法样例,支持算法能力变现以及快速的迭代算法模型。
目录
- 简介
- 构建步骤
- 实现方式
- Demo演示
一、简介
1. 使用单台机器或者单个GPU/CPU来进行模型训练,训练速度会受资源的影响,因为毕竟单个的设备的计算能力和存储能力具有一定的上限的,针对这个问题,TensorFlow支持分布式模型运算,支持多机器、多GPU、多CPU各种模型的组合运行方案的设计。(默认情况下,TensorFlow程序会将程序运行在第一个GPU上<如果有GPU,并且安装的TensorFlow支持GPU运行>)
2. TensorFlow的分布式支持单机多GPU、单机GPU+CPU、多机GPU等结构,不过所有结构的构建方式基本类似。
3. 除了TensorFlow外,Caffe、DeepLearning4j等也支持分布式训练,TensorFlow中的集群(Cluster)指的是一系列能够对TensorFlow中的图(graph)进行分布式计算的任务(task)。每个任务是同服务(server)相关联的。TensorFlow中的服务会包含一个用于创建session的主节点和至少一个用于图运算的工作节点。另外在TensorFlow中,一个集群可以被拆分为一个或者多个作业(job),每个作业可以包含至少一个任务。
4. cluster(集群)、job(作业)、task(任务)概念:三者可以简单的看成是层次关系,task可以看成每台机器上的一个进程,多个task组成job;job又有:ps、worker两种,分别用于参数服务、计算服务,组成cluster。
二、构建步骤
TensorFlow分布式集群的构建主要通过代码实现,主要步骤如下:
①创建集群(Cluster)
- 创建一个tf.train.ClusterSpec用于对集群中的所有任务进行描述,该描述内容对于所有内容应该是相同的。
- 创建tf.train.Server并将tf.train.ClusterSpec中参数传入构造函数,
②使用tf.device API指定运算的设备,构建计算图,最后提交运算
备注:TensorFlow负责内部作业之间的数据传输
详细见最后的实验代码。
三、实现方式
TensorFlow中主要包含两个方面
第一:对不同数据大小进行计算的任务(work作业)
第二:用于不停更新共享参数的任务(ps作业)。这样任务都可以运行不同在机器上,在TensorFlow中,主要实现方式如下:
- 图内的拷贝(In-Graph Replication)
- 图间的拷贝(Between-Graph Replication)
- 异步训练(Asynchronous Training)
- 同步训练(Synchronous Training)
3.1 在In-Graph Replication
指定整个集群由一个客户端来构建图,并且这个客户端来提交图到集群中,worker只负责处理执行任务。In-Graph模式的好处在于解耦了TensorFlow集群和训练应用之间的关系,这样可以提前构建好参数服务器和计算服务器,而这些角色本身不需要额外的逻辑代码,只需要使用join等待即可,真正的训练逻辑全部位于客户端,具有足够高的灵活性。
备注:在小规模数据集的情况下,经常使用。在海量数据的训练过程中,不建议使用该方式,建议使用Between-Graph Replication模式。
3.2 在Between-Graph Replication
每个客户端会构建一个相似的图结构,该结构中的参数均通过ps作业进行声明并使用tf.train.replica_device_setter方法将参数映射到不同的任务作业中。
3.3 Synchronous Training
在同步训练中,每个graph的副本读取相同的parameter值,并行的计算,然后将计算完的结果放到一起处理。在TensorFlow中,如果是Betweengraph replication的情况下,可以通tf.train.SyncReplicasOptimizer来处理,如果是In-graph replication情况下,直接对结果进行处理即可(比如平均).
3.4 Asynchronous Training
在异步训练中,每个任务计算完后,就会直接使用计算出的结果更新parameter值。不同的任务之间不存在协调进度。
同步训练需要等待最慢的一个任务执行完后,才可用更新参数;异步训练中,可以每执行完一个任务,就更新一次参数。一般情况下,建议使用异步训练。
四、Demo演示
server-demo.py服务器代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
客户端代码:client-demo01
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
执行:
1、通过命令行,进入对应环境:我的是activate tensorflow-gpu,再进入对应server-demo.py所在文件夹,重复打开5个,分别输入(虽然最后结果只是在最后3335中显示,但是必须要全部运行,才能运算出结果):
python server-demo.py --job_name=ps --task_index=0
python server-demo.py --job_name=ps --task_index=1
python server-demo.py --job_name=work --task_index=0
python server-demo.py --job_name=work --task_index=1
python server-demo.py --job_name=work --task_index=2
2、运行客户端,最后结果如下:
————————————————
更多精彩内容请访问FlyAI-AI竞赛服务平台;为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台;每周免费提供项目开源算法样例,支持算法能力变现以及快速的迭代算法模型。
挑战者,都在FlyAI!!!
FlyAI小课堂:Tensorflow-分布式训练相关推荐
- Tensorflow分布式训练的调度方案
背景 随着机器学习和人工智能的迅猛发展,业界出现了许多开源的机器学习平台.由于机器学习与大数据天然的紧密结合,基于 Hadoop Yarn 的分布式任务调度仍是业界主流,但是随着容器化的发展,Dock ...
- 深度学习(五十五)tensorflow分布式训练
tensorflow分布式训练 博客:http://blog.csdn.net/hjimce 微博:黄锦池-hjimce qq:1393852684 情况一.单机单卡 单机单卡是最普通的情况,当然 ...
- 阿里云高性能AI服务 -- 基于Docker和EGS一键创建高性能Tensorflow分布式训练
一. 概述 Tensorflow是目前使用最为广泛的深度学习框架之一,但是目前搭建分布式多机多卡训练比较困难,而且Tensorflow原生的分布式的性能很差,特别在云计算虚拟化环境下并行的挑战更大. ...
- Tensorflow分布式训练原理
以下文章摘录自: <机器学习观止--核心原理与实践> 京东: https://item.jd.com/13166960.html 当当:http://product.dangdang.co ...
- tensowflow 训练 远程提交_一文说清楚Tensorflow分布式训练必备知识
Note: 原文发表于我的知乎专栏:算法工程师的自我修养,欢迎关注! Methods that scale with computation are the future of AI. -Rich S ...
- 如何像用MNIST一样来用ImageNet?这里有一份加速TensorFlow分布式训练的梯度压缩指南
作者 | 王佐 今年的 NIPS 出现 "Imagenet is the new MNIST" 口号,宣告使用 MNIST 数据集检验网络模型性能已经成为过去式.算法工程师们早就意 ...
- 阿里云深度学习实验室(DL-Lab) -- 基于Docker和EGS一键创建高性能Tensorflow分布式训练
原文链接:点击打开链接 摘要: ## 一. 概述 Tensorflow是目前使用最为广泛的深度学习框架之一,但是目前搭建分布式多机多卡训练比较困难,而且Tensorflow原生的分布式的性能很差. 为 ...
- FlyAI小课堂:Tensorflow基操
人工智能学习离不开实践的验证,推荐大家可以多在FlyAI-AI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力.FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台.每周免费提供 ...
- FlyAI小课堂:深度学习论文翻译解析(3):丰富的特征层次结构,可实现准确的目标检测和语义分割
论文标题:Rich feature hierarchies for accurate object detection and semantic segmentation 标题翻译:丰富的特征层次结构 ...
最新文章
- luogu5024 [NOIp2018]保卫王国 (动态dp)
- 云服务器上mysql数据库环境安装配置
- iOS学习之基本概念
- c++的STL--1概念通述
- sqlite 设置向下递增
- 公众号 接收规则 消息_微信公众平台 发送模板消息(Java接口开发)
- cad vba 打开文件对话框_CAD每次打开系统都会新建一个Acad.vlx文件,如何解决呢?...
- 体力劳动和脑力劳动有什么区别?
- Java实现分页功能 代码很粗糙,都是根据自己所需去定义逻辑功能的。
- 论文解读——An Analysis of Scale Invariance in Object Detection – SNIP
- 拖拽上传技术-----html5[转载]
- Android Dialog的简单说明
- Python词频统计(去重)
- 【Flutter实战静态页面】--在线点餐app(1)顶端栏
- 《俄罗斯方块》项目简介
- 亚马逊AWS Kinesis Video Streams with KVS demo示例
- 用JavaScript实现倒记时特效代码--Java自学网
- 【登录时验证码一直错误】阿里云SLB负载均衡,如何session共享
- 字符串模式匹配--KMP之美
- xilinx -- 逻辑单元CLB、Slice、LUT
热门文章
- 【UiPath2022+C#】UiPath 练习-Excel和数据表
- FreeModbus功能码
- 网络安全法-身份鉴别
- 强联通分量,双联通分量详解
- 百度AnyQ之三—anyq系统框架和功能
- 【MySQL数据备份与恢复】【安装xtrabackup 备份工具】【完全备份流程】【增量备份流程】【差异备份流程】
- 食之有度,吃太饱也会心“痛”,这种习惯要改掉
- 寄生式组合继承能否优化?
- 【领域泛化】论文介绍《Learning to balance specificity and invariance for in and out of domain generalization》
- 线程的4种创建方式及区别