tensorflow - CPU 上的变量,GPU 上的训练/梯度

标签 tensorflow

在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/

相关文章:

python - 是否需要同时用于评估和运行?

python - pyinstaller ModuleNotFoundError

python - tensorflow 中两个向量的点积

machine-learning - TFLearn 模型评估

python - 如何编写 Keras 自定义指标来过滤或屏蔽某些值?

python - 如何使用 sparse_softmax_cross_entropy_with_logits 在 tensorflow 中实现加权交叉熵损失

python - cx_Freeze "no module named google"错误

tensorflow - sparse_categorical_crossentropy 的标签平滑

python - 禁用 `@tf.function` 装饰器进行调试?

python - Tensorflow - 如何阅读预测