【发布时间】:2017-02-17 21:47:31
【问题描述】:
我对在 Tensorflow 中使用 GPU 有一些疑问。我正在关注卷积神经网络教程here (tensorflow/models/image/cifar10/cifar10_train.py)。与教程中一样,所有参数(例如权重)都存储在 CPU 内存中并更新,而 GPU 仅用于计算梯度或推理。
由于权重存储在 CPU 中,它们应该在每次迭代时同步,而且 GPU 似乎没有得到充分利用(根据nvidia-smi,大约 60%)。在使用多个 GPU 的情况下,我知道权重应该存储在 CPU 内存中以在 GPU 之间同步。但是,为什么本教程即使在单个 GPU 中也将所有权重都存储在 CPU 中?有没有办法在 GPU 内存中存储和更新它们?
在推理的情况下,权重是否复制到 GPU 一次并重复使用?还是应该在每次使用时都复制?
图像数据呢?这些数据似乎驻留在 GPU 中(不确定)。这些数据何时传输到 GPU?当它们从磁盘加载?或者当 GPU 需要它们时?
- 如果它们在从磁盘加载后立即复制到 GPU,如果图像数据的大小太大而无法放入 GPU 内存,会发生什么情况?在这种情况下,有什么方法可以单独复制数据(例如预取)?
- 如果它们被按需复制到 GPU,是否有任何方法可以在 GPU 实际使用它们之前预取它们以避免空闲时间?
编辑:如果有任何方法可以检查发送/接收节点在 CPU 和 GPU 之间的插入位置(如在 white paper 中),将会很有帮助。
【问题讨论】:
-
您可以使用队列将数据提取到 GPU 中。它将在计算进行时被复制,并且有线程代码来保持它的完整。
标签: memory tensorflow gpu cpu