tf.Session
有参数target
,可以是''
, grpc://ip:port
,或者tf.train.Server().target
,它们有什么区别?当我们创建一个session
时,是否意味着我们创建了一个client
,如果我们有client
什么是server
?
更新
- 什么是主人?是总工吗?
''
和grpc://localhost:port?
之间有什么区别?我认为它们都在本地计算机上。
关于你的一些问题local_distributed_benchmark.py
我在
create_graph(device1, device2)
中添加print(add_op.device)
,输出为/job:worker/task:0
,为什么不是/job:worker/task:1
?而你创建tf.Session("grpc://"+host+FLAGS.port1, config=default_config())
,如果ops是在其他tasks(worker)上创建的,这个session如何运行这些操作,例如程序中的init_op = tf.initialize_all_variables()
。如果我使用
sess = tf.Session(config=default_config())
而不是sess = tf.Session("grpc://"+host+FLAGS. port1, config=default_config())
,会报错:
无法为操作“更新”分配设备:操作已明确分配给/job:worker/task:1 但可用设备为 [/job:localhost/replica:0/task:0/cpu:0,/job:localhost/拷贝:0/任务:0/GPU:0]。
怎么了?
- 如果我删除runcmd("python %s --task=1"%(sys.argv[0]))并更改 with tf.device(device2):
with tf.device(device1):
,程序会输出CreateSession still waiting for response from worker:/job:worker/replica:0/task:1
。我只使用目标task:0
的 session ,并且没有在task:1
上使用任何ops
,那么为什么程序会等待task:1 worker
开始?
最佳答案
它是 session 管理器(可以执行 session.run 调用的东西)的位置。
''是本地master(本地运行时)。
tf.train.Server(...).target 是本地主机(分布式运行时)。它的格式为 grpc://localhost:port
- grpc://ip:port 是监听ip的master
这里是一些术语的解释(master、worker、client): task assignment in tensorflow distributed process
关于python - 如何理解tf.Session的target?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46627470/