Keras/Tensorflow的GPU使用率低?
我在一台装有nvidia特斯拉K20c GPU的计算机上使用keras和tensorflow后端。(CUDA 8) 我正在训练一个相对简单的卷积神经网络,在训练期间,我运行终端程序nvidia smi来检查GPU的使用情况。正如您在下面的输出中所看到的,GPU利用率通常显示在7%-13%左右 我的问题是:在CNN培训期间,GPU的使用率不应该更高吗?这是否表明keras/tensorflow的GPU配置或使用不当Keras/Tensorflow的GPU使用率低?,tensorflow,gpu,keras,Tensorflow,Gpu,Keras,我在一台装有nvidia特斯拉K20c GPU的计算机上使用keras和tensorflow后端。(CUDA 8) 我正在训练一个相对简单的卷积神经网络,在训练期间,我运行终端程序nvidia smi来检查GPU的使用情况。正如您在下面的输出中所看到的,GPU利用率通常显示在7%-13%左右 我的问题是:在CNN培训期间,GPU的使用率不应该更高吗?这是否表明keras/tensorflow的GPU配置或使用不当 可能有多种原因,但最有可能的原因是您在读取培训数据时遇到了瓶颈。由于您的GPU已
可能有多种原因,但最有可能的原因是您在读取培训数据时遇到了瓶颈。由于您的GPU已经处理了一批数据,因此需要更多的数据。根据您的实现,这可能会导致GPU等待CPU加载更多数据,从而降低GPU的使用率并延长训练时间 如果合适,尝试将所有数据加载到内存中,或者使用一个将使输入管道在后台读取数据的命令。这将减少GPU等待更多数据的时间
TensorFlow网站上的包含更多信息。您应该找到瓶颈: 在windows上使用T监视您如何使用资源 在Linux上使用nmon、nvidia smi和htop来监视您的资源 最可能的情况是:
- 如果你有一个巨大的数据集,看看磁盘读/写速率;如果您经常访问硬盘,很可能需要更改处理数据集的方式,以减少磁盘访问次数
- 使用内存尽可能预加载所有内容
- 如果您使用的是restful API或任何类似的服务,请确保不要等待太多时间来接收所需的内容。对于restful服务,每秒的请求数可能会受到限制(通过nmon/Task manager检查网络使用情况)
- 确保在任何情况下都不要使用交换空间
- 通过任何方式(例如使用缓存、更快的库等)减少预处理的开销
- 使用bach_大小(然而,据说批量大小的更高值(>512)可能会对准确性产生负面影响)
原因可能是您的网络“相对简单”。我有一个MNIST网络,有60k个培训示例
- 在一个隐藏层中有100个神经元,CPU训练速度更快,GPU训练的GPU利用率约为10%
- GPU有两个隐藏层,每个层有2000个神经元,速度明显更快(CPU上的24秒比452秒),利用率约为39%
我想对于较小的网络来说,这并不重要,因为它们对CPU来说相对容易。GPU利用率低可能是由于小批量。Keras有占用整个内存大小的习惯,例如,使用批大小x或批大小2x。如果可能的话,试着使用更大的批量,看看是否有变化