我有两台计算机,每台计算机都有两个 GPU。我试图从分布式张量流开始,但对它是如何工作的感到非常困惑。在计算机 A 上我想要一个ps
任务(我的印象是这应该在CPU上进行)和两个worker
任务(每个 GPU 一个)。我想在计算机 B 上有两个“工人”任务。以下是我尝试实现此目的的方法,在test.py
import tensorflow as tf
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--job_name', required = True, type = str)
parser.add_argument('--task_idx', required = True, type = int)
args, _ = parser.parse_known_args()
JOB_NAME = args.job_name
TASK_INDEX = args.task_idx
ps_hosts = ["computerB-i9:2222"]
worker_hosts = ["computerA-i7:2222", "computerA-i7:2223", "computerB-i9:2223", "computerB-i9:2224"]
cluster = tf.train.ClusterSpec({"ps": ps_hosts, "worker": worker_hosts})
server = tf.train.Server(cluster, job_name = JOB_NAME, task_index = TASK_INDEX)
if JOB_NAME == "ps":
server.join()
elif JOB_NAME == "worker":
is_chief = (TASK_INDEX == 0)
with tf.device(tf.train.replica_device_setter(
worker_device = "/job:worker/task:%d" % FLAGS.task_index, cluster = cluster)):
a = tf.constant(8)
b = tf.constant(9)
with tf.Session(server.target) as sess:
sess.run(tf.multiply(a, b))
我通过跑步发现了什么python3 test.py --job_name ps == task_idx 0
在计算机 A 上,我看到计算机 A 上的两个 GPU 已立即被脚本保留,并且计算机 B 显示没有活动。这不是我所期望的。我以为自从ps
我只是运行的工作server.join()
这不应该使用 GPU。不过我可以通过设置看到pdb
一旦服务器初始化,GPU 就会被占用。这给我留下了几个问题:
- 为什么服务器会立即占用所有 GPU 容量?
- 我应该如何分配 GPU 并启动不同的进程?
- 我原来的计划还有意义吗? (我仍然对任务、集群、服务器等感到有点困惑......)
我观看了 2017 年 Tensorflow 开发者峰会上有关分布式 Tensorflow 的视频,也一直在 Github 和博客上查找。我无法找到使用最新甚至相对较新的分布式张量流函数的工作代码示例。同样,我注意到 Stack Overflow 上的许多问题都没有得到解答,因此我阅读了相关问题,但没有任何可以解决我的问题的问题。我将不胜感激有关其他资源的任何指导或建议。谢谢!