tensorflow分布式训练
来源:互联网 发布:matlab对数据归一化 编辑:程序博客网 时间:2024/05/16 09:16
情况一、单机单卡
单机单卡是最普通的情况,当然也是最简单的,示例代码如下:
情况二、单机多卡
单机多卡,只要用device直接指定设备,就可以进行训练,SGD采用各个卡的平均值,示例代码如下:
情况三、多机多卡
一、基本概念
Cluster、Job、task概念:三者可以简单的看成是层次关系,task可以看成每台机器上的一个进程,多个task组成job;job又有:ps、worker两种,分别用于参数服务、计算服务,组成cluster。
二、同步SGD与异步SGD
1、所谓的同步更新指的是:各个用于并行计算的电脑,计算完各自的batch 后,求取梯度值,把梯度值统一送到ps服务机器中,由ps服务机器求取梯度平均值,更新ps服务器上的参数。
如下图所示,可以看成有四台电脑,第一台电脑用于存储参数、共享参数、共享计算,可以简单的理解成内存、计算共享专用的区域,也就是ps job;另外三台电脑用于并行计算的,也就是worker task。
这种计算方法存在的缺陷是:每一轮的梯度更新,都要等到A、B、C三台电脑都计算完毕后,才能更新参数,也就是迭代更新速度取决与A、B、C三台中,最慢的那一台电脑,所以采用同步更新的方法,建议A、B、C三台的计算能力都不想。
2、所谓的异步更新指的是:ps服务器收到只要收到一台机器的梯度值,就直接进行参数更新,无需等待其它机器。这种迭代方法比较不稳定,收敛曲线震动比较厉害,因为当A机器计算完更新了ps中的参数,可能B机器还是在用上一次迭代的旧版参数值。
三、代码编写
1、定义集群
比如假设上面的图所示,我们有四台电脑,四台电脑的名字假设为:A、B、C、D,那么集群可以定义如下
然后我们需要写四分代码,这四分代码文件大部分相同,但是有几行代码是各不相同的。
2、在各台机器上,定义server
比如A机器上的代码server要定义如下:
3、在代码中,指定device
在深度学习训练中,一般图的计算,对于每个worker task来说,都是相同的,所以我们会把所有图计算、变量定义等代码,都写到下面这个语句下:
函数replica_deviec_setter会自动把变量参数定义部分定义到ps服务中(如果ps有多个任务,那么自动分配)。下面举个例子,假设现在有两台机器A、B,A用于计算服务,B用于参数服务,那么代码如下:
把该代码在机器A上运行,你会发现,程序会进入等候状态,等候用于ps参数服务的机器启动,才会运行。因此接着我们在机器B上运行如下代码:
分布式训练需要熟悉的函数:
tf.train.Server
tf.train.Supervisor
tf.train.SessionManager
tf.train.ClusterSpec
tf.train.replica_device_setter
tf.train.MonitoredTrainingSession
tf.train.MonitoredSession
tf.train.SingularMonitoredSession
tf.train.Scaffold
tf.train.SessionCreator
tf.train.ChiefSessionCreator
tf.train.WorkerSessionCreator
参考文献:
https://www.tensorflow.org/versions/master/how_tos/distributed/index.html
- tensorflow分布式训练
- 深度学习(五十五)tensorflow分布式训练
- tensorflow 分布式 全局变量 数据并行 同步训练 in-graph 实例
- tensorflow 分布式 数据并行 异步训练 between-graph 实例
- tensorflow 分布式 数据并行 同步训练 between-graph 实例
- 在kubernetes 集群上运行分布式tensorflow训练
- 分布式TensorFlow
- 分布式tensorflow
- 分布式tensorflow
- 分布式 tensorflow
- tensorflow 分布式 数据并行 异步训练 between-graph 自己写的实例 CNN
- tensorflow 分布式 数据并行 异步训练 between-graph 自己写的实例 RNN
- keras&tensorflow+分布式训练︱实现简易视频内容问答框架
- 重要更新 | 谷歌发布 TensorFlow 1.4,迁移Keras,支持分布式训练
- tensorflow系列(3)分布式tensorflow
- tensorflow 训练mnist数据
- TensorFlow训练Logistic回归
- TensorFlow训练一次函数
- Maven实战
- Maven工程使用Junit进行单元测试
- Java排序算法 堆排序
- configured time (StuckThreadMaxTime) of "600" seconds
- 地名经纬度互相转换
- tensorflow分布式训练
- A*算法
- jquery中的 $(#id)与document.getElementById( id )的区别
- Hibernate主键生成策略
- package.json详解
- Kotlin和RecyclerView的一个demo
- Struts2配置详解_配置Action
- laravel 路由组 中添加中间件
- Intellij Idea 创建Web项目并部署servlet