我正在尝试使用服务器和一个或多个使用它的客户端创建分布式Tensorflow应用。
指定应在服务器中放置哪些变量或操作很容易。只需启动一个带有ClusterSpec的tf.train.Server,定义一个'服务器'工作和做:
with tf.device('/job:server/task:0'):
server_vars = ...
server_ops = ...
但是,如果我想同样在客户端放置其他变量或操作,那么我被迫为每个客户端定义一个新作业,为它启动一个新的tf.train.Server,定义新的vars和ops放置在每个特定的客户端上,并包含ClusterSpec中的所有客户端地址和端口。
有没有办法使用tf.device在本地放置操作和变量?不一定是任何特定设备(CPU,GPU),而是远程服务器。
# No device is specified, so it's up to TF to decide where to place it.
# Let's say it decides to place it locally. How can we enforce that?
# Is there a tf.device(/local/) or similar?
client_vars = ...
client_ops = ...
with tf.Session('grpc://%s' % SERVER) as session:
# Do stuff.
# Can we run client ops from this session?
注意:我假设服务器被动地工作,并且从不尝试直接访问任何客户端操作或变量。相反,客户端访问服务器操作和变量。
答案 0 :(得分:1)
如果您没有tf.Server
在本地运行,那么您在本地运行操作的唯一选择是创建本地会话tf.Session()
并在该会话中运行操作。不同的会话无法直接通信。如果您使用的是分布式TensorFlow,则必须从分布式会话中获取数据并自行提供给本地会话。 (反之亦然)