oracle job 每月前十天运行_Tensorflow源码解析7 -- TensorFlow分布式运行时
1 概述
TensorFlow架构设计精巧,在后端运行时这一层,除了提供本地运行时外,还提供了分布式运行时。通过分布式训练,在多台机器上并行执行,大大提高了训练速度。前端用户通过session.run()启动系统执行时,target默认为空字符串"",对应的是本地运行模式。若target以"grpc://"开头,则对应的是分布式运行模式,target指定了要连接的TensorFlow执行引擎。
分布式运行时同样分为client master和worker,只是三者不在同一进程内。分布式运行时同样是围绕计算图Graph来进行的,流程也与本地运行时几乎相同。client负责图的构造,并传递给master。master接收后,启动图的剪枝和分裂,将分裂后的子图发送给多个worker进程。worker进程负责执行计算子图,它会先按照自己所在机器包含的设备,先按照设备进行子图的二次分裂,然后在每个设备上进行子图执行。所有设备执行完毕后,从计算图的终止节点sink中取出数据。
本地运行时通过DirectSession同时管理client master和worker,而分布式运行时则不同。client对应GrpcSession,master对应MasterSession,worker对应WorkerSession。三者使用同一个句柄session_handle进行协同工作。
2 数据交换
和本地运行时类似,分布式运行时也存在跨设备的数据依赖。对于跨设备的数据边,将其分裂,在发送方插入send节点,接收方插入recv节点。如果二者跨进程通信(比如两台不同的服务器),则通过GrpcRemoteRendezvous进行数据交换。如果二者是进程内通信(比如同一台服务器的CPU0和CPU1),则通过IntraProcessRendezvous进行数据交换。上节讲过的本地运行时在运行前,就创建了一个IntraProcessRendezvous对象。
3 分布式集群结构
TensorFlow为分布式运行时,设计了一个精巧的结构。共分为三级。
- 集群cluster,可包含多台服务器,通过ClusterSpec对象描述。它包含多个job,一个job又包含多个Task。一个Task对应一个server。
- Job。将目的相同的Task划归为一个job,使用job_id唯一标示。一般存在两种job。ps将数据发送给worker,待worker运算完毕后再返回给ps,ps再进行数据更新。
- ps:数据存储,负责存储和更新模型的参数,比如w和b。比较适合CPU
- worker:数据计算,负责train和inference时的数据计算工作。比较适合GPU - Task。Task是提供服务的最小单位,它一般单独在一个进程内,通过job_id:task_index唯一标示。一个Task对应一个server,提供MasterService和WorkerService两种服务。
下面是一个集群配置的例子。
tf.train.ClusterSpec({"worker": ["worker0:1111", # /job:worker/task:0"worker1:2222", # /job:worker/task:1"worker2:3333" # /job:worker/task:2],"ps": ["ps0:1111", # /job:ps/task:0"ps1:2222" # /job:ps/task:1
]})
这个集群cluster内包含2个job,一个ps和一个worker。ps又包含2个task,worker则包含3个task,共计5个task。
系列文章,欢迎阅读
谢杨易:Tensorflow源码解析1 -- 内核架构和源码结构zhuanlan.zhihu.com
谢杨易:Tensorflow源码解析2 -- 前后端连接的桥梁 - Sessionzhuanlan.zhihu.com
谢杨易:Tensorflow源码解析3 -- TensorFlow核心对象 - Graphzhuanlan.zhihu.com
谢杨易:Tensorflow源码解析4 -- 图的节点 - Operationzhuanlan.zhihu.com
谢杨易:Tensorflow源码解析5 -- 图的边 - Tensorzhuanlan.zhihu.com
谢杨易:Tensorflow源码解析6 -- TensorFlow本地运行时zhuanlan.zhihu.com
谢杨易:Tensorflow源码解析7 -- TensorFlow分布式运行时zhuanlan.zhihu.com
oracle job 每月前十天运行_Tensorflow源码解析7 -- TensorFlow分布式运行时相关推荐
- 判定两个tensor维度相同_Tensorflow源码解析5 -- 图的边 - Tensor
1 概述 前文两篇文章分别讲解了TensorFlow核心对象Graph,和Graph的节点Operation.Graph另外一大成员,即为其边Tensor.边用来表示计算的数据,它经过上游节点计算后得 ...
- 【深度学习实战03】——YOLO tensorflow运行及源码解析
本文章是深度学习实战系列第三讲文章,以运行代码+源码分析 为主: 转载请注明引用自:https://blog.csdn.net/c20081052/article/details/80260726 首 ...
- Handler消息机制(十):HandlerThread源码解析
作为Android开发者都知道在子线程中使用Handler必须要创建Looper,其实HandlerThread就是在线程中封装了Looper的创建和循环,不用我们开发者自己去创建它,下面我们来看看源 ...
- Spring源码分析(十)依赖注入源码解析3:DefaultListableBeanFactory#doResolveDependency 真正开始解析依赖项
4.2 真正开始解析依赖项(最核心方法) org.springframework.beans.factory.support.DefaultListableBeanFactory#doResolveD ...
- dubbo源码解析(三十五)集群——cluster
集群--cluster 目标:介绍dubbo中集群容错的几种模式,介绍dubbo-cluster下support包的源码. 前言 集群容错还是很好理解的,就是当你调用失败的时候所作出的措施.先来看看有 ...
- dubbo源码解析(十)远程通信——Exchange层
远程通讯--Exchange层 目标:介绍Exchange层的相关设计和逻辑.介绍dubbo-remoting-api中的exchange包内的源码解析. 前言 上一篇文章我讲的是dubbo框架设计中 ...
- 第十四课 k8s源码学习和二次开发原理篇-调度器原理
第十四课 k8s源码学习和二次开发原理篇-调度器原理 tags: k8s 源码学习 categories: 源码学习 二次开发 文章目录 第十四课 k8s源码学习和二次开发原理篇-调度器原理 第一节 ...
- Java并发编程(十六):CyclicBarrier源码分析
前言 CyclicBarrier可以建立一个屏障,这个屏障可以阻塞一个线程直到指定的所有线程都达到屏障.就像团队聚餐,等所有人都到齐了再一起动筷子.根据Cyclic就可以发现CyclicBarri ...
- Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树
Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 文章目录 Alink漫谈(十六) :Word2Vec源码分析 之 建立霍夫曼树 0x00 摘要 0x01 背景概念 1.1 词向量 ...
最新文章
- Java泛型中? 和 ? extends Object的异同分析
- openLayers3 中实现多个Overlay
- 2021-03-15 final value theorem 终值定理
- Vue学习笔记(八) 组件进阶
- linux内核那些事之buddy
- 第七章 Android嵌入式组态软件
- 【图文】Latex 中文字体的使用
- jsp在线预览Word文档操作步骤(自己测试的)
- 图像坐标球面投影_从球面到平面的投影
- 利用 Python 优雅地将 PDF 转换成图片
- win10修复tcp驱动服务器,怎么解决tcpip.sys文件导致蓝屏|Win10的tcpip修复工具
- 【云计算】一文了解裸金属服务器(一)
- Unity实现相机漫游功能
- epoch, batch, iteration
- 管理经济学第一遍总结
- 前端面试必会 | 一文读懂 JavaScript 中的 this 关键字
- docker、K8S、k3s、rancher
- 柔性印刷电路板(PCB)的设计方法、类型等详细解析
- 智慧管廊综合管理系统设计方案
- 信息论复习—线性分组码的基本性质