在CIFAR-10教程中,我注意到变量被放置在CPU内存中,但它在cifar10-train.py
中有说明。它是使用单个 GPU 进行训练的。
我很困惑..图层/激活是否存储在 GPU 中?或者,梯度是否存储在 GPU 中?否则,在 CPU 上存储变量似乎根本不会利用 GPU - 所有内容都存储在 CPU 内存中,因此只有 CPU 用于前向/后向传播。
如果 GPU 用于 f/b 传播,那么由于 CPU <-> GPU 数据的延迟混排,这不是一种浪费吗?
最佳答案
事实上,在 cifar10-train 中,激活和梯度在 GPU 上,只有参数在 CPU 上。您是对的,由于在 CPU 和 GPU 之间复制参数的成本,这对于单 GPU 训练来说并不是最佳选择。我怀疑这样做的原因是为单 GPU 和多 GPU 模型提供一个库,因为在多 GPU 情况下,在 CPU 上拥有参数可能会更快。您可以轻松测试通过将所有变量移至 GPU 可以获得多少加速,只需删除 cifar10.py 中“_variable_on_cpu”中的“with tf.device('/cpu:0')”即可。
关于tensorflow - CPU 上的变量,GPU 上的训练/梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34428850/