GPU 仅被使用 1-5% Tensorflow-gpu 和 Keras

GPU only being used 1-5% Tensorflow-gpu and Keras

我刚刚为 gpu 安装了 tensorflow,正在为我的 CNN 使用 keras。在训练期间,我的 GPU 只使用了大约 5%,但是在训练期间使用了 6gb 的 vram 中的 5 个。有时它会出现故障,在控制台中打印 0.000000e+00 并且 gpu 达到 100%,但几秒钟后训练速度减慢到 5%。我的 GPU 是 Zotac gtx 1060 mini,我使用的是 Ryzen 5 1600x。

Epoch 1/25
 121/3860 [..............................] - ETA: 31:42 - loss: 3.0575 - acc: 0.0877 - val_loss: 0.0000e+00 - val_acc: 0.0000e+00Epoch 2/25
 121/3860 [..............................] - ETA: 29:48 - loss: 3.0005 - acc: 0.0994 - val_loss: 0.0000e+00 - val_acc: 0.0000e+00Epoch 3/25
  36/3860 [..............................] - ETA: 24:47 - loss: 2.9863 - acc: 0.1024

通常,我们希望瓶颈出现在 GPU 上(因此利用率为 100%)。如果没有发生这种情况,则说明您的代码的其他部分在每次批处理过程中都花费了很长时间。很难说它是什么(特别是因为你没有添加任何代码),但你可以尝试一些事情:

1。输入数据

确保网络的输入数据始终可用。从磁盘读取图像需要很长时间,所以使用多个 workersmultiprocessing 接口:

model.fit(..., use_multiprocessing=True, workers=8)

2。强制模型进入GPU

这几乎不是问题,因为 /gpu:0 是默认设备,但值得确保您在预期设备上执行模型:

with tf.device('/gpu:0'):
    x = Input(...)
    y = Conv2D(..)
    model = Model(x, y)

2。查看模型尺寸

如果您的批次大小很大并且允许软放置,则您的网络部分(不适合 GPU 的内存)可能会放置在 CPU。这大大减慢了这个过程。

如果软放置打开,尝试禁用并检查是否抛出内存错误:

# make sure soft-placement is off
tf_config = tf.ConfigProto(allow_soft_placement=False)
tf_config.gpu_options.allow_growth = True
s = tf.Session(config=tf_config)
K.set_session(s)

with tf.device(...):
    ...

model.fit(...)

如果是这种情况,请尝试减小批处理大小,直到它适合并为您提供良好的 GPU 使用率。然后再次打开软放置。

您可以尝试一些方向。

  1. 仔细检查您的输入管道,确保它不是性能瓶颈。
  2. 增加批号或层宽以确保 GPU 有足够的数据来使用。
  3. 最有效的方法是转储配置文件json看看。

我的经验是大部分时间利用率低是因为 GPU 消耗的数据不足。

一些有用的链接 * https://www.tensorflow.org/guide/performance/datasets * https://towardsdatascience.com/howto-profile-tensorflow-1a49fb18073d