Pau*_*aul 10 python tensorflow
我试图了解TensorFlow中主服务器和工作服务的确切角色.
到目前为止,我知道我开始的每个TensorFlow任务都与一个tf.train.Server
实例相关联.此实例通过实现tensorflow::Session
接口"(master)和worker_service.proto
(worker)"导出"主服务"和"工作服务" .
第一个问题:我是对的,这意味着,一项任务只与一名工人有关吗?
而且,我明白......
......关于师父: 这是主服务的范围......
(1)...向客户端提供功能,以便客户端可以运行会话.
(2)...将工作委托给可用的工作人员以计算会话运行.
第二个问题:如果我们执行使用多个任务分发的图表,是否只使用一个主服务?
第三个问题:tf.Session.run只能调用一次吗?
......关于工人: 这是工人服务的范围......
(1)在工作者管理的设备上执行节点(由主服务委托给他).
第四个问题:一个工人如何使用多个设备?工人是否自动决定如何分配单个操作?
如果我提出错误的陈述,请纠正我!先感谢您!!
mrr*_*rry 12
第一个问题:我是对的,这意味着,一项任务只与一名工人有关吗?
这是典型的配置,是的.每个tf.train.Server
实例都包含一个完整的TensorFlow运行时,默认配置假定此运行时具有对机器的独占访问权限(就GPU分配的内存量等而言).
请注意,您可以tf.train.Server
在同一个进程中创建多个实例(我们有时会这样做以进行测试).但是,这些实例之间几乎没有资源隔离,因此在单个任务中运行多个实例不太可能产生良好的性能(使用当前版本).
第二个问题:如果我们执行使用多个任务分发的图表,是否只使用一个主服务?
这取决于您使用的复制形式.如果使用"图中复制",则可以使用单个主服务,该服务了解模型的所有副本(即工作任务).如果使用"图形间复制",则可以使用多个主服务,每个主服务都知道模型的单个副本,并且通常与运行它的工作任务共存.通常,我们发现使用图之间复制更加高效,并且该tf.train.Supervisor
库旨在简化此模式下的操作.
第三个问题:应该
tf.Session.run()
只召唤一次吗?
(我假设这意味着"每次训练一次".用于训练模型的简单TensorFlow程序将调用tf.Session.run()
循环.)
这取决于您使用的复制形式,以及培训更新之间的协调.
使用图形内复制,您可以通过在单个中聚合损失或梯度来进行同步更新tf.train.Optimizer
,从而实现单个train_op
运行.在这种情况下,您只需tf.Session.run(train_op)
在每个训练步骤中调用一次.
使用图形内复制,您可以通过为每个副本定义一个来进行异步更新tf.train.Optimizer
,从而train_op
可以运行多个操作.在这种情况下,您通常会tf.Session.run(train_op[i])
同时从不同的线程调用每个线程.
使用图之间的复制,您可以使用在每个副本中单独构建的同步更新tf.train.SyncReplicasOptimizer
.每个副本都有自己的训练循环,只需一次调用tf.Session.run(train_op)
,并SyncReplicasOptimizer
协调这些循环,以便同步应用更新(通过其中一个工作人员的后台线程).
使用图之间的复制,您可以使用另一个子类(除了),使用类似于同步情况但没有后台协调的训练循环来进行异步更新.tf.train.Optimizer
tf.train.SyncReplicasOptimizer
第四个问题:一个工人如何使用多个设备?工人是否自动决定如何分配单个操作或......?
每个工作程序运行在单进程TensorFlow中使用的相同放置算法.除非另有说明,否则如果有可用(并且存在GPU加速实现),则布局器将把操作放在GPU上,否则它将回退到CPU.该tf.train.replica_device_setter()
设备功能可用于分片跨越的任务是充当"参数服务器"变量.如果您有更复杂的要求(例如,多个GPU,工作人员上的局部变量等),您可以使用显式with tf.device(...):
块将子图分配给特定设备.
归档时间: |
|
查看次数: |
2009 次 |
最近记录: |