我在TF中有一个简单的分布式设置(每一步大致对应一个tf.Session.run
调用)
'/job:parent'
上的变量进行更改。tf.assign
父变量到'/job:child/task:<child index>'
上的局部变量。孩子们都有自己的主会议,与个人儿童任务目标相关联。
我的设置是单个GPU或多个(2)GPU,它们在父级和子级之间进行分片。儿童的总数远远超过总GPU(内存和计算密度足够小,以至于单个子任务无法完全利用GPU)。
即使有很多孩子,我仍然发现单GPU和多GPU的GPU利用率都很低。我怀疑它是assign
操作。这些是本地GPU,因此应该可以通过DMA,一个vanilla GPU副本(如果在同一GPU上)或nccl执行assign
op,但我担心默认情况下TF将通过本地传输数据gRPC套接字。
我有几个问题:
tf.RunMetadata
会捕获gRPC延迟吗?tf.assign
操作,在每个子索引上执行每个副本,这会避免gRPC调用吗?