GPU 在运行 Keras/tensorflow-gpu 时崩溃,特别是当时钟速度在 0 MHz 时空闲时
Posted
技术标签:
【中文标题】GPU 在运行 Keras/tensorflow-gpu 时崩溃,特别是当时钟速度在 0 MHz 时空闲时【英文标题】:GPU crashes when running Keras/tensorflow-gpu, specifically when clock speed goes to idle at 0 MHz 【发布时间】:2019-04-05 06:17:02 【问题描述】:我正在使用 Jupyter Notebook 运行带有 Tensorflow GPU 后端的 Keras。我已经对各种虚拟模型进行了一些测试,同时使用 MSI Afterburner、GPU-Z、nvidia-smi 和任务管理器监控我的 GPU 使用情况。我的 GPU 是 GeForce GTX 960M,运行游戏没有问题。运行 Keras 时温度也很低。
我注意到 Keras 在开始时运行良好(例如加载或训练模型),但每当 Keras 没有运行任何东西时,GPU 自然希望从 1097 MHz 空闲到 0 MHz 并且只要它GPU会崩溃吗?我可以看到 NVSMI 上的“GPU 丢失”。然后我必须在设备管理器中禁用并重新启用我的 GPU 才能让它工作。
有人知道为什么会发生这种情况吗?
编辑:我可以通过使用“allow_growth”功能暂时防止这种情况发生在非常小的程序中,如下所示:
import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
set_session(sess)
但是,这仅适用于操作非常小的情况,即它仅使用大约 0.1 GB 的 GPU 内存,例如加载模型或运行非常小的模型。但是,如果程序使用的内存甚至是 0.3 GB 内存,我的 GPU 就会崩溃,因为内存没有达到 0 GB之前时钟速度会下降到 0 MHz(低功耗状态)。
【问题讨论】:
您的笔记本电脑可能具有内置的英特尔图形适配器以及 NVidia。我猜 Windows 在看到很少活动时会错误地禁用/切换到英特尔。您可以尝试进入 NVidia 控制面板并告诉它始终在 960M 下运行您的应用程序。 @bivouac0 我尝试通过 NVIDIA 控制面板将我的环境的“python.exe”文件设置为仅在专用 GPU 上运行,但我的 GPU 仍然死机。 您可以尝试在 Bios 中禁用板载 GPU(如果有选项)或在设备管理器中卸载 Intel 驱动程序。对于您可以尝试的所有程序,还有“高性能状态”。这些可能不是正确的长期解决方案,但它们会告诉您问题是否在于 Windows 切换 GPU。 @bivouac0 我尝试禁用英特尔驱动程序,但没有成功。如何尝试高性能状态? 在 NVidia 控制面板中,第一个选项卡用于“所有”程序。下拉菜单可能设置为“自动”,但您可以将其设置为 NVidia/高性能。无论如何,应该有一种方法可以将您的笔记本电脑设置为仅使用 NVidia。我自己没有这样做,但你应该可以用谷歌搜索它。 【参考方案1】:多亏了另一个论坛的人,我终于能够找出问题所在。这是一个驱动程序问题。与我的笔记本电脑制造商提供的旧驱动程序不同,Nvidia 提供的最新驱动程序导致了该问题。
由于我无法使用旧驱动程序运行 tensorflow 并进行更多故障排除,我所做的是下载 eDrawings Viewer 并打开我在网上找到的一些随机装配图。首先我尝试使用最新的 Nvidia 驱动程序,我发现当我操作模型时,我的卡处于 P0 状态,但如果我什么都不做,让软件闲置,我的卡会进入低功耗状态并崩溃我的显卡。但是,当我对我的 ASUS 制造商认证的驱动程序进行相同的练习时(因为该软件甚至与 TF 不同的旧驱动程序也兼容),我的 GPU 并没有崩溃。
我还发现,如果我进入 Nvidia 控制面板并在电源管理模式下选择“首选最高性能”,即使使用最新的 Nvidia 驱动程序,eDrawings Viewer 也不会崩溃。每当我打开软件时,即使在空闲几分钟后,卡也会保持在 P0 状态。不幸的是,由于 python.exe 没有图形界面,因此此选项不适用于我的情况。作为一种解决方法,我仍然可以通过在后台运行 eDrawings Viewer(或者实际上是任何使用图形界面的程序)运行 tensorflow 而不会使其崩溃,这使我的卡保持在 P0 状态。
【讨论】:
以上是关于GPU 在运行 Keras/tensorflow-gpu 时崩溃,特别是当时钟速度在 0 MHz 时空闲时的主要内容,如果未能解决你的问题,请参考以下文章
是否有 R 命令使 Keras Tensorflow-GPU 在 CPU 上运行?
训练某些网络时,GPU 上的 Keras(Tensorflow 后端)比 CPU 上慢