在CIFAR-10教程中,我注意到变量放在CPU内存中,但在cifar10-train.py
中说明它是用单个GPU训练的。
我很困惑..存储在GPU中的图层/激活是什么?或者,是否存储在GPU中的渐变?否则,似乎CPU上的存储变量根本不会使用GPU - 所有内容都存储在CPU内存中,因此只有CPU用于前向/后向传播。
如果GPU用于f / b传播,由于延迟混洗数据CPU< - >,这不是浪费。 GPU?
答案 0 :(得分:5)
实际上,在cifar10-train中,激活和渐变都在GPU上,只有参数在CPU上。由于在CPU和GPU之间复制参数的成本,这对于单GPU培训来说并不是最佳选择。我怀疑这样做的原因是为单GPU和多GPU模型建立一个单独的库,就像在多GPU情况下一样,在CPU上使用参数可能更快。您可以通过将所有变量移动到GPU来轻松测试可以获得的加速,只需删除"使用tf.device(' / cpu:0')" in" _variable_on_cpu"在cifar10.py。