Skip to main content
 首页 » 编程设计

python之CUDA 错误 : out of memory之Python process utilizes all GPU memory

2025年05月04日9lhb25

即使在重新启动机器后,python3 进程(系统范围的解释器)也使用了 >95% 的 GPU 内存。 请注意,即使没有正在运行的训练脚本,内存消耗也会保持不变,而且我从未在系统环境中使用过 keras/tensorflow ,仅使用过 venv 或在 docker 容器中。

更新: 最后一个事件是使用以下配置执行 NN 测试脚本:

tensorflow==1.14.0 Keras==2.0.3

tf.autograph.set_verbosity(1) 
tf.set_random_seed(1) 
 
session_conf = tf.ConfigProto(intra_op_parallelism_threads=8, inter_op_parallelism_threads=8) 
session_conf.gpu_options.allow_growth = True 
sess = tf.Session(graph=tf.get_default_graph(), config=session_conf) 
K.set_session(sess) 
 
$ nvidia-smi 
 
+-----------------------------------------------------------------------------+ 
| NVIDIA-SMI 440.26       Driver Version: 440.26       CUDA Version: 10.2     | 
|-------------------------------+----------------------+----------------------+ 
| 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 105...  Off  | 00000000:01:00.0 Off |                  N/A | 
| N/A   53C    P3    N/A /  N/A |   3981MiB /  4042MiB |      1%      Default | 
+-------------------------------+----------------------+----------------------+ 
                                                                                
+-----------------------------------------------------------------------------+ 
| Processes:                                                       GPU Memory | 
|  GPU       PID   Type   Process name                             Usage      | 
|=============================================================================| 
|    0      4105      G   /usr/lib/xorg/Xorg                           145MiB | 
|    0      4762      C   /usr/bin/python3                            3631MiB | 
|    0      4764      G   /usr/bin/gnome-shell                          88MiB | 
|    0      5344      G   ...quest-channel-token=8947774662807822104    61MiB | 
|    0      6470      G   ...Charm-P/ch-0/191.6605.12/jre64/bin/java     5MiB | 
|    0      7200      C   python                                        45MiB | 
+-----------------------------------------------------------------------------+ 
 
 

在恢复模式下重启后,我尝试运行 nvidia-smi -r 但它没有解决问题。

请您参考如下方法:

默认情况下,Tf 为进程的生命周期分配 GPU 内存,而不是 session 对象的生命周期(因此内存可以比对象存在的时间长得多)。这就是为什么在您停止程序后内存仍然存在的原因。在很多情况下,使用 gpu_options.allow_growth = True 参数很灵活,但它会根据运行时进程的需要分配尽可能多的 GPU 内存。

要防止 tf.Session 使用所有 GPU 内存,您可以通过更改 gpu_options.allow_growth = True 为整个进程分配固定数量的内存在运行时允许定义的内存部分(让我们使用 50%,因为您的程序似乎能够使用大量内存),例如:

session_conf.gpu_options.per_process_gpu_memory_fraction = 0.5 

这应该会阻止您达到上限并限制在 ~2GB(因为看起来您有 4GB 的 GPU)。