tensorflow学习笔记三

分布式tensorflow就是多台服务器参加一个tensorflow图的分布式执行,分布式我感觉就是原来在一台计算机上面运行好几个进程这些进程交互是由OS控制的,而分布式就是把这些进程放在了不同的机器上面运行,他们之间的交互是由分布式框架控制的,实际分布式的核心或者说基本点还是运行的进程。一提到分布式就会有客服端进程和服务端进程概念,TensorFlow 的分布式集群由多个服务器进程和客户端进程组成。这就类似于在一台机器上以CPU作为ps,多个GPU作为worker一样。tensorflow分布式进程之间的通信是由gRPC谷歌远程进程调用实现的。

分布式tensorflow中,in-graph图内复制的含义是所有operations都在同一个graph中,也就是整个应用只有一个客户端来生成graph,然后把所有operation分配到集群的所有ps和worker上。这样好处是我们可以提前运行多个ps和worker,这些进程只需要调用join()函数等待任务,然后编写新的客户端应用;between-graph图间复制含义是一个分布式应用会创建多个graph,一般是每起一个worker就创建一个graph,因为worker的代码是一样的因此创建出来的graph也是一样的,然后通过把Variable保存到同一套ps集群来进行同步或者异步训练,可以把大数据partition到多台机器上同时起多个worker来读取和训练。同时tensorflow的同步和异步的实现区别在于更新ps的模型参数的策略上。

对于分布式训练神经网络,一般有模型并行和数据并行,分别对应in-graph和between-graph,前者是拆分模型,每个机器得到模型的一部分,多台机器组合起来才是整个模型。后者是拆分数据,每个机器得到的是完整的模型,但是得到的是部分的数据,运行结果通过某种组合方式进行融合。数据并行优势更大。数据并行就需要指定各个worker上的参数同步的方法和PS上参数融合的方法。如果是采用机器之间同步提交参数的方法,面临的问题一个是提交的频率大小,也就是每次minibatch之后都提交参数到PS还是几个minibatch之后提交一次,如果提交的太过频繁那么通信开销和同步开销导致的代价高,如果提交的太不频繁则导致各个机器之间参数差异大而模型模型在融合参数之后变得很差,每个模型训练出来可能都是局部极小值但是融合之后不一定是。另一个问题是一次处理数据量的大小,还是如何分配数据给各个机器。

tensorflow在训练神经网络的时候,在训练阶段需要注意每次灌入的batch大小因为太大导致内存溢出。同时测试测试数据精确度的代码也需要注意灌入的测试数据量大小因为也可能会导致溢出,如果在CPU上运行则显示的是“python已经停止运行”。

tensorflow的编程模型包括一个计算图、nameScope(给图进行层次划分,使得容易通过nameScope和op name来定位op节点)和指定计算设备。tensorflow的运行主要涉及到运行模式、创建session和迭代执行。运行模式当然有单机本地和分布式运行,无论哪种模式都是有client和master的,client把图构建出来,通过session把图发给master,master再可以分割图成为各个CPU/GPU执行的子图进行执行,但是子图之间的依赖是难点。分布式模型则是需要master把图分给各个worker,而且各个worker之间可能会有数据交换。

在每个tensorflow任务代码中,需要1,创建一个 tf.train.ClusterSpec t描述集群中的所有任务,即指定ps和worker服务器的信息。对于每一个任务,这应该是相同的。,2,创建一个 tf.train.Server, 通过tf.train.ClusterSpec 的构造函数,并确定本地任务的工作名称和任务index。服务器分为worker和PS,worker负责执行计算,ps负责存储参数值,而在一个master开启会话,此时需要指定任务的对应的机器。

分布式tensorflow的模板可以参见“白话tensorflow分布式部署和开发”,理论上可以按照该模板将单机版改为分布式版本的,程序中可以制定同步或者异步更新参数,制定模型保存的目录等。因为之前一直认为分布式tensorflow程序ps管理所有的参数所以模型文件应该是保存到ps上面,但是实际上在建立Supervisor时通过传参指定了保存和加载模型的路径,这个路径是chief worker上的,而判断is_chief是基于该worker的task的标识是否为0来判断的,一定会有一个worker_task=0,模型文件应该就保存在其中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值