首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NVIDIA GPU与Keras和Tensorflow的低使用率

NVIDIA GPU与Keras和Tensorflow的低使用率
EN

Stack Overflow用户
提问于 2019-10-08 15:56:07
回答 6查看 20K关注 0票数 16

我运行的CNN与角角gpu和tensorflow-gpu与NVIDIA GeForce RTX 2080 Ti在Windows 10。我的计算机有一个英特尔Xeone5-2683 v4 CPU (2.1 GHz)。我正在运行我的代码通过木星(最近的Anaconda发行版)。命令终端中的输出显示GPU正在被使用,但是我运行的脚本比我预期的对数据的训练/测试时间要长,当我打开任务管理器时,GPU利用率看起来很低。下面是一张图片:

请注意,CPU没有被利用,任务管理器上的其他任何东西都没有充分利用。我没有以太网连接,并连接到Wifi (不认为这有任何影响,但我不确定木星,因为它运行通过网络织锦)。我正在训练很多数据(~128 on ),这些数据都被加载到RAM (512 On)中。我正在运行的模型是一个完全卷积的神经网络(基本上是一个U-网结构),具有566,290个可训练参数。到目前为止,我已经尝试过: 1.将批处理的大小从20次增加到10,000次(将GPU的使用量从3-4%提高到6-7%,大大减少了预期的训练时间)。2.将use_multiprocessing设置为真值,增加model.fit的工人数量(无效果)。

我遵循了这个网站上的安装步骤:https://www.pugetsystems.com/labs/hpc/The-Best-Way-to-Install-TensorFlow-with-GPU-Support-on-Windows-10-Without-Installing-CUDA-1187/#look-at-the-job-run-with-tensorboard

请注意,此安装(特别是)没有安装CuDNN或CUDA。我以前在使用CUDA运行tensorflow-gpu时遇到了麻烦(尽管我已经两年多没有试过了,所以使用最新版本可能更容易),这就是我使用这种安装方法的原因。

这很可能是GPU没有得到充分利用的原因吗(没有CuDNN/CUDA)?这是否与专用GPU内存的使用成为瓶颈有关?或者可能与我使用的网络体系结构有关(参数数等)?

如果您需要更多关于我的系统或我正在运行的代码/数据的信息来帮助诊断,请告诉我。提前感谢!

编辑:我注意到任务管理器中有一些有趣的东西。一个10,000批大小的时代大约需要200秒。在每个时代的最后~5s,GPU的使用量增加到15%~17%(从每个时代前195 s的~6%到7%)。不确定这是否有助于或表明除了GPU之外还有一个瓶颈。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2021-01-10 16:15:25

您肯定需要安装CUDA/Cudnn,以充分利用GPU与tensorflow。您可以再次检查软件包是否已正确安装,以及GPU是否可供tensorflow/keras使用。

代码语言:javascript
复制
import tensorflow as tf

tf.config.list_physical_devices("GPU")

如果设备可用,输出应该类似于[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

如果您已经正确安装了CUDA/Cudnn,那么您所需要做的就是更改任务管理器下拉菜单中的copy -> cuda,这将显示活动cuda核的数量。在运行tf/keras时,GPU的其他指示符将不处于活动状态,因为没有视频编码/解码等;它只是使用GPU上的cuda核,因此跟踪GPU使用情况的唯一方法是查看cuda使用率(考虑从任务管理器进行监视)。

票数 12
EN

Stack Overflow用户

发布于 2019-10-08 17:26:29

我首先要运行一个短“测试”,以确保Tensorflow正在使用GPU。例如,在这个链接的问题中,我更喜欢@萨尔瓦多·达利的答案

代码语言:javascript
复制
import tensorflow as tf
with tf.device('/gpu:0'):
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
    c = tf.matmul(a, b)

with tf.Session() as sess:
    print (sess.run(c))

如果Tensorflow确实在使用您的GPU,您应该会看到打印的矩阵乘法的结果。否则,会有相当长的堆栈跟踪,说明无法找到"gpu:0“。

如果一切顺利,我建议使用Nvidia的smi.exe实用程序。它可以在Windows和Linux上使用,AFAIK安装在Nvidia驱动程序中。在windows系统上,它位于

代码语言:javascript
复制
C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe

打开windows命令提示符并导航到该目录。那就跑

代码语言:javascript
复制
nvidia-smi.exe -l 3

这将显示一个像这样的屏幕,每三秒更新一次。

在这里,我们可以看到关于GPU的状态和它们正在做什么的各种信息。在这种情况下,特别感兴趣的是"Pwr: the /Cap“和”“列。如果您的模型确实在使用/a GPU,那么一旦您开始训练该模型,这些列就应该“瞬间”增加。

你很可能会看到风扇的速度和温度上升,除非你有一个非常好的冷却解决方案。在printout的底部,您还应该看到一个名称类似于"python“或"Jupityr”的进程正在运行。

如果这不能给出一个关于训练时间比我想象的慢的答案,问题在于模型和代码本身。我认为这里的情况就是这样。具体来说,查看Windows任务管理器列出的“专用GPU内存使用量”基本上是最大的。

票数 5
EN

Stack Overflow用户

发布于 2019-10-08 17:44:51

如果您尝试过@KDecker和@OverLordGoldDragon的解决方案,那么GPU的使用率仍然很低,我建议您先研究一下数据管道。以下两个数字来自tensorflow官方指南数据性能,它们很好地说明了数据管道将如何影响GPU的效率。

正如您所看到的,准备与培训并行的数据将增加GPU的使用。在这种情况下,CPU处理成为瓶颈。需要找到一种隐藏预处理延迟的机制,例如改变进程数、黄油大小等。CPU的效率应该与GPU的效率相匹配。这样,GPU将得到最大限度的利用。

看看坦索普,它提供了关于如何加快输入数据管道速度的详细教程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58289983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档