2

朋友们!我有一个关于使用多个 gpu 进行处理的问题。我正在使用 4 gpus 并以如下 3 种方式尝试了简单的 A^n + B^n 示例。

  1. 单 GPU

    with tf.device('/gpu:0'):
         ....tf.matpow codes...
    
  2. 多个 GPU

    with tf.device('/gpu:0'):
         ....tf.matpow codes...
    with tf.device('/gpu:1'):
         ....tf.matpow codes...
    
  3. 没有指定特定的 gpu(我想可能所有的 gpu 都使用了)

    ....just tf.matpow codes...
    

当尝试这个时,结果是不可理解的。结果是 1.单个 gpu:6.x 秒 2.多个 gpu(2 gpus):2.x 秒 3.没有指定特定 gpu(可能是 4 gpus):4.x 秒

我不明白为什么#2 比#3 快。任何人都可以帮助我吗?

谢谢。

4

2 回答 2

2

虽然 Tensorflow 调度器适用于单 GPU,但它在优化多个 GPU 上的计算布局方面还不够好。(尽管目前正在处理中。)如果没有进一步的细节,很难确切地知道发生了什么。为了获得更好的画面,您可以记录调度程序实际放置计算的位置。您可以通过log_device_placement在创建时设置标志来做到这一点tf.Session

# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
于 2017-01-11T17:43:26.160 回答
1

在第三个代码示例中(没有指定 GPU)Tensorflow 没有使用你所有的 GPU。默认情况下,如果 Tensorflow 可以找到一个 GPU ("/gpu:0") 来使用它,它会将尽可能多的计算分配给该 GPU。您需要明确告诉它您希望它使用所有 4 个,就像您在第二个代码示例中所做的那样。

来自 Tensorflow 文档:

如果您的系统中有多个 GPU,则默认选择 ID 最低的 GPU。如果您想在不同的 GPU 上运行,则需要明确指定首选项:

with tf.device('/gpu:2'):
    tf code here
于 2017-02-27T18:29:42.327 回答