分布式Tensorflow原理初探

因工作缘故最近正在对深度学习框架Tensorflow的分布式原理发起猛攻,官网、白皮书和各博客所述稍有偏差,易对新人造成困惑,经过多天推敲,现将心得总结如下,以记录想法为目的,也望大神不吝赐教。

分布式TF采用PS架构,集群中的节点分为parameter server节点和worker节点。ps和worker代表的是节点所做的task(详见下文),每个循环中ps的任务是分发参数给worker,worker完成计算密集型任务后将梯度回传给ps,ps集中处理各梯度并以此更新参数。

分布式训练策略有模型并行与数据并行之分,TF中一般采用数据并行,即在各worker节点用相同的流图计算不同的数据。具体到分布式TF的训练策略又有图内复制(In-graph)和图间复制(Between-graph)两种复制策略,每种策略又分为同步与异步两种方式。

Repliction

In-graph模式只存在一个Client进程(Client详见下文介绍),这个Client只创建一个Session,这个Session只构建一个图,并将计算密集型的部分复制到各个worker节点。而Between-graph模式中每个承担worker任务的节点中都存在一个Client进程(通常与worker在同一进程中),每个Client都构建一张图,包含所有参数部分与计算部分。这是二者的主要区别。

同步与异步比较好理解,同步是指每次参数更新需要等待所有worker上传梯度再一起更新,异步是指有worker上传就更新参数。同步方式比较稳定但异步方式效率较高且有一定的跳出局部最小的作用。因分布式集群主要想解决的也是训练时长问题,故目前TF中常采用的是异步Between-graph.

目前一些工程师分享的博客中常用下图来介绍分布式TF与单机TF的区别,此处极易造成迷惑。此图源于TF白皮书2015,当时并无In-graph与Between-graph之分,故并未说明右图实为In-graph模式,因为Between-graph模式中各Worker Service中都应有独立的Master Service和Client.

In graph and between graph

TF集群由Server、Client组成,各组成部分说明如下:

Server是服务器进程,一个运行tf.train.Server的实例,是分布式TF集群的重要组成部分,TF Server采用主从模式,一个Server可输出一个Master Service和一个Worker Service。

Server

Master Service是一个RPC(远程过程调用)服务,作用有三个:一是实现集群设备的远程访问;二是作为session的target,它也是tf::Session的接口,三是负责一或多个Worker Service的任务分配。一个Master对对应多个Worker的情况是这样的,在In-graph模式下,比如一机多卡,每个GPU卡都可以启动一个Server并输出Master Service和Worker Service,但只有一个Server输出的Master Service起实质作用,作为Session target并负责与其他Worker沟通工作。

Master

Worker Service也是一个RPC服务,调配本地设备实现子图的计算。每一个图计算任务称为task,task又分为ps(参数服务器)task和worker task(计算密集型任务处理),ps和worker的集合各自组成一个job。

Worker

Client构成TF的计算图并构建tf::Session来与集群会话。在分布式集群中,创建session需要指定target(target默认值在本地故单机模式无需指明),由上文所提的Master Service提供(通过server.target调用)。一个Client可与多个Server联接(In-graph模式);一个Server也可以服务多个Client,也就是在Client构建session时将target同时指定一个server.

Client

Server与task是一一对应的,在构建节点时时使用tf.train.ClusterSpec方法,通过ip:port定义server所在位置,并指定task类型(所属job集合)。

cluster = tf.train.ClusterSpec({

"worker": [   "worker0.example.com:2222",   "worker1.example.com:2222", "worker2.example.com:2222"],

"ps": [   "ps0.example.com:2222",   "ps1.example.com:2222"]})

之后使用tf.train.Server创建Server,指定集群,jobname和task_index以作为Server节点的身份识别标志。

server = tf.train.Server(cluster,job_name="worker", task_index=0)

如果是In-graph模式,只需指定一个ip:port来说明在哪个Server的target上创建session,而在Between-graph模式下参数服务器只需要通过join( )方法使进程进入待命状态,而worker task节点需要使用tf.train.replica_device_setter( )方法来创建session,并建立ps task与worker task之间的映射,此方法在Between-graph模式中最为关键,需要提供cluster,worker_device, ps_device等参数。

withtf.device(tf.train.replica_device_setter(

worker_device="/job:worker/task:%d" %FLAGS.task_index,

cluster=cluster)):

replica_device_setter方法

在replica_device_setter方法中会根据ps_strategy设定参数在ps集群的分配方式,而且会判断其下的操作是否属于ps op,从而判断需要放在负责ps task还是负责worker task的节点上,TF源码中有具体的逻辑代码。下图即为ps op,需要放在负责ps task的节点,所有其他操作均为worker op,放在负责worker task的节点.

PS操作集合

Ref:

[1]http://download.tensorflow.org/paper/whitepaper2015.pdf

[2]https://tensorflow.google.cn/deploy/distributed

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容