1

我正在使用多个 GPU。我发现基本上使用多个 GPU 就是为每个设备声明一个具有共享权重的网络。

然后,权重实际上位于第一个 GPU( /gpu:0) 上并与剩余的 GPU 共享,我确保使用 Tensorboard。以下是代码。

with tf.variable_scope(tf.get_variable_scope()):
    for gid in range(num_gpus):
        with tf.device('/gpu:%d' % gid):
            with tf.name_scope('tower%s' % gid) as scope:
                net = Net(...)
                tf.get_variable_scope().reuse_variables()

完全没问题吗?或者在Net定义中,我应该明确声明每个权重(例如,卷积层权重)/cpu:0吗?

CIFAR10多 GPU 示例中,它们在 CPU 中声明权重并与多个 GPU 共享它们,如

kernel = _variable_with_weight_decay('weights',shape=[5, 5, 3, 64],...)
biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0))
# _variable_with_weight_decay() and _variable_on_cpu explcitly() CPU

为什么?有原因吗?

4

0 回答 0