【问题标题】:Out of memory running Tensorflow with GPU support in PyCharm在 PyCharm 中运行带有 GPU 支持的 Tensorflow 内存不足
【发布时间】:2019-06-13 21:45:54
【问题描述】:

我的代码在 iPython 终端中运行时运行良好,但由于内存不足错误而失败,如下所示。

/home/abigail/anaconda3/envs/tf_gpuenv/bin/python -Xms1280m -Xmx4g /home/abigail/PycharmProjects/MLNN/src/test.py
Using TensorFlow backend.
Epoch 1/150
2019-01-19 22:12:39.539156: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2019-01-19 22:12:39.588899: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:964] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-01-19 22:12:39.589541: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1432] Found device 0 with properties: 
name: GeForce GTX 750 Ti major: 5 minor: 0 memoryClockRate(GHz): 1.0845
pciBusID: 0000:01:00.0
totalMemory: 1.95GiB freeMemory: 59.69MiB
2019-01-19 22:12:39.589552: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1511] Adding visible gpu devices: 0
Traceback (most recent call last):
  File "/home/abigail/PycharmProjects/MLNN/src/test.py", line 20, in <module>
    model.fit(X, Y, epochs=150, batch_size=10)
  File "/home/abigail/anaconda3/envs/tf_gpuenv/lib/python3.6/site-packages/keras/engine/training.py", line 1039, in fit
    validation_steps=validation_steps)
  File "/home/abigail/anaconda3/envs/tf_gpuenv/lib/python3.6/site-packages/keras/engine/training_arrays.py", line 199, in fit_loop
    outs = f(ins_batch)
  File "/home/abigail/anaconda3/envs/tf_gpuenv/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", line 2697, in __call__
    if hasattr(get_session(), '_make_callable_from_options'):
  File "/home/abigail/anaconda3/envs/tf_gpuenv/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py", line 186, in get_session
    _SESSION = tf.Session(config=config)
  File "/home/abigail/anaconda3/envs/tf_gpuenv/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1551, in __init__
    super(Session, self).__init__(target, graph, config=config)
  File "/home/abigail/anaconda3/envs/tf_gpuenv/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 676, in __init__
    self._session = tf_session.TF_NewSessionRef(self._graph._c_graph, opts)
tensorflow.python.framework.errors_impl.InternalError: CUDA runtime implicit initialization on GPU:0 failed. Status: out of memory

Process finished with exit code 1

在 PyCharm 中,我首先编辑了“Help->Edit Custom VM options”:

-Xms1280m
-Xmx4g

这并不能解决问题。然后我编辑了“运行->编辑配置->解释器选项”:

-Xms1280m -Xmx4g

它仍然给出同样的错误。我的桌面 Linux 有足够的内存(64G)。如何解决这个问题?

顺便说一句,在 PyCharm 中,如果我不使用 GPU,它不会给出错误。

编辑:

In [5]: exit                                                                                                                                                                                                                                                                                                                    
(tf_gpuenv) abigail@abigail-XPS-8910:~/nlp/MLMastery/DLwithPython/code/chapter_07$ nvidia-smi
Sun Jan 20 00:41:49 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 415.25       Driver Version: 415.25       CUDA Version: 10.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 750 Ti  Off  | 00000000:01:00.0  On |                  N/A |
| 38%   54C    P0     2W /  38W |   1707MiB /  1993MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0       770      G   /usr/bin/akonadi_archivemail_agent             2MiB |
|    0       772      G   /usr/bin/akonadi_sendlater_agent               2MiB |
|    0       774      G   /usr/bin/akonadi_mailfilter_agent              2MiB |
|    0      1088      G   /usr/lib/xorg/Xorg                           166MiB |
|    0      1440      G   kwin_x11                                      60MiB |
|    0      1446      G   /usr/bin/krunner                               1MiB |
|    0      1449      G   /usr/bin/plasmashell                          60MiB |
|    0      1665      G   ...quest-channel-token=3687002912233960986   137MiB |
|    0     20728      C   ...ail/anaconda3/envs/tf_gpuenv/bin/python  1255MiB |
+-----------------------------------------------------------------------------+

【问题讨论】:

  • 我可以在那里看到的重要提示 - 在您的错误中,大部分(几乎所有)GPU 内存已经用完。当我在运行 GPU 的 Tensorflow 示例程序上检查相同内容时,我看到:2019-01-20 16:38:00.550256: IT:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1392 ] 找到具有属性的设备 0:名称:GeForce GTX 1080 Ti 主要:6 次要:1 memoryClockRate(GHz):1.607 pciBusID:0000:01:00.0 totalMemory:11.00GiB freeMemory:9.10GiB 您需要比 59MB 更多的内存。检查是什么耗尽了你所有的内存并相应地重新分配
  • 但是如你所见,我已经通过“python -Xms1280m -Xmx4g”来增加解释器可用的内存。
  • @SteveCarter,我的桌面有 64G 内存。您是否配置了一些东西来获得 11GB 的总内存?在我的例子中,这里显示的总内存是 1.95GiB。你在 PyCharm 中开发吗?
  • 你需要考虑 GPU 的内存,在这种情况下它只有 2G 左右。您的设置是配置桌面内存,而不是 GPU 内存。你在什么平台上运行?它是某种Linux吗?如果是 Linux,您能否提供在命令行上运行“nvidid-smi”的输出?是的,我是在pycharm中开发的,但是我不需要像你以前那样分配内存。
  • 2GB 的 GPU RAM 并不多,该模型可能需要比您拥有的更多的内存。您似乎认为这是 PyCharm 的问题,但事实并非如此。

标签: python tensorflow keras pycharm


【解决方案1】:

根据 cmets 结束我们的对话,我不相信您可以将 GPU 内存或桌面内存分配给 GPU - 不是以您尝试的方式。当你有一个 GPU 时,Tensorflow-GPU 在大多数情况下会将大约 95% 的可用内存分配给它运行的任务。在您的情况下,Something 已经消耗了所有可用的 GPU 内存,这是您的程序无法运行的主要原因。您需要检查 GPU 的内存使用情况并释放一些内存(我不禁想到您已经有另一个实例 python 使用在后台运行的 Tensorflow GPU 或其他一些密集的 GPU 程序)。在 Linux 中,命令行上的命令 nvidia-smi 会告诉你什么使用你的 GPU 这是一个例子

Sun Jan 20 18:23:35 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.130                Driver Version: 384.130                   |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 970     Off  | 00000000:01:00.0 Off |                  N/A |
| 32%   63C    P2    69W / 163W |   3823MiB /  4035MiB |     40%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      3019      C   ...e/scarter/anaconda3/envs/tf1/bin/python  3812MiB |
+-----------------------------------------------------------------------------+

您可以看到,我服务器上的卡有 4035MB 或 RAM,正在使用 3823MB。此外,查看底部的 GPU 进程。进程 PID 3019 消耗卡上可用的 4035MB 中的 3812MB。如果我们想使用 tensorflow 运行另一个 python 脚本,我有两个主要选择,我可以安装第二个 GPU 并在第二个 GPU 上运行,或者如果没有可用的 GPU,则在 CPU 上运行。比我更专业的人可能会说你可以只为每个任务分配一半的内存,但是 2Gig 的内存对于 tensorflow 训练来说已经相当低了。通常,建议使用具有更多内存 (6 gig +) 的卡来完成该任务。
最后,找出消耗所有视频卡内存的原因并结束该任务。我相信它会解决你的问题。

【讨论】:

  • 我在 Kubuntu 上运行,请参阅上面的版本。为什么在您的情况下只有 1 个进程使用 GPU 内存,但在我的情况下,很多进程正在使用 GPU 内存?在 TensorFlow GPU 中,模型只使用 GPU 的内存?其他内存呢?我的电脑总共有 64G RAM。它们几乎不用了吗?
  • 是的,在 Tensorflow-GPU 中,模型只使用 GPU 内存。如果您想使用您的桌面内存,那么您将不会使用 GPU 支持该模型。请记住,如果您在 CPU 而不是内存上进行训练,CPU 将成为瓶颈。使用 GPU 的主要原因是因为在大多数情况下它比 CPU 快得多。就我而言,我运行的是 Ubuntu 服务器 16.04,但我没有图形界面,因此 GPU 上只有一个进程在运行,这是我正在开发的 Tensorflow 程序。
  • 我在您的更新中看到您有一个 PID 20728 使用您的大部分 GPU 资源。这是您的程序已经在后台运行。如果您要结束该程序,那么资源将可用于您尝试运行的程序。在您的情况下,如果您尝试在同一个 GPU 上运行 2 个训练脚本,则使用当前的内存分配是不可能的。
  • PID 20728 是我正在运行的进程。不知何故,它不再内存不足,但非常非常慢。我正在测试 CPU 来训练相同的模型。在这种情况下,它可能会快得多。
  • 你只有一个 4G gpu,你的情况有多快?您是否将其与 CPU 训练进行了比较?
猜你喜欢
  • 2019-10-09
  • 2019-08-28
  • 1970-01-01
  • 2023-03-07
  • 2020-06-10
  • 1970-01-01
  • 2019-01-27
  • 2020-05-05
  • 2020-12-06
相关资源
最近更新 更多