在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')".