当我开始训练一些神经网络时,它遇到了CUDA_ERROR_OUT_OF_MEMORY但是训练可以继续进行而没有错误.因为我想使用gpu内存,所以我设置了gpu_options.allow_growth = True.日志如下:
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:111] successfully opened CUDA library libcurand.so locally
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:925] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:951] Found device 0 with properties:
name: GeForce GTX 1080
major: 6 minor: 1 memoryClockRate (GHz) 1.7335
pciBusID 0000:01:00.0
Total memory: 7.92GiB
Free memory: 7.81GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:972] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] 0: Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:1041] Creating TensorFlow device (/gpu:0) -> (device:0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)
E tensorflow/stream_executor/cuda/cuda_driver.cc:965] failed to allocate 4.00G (4294967296 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY
Iter 20, Minibatch Loss= 40491.636719
...
Run Code Online (Sandbox Code Playgroud)
使用nvidia-smi命令后,它会:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.27 Driver Version: 367.27
|-------------------------------+----------------------+----------------------+
| 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 1080 Off | 0000:01:00.0 Off | N/A |
| 40% 61C P2 46W / 180W | 8107MiB / 8111MiB | 96% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 1080 Off | 0000:02:00.0 Off | N/A |
| 0% 40C P0 40W / 180W | 0MiB / 8113MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
?
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 22932 C python 8105MiB |
+-----------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
在我评论之后gpu_options.allow_growth = True,我再次训练网,一切正常.没有问题CUDA_ERROR_OUT_OF_MEMORY.最后,运行nvidia-smi命令,它得到:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.27 Driver Version: 367.27
|-------------------------------+----------------------+----------------------+
| 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 1080 Off | 0000:01:00.0 Off | N/A |
| 40% 61C P2 46W / 180W | 7793MiB / 8111MiB | 99% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 1080 Off | 0000:02:00.0 Off | N/A |
| 0% 40C P0 40W / 180W | 0MiB / 8113MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
?
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 22932 C python 7791MiB |
+-----------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
我有两个问题.为什么CUDA_OUT_OF_MEMORY出来并且程序正常进行?为什么评论后内存使用量会变小allow_growth = True?
use*_*774 33
如果它仍然与某人相关,我在第一次运行中止后第二次尝试运行Keras/Tensorflow时遇到了这个问题.似乎仍然分配了GPU内存,因此无法再次分配.它通过手动结束使用GPU的所有python进程,或者关闭现有终端并在新的终端窗口中再次运行来解决.
Tho*_*eau 14
默认情况下,tensorflow尝试将一小部分per_process_gpu_memory_fractionGPU内存分配给他的进程,以避免代价高昂的内存管理.(参见GPUOptions评论).
这可能会失败并提出CUDA_OUT_OF_MEMORY警告.我不知道在这种情况下是什么回退(使用CPU操作或a allow_growth=True).
如果其他进程此刻使用GPU,则会发生这种情况(例如,如果启动两个进程运行tensorflow).默认行为需要大约95%的内存(请参阅此答案).
使用时allow_growth = True,GPU内存不会预先分配,并且可以根据需要增长.这将导致更小的内存使用(因为默认选项是使用整个内存)但如果不正确使用则会降低性能,因为它需要更复杂的内存处理(这不是CPU/GPU交互中最有效的部分) ).
Sid*_*idK 14
我在尝试背靠背训练模型时遇到了这个问题。我认为由于之前的训练运行,GPU 内存不可用。所以我发现最简单的方法是在每次下一次训练之前手动刷新 GPU 内存。
使用 nvidia-smi 检查 GPU 内存使用情况:
nvidia-smi
nvidia-smi --gpu-reset
Run Code Online (Sandbox Code Playgroud)
如果其他进程正在积极使用 GPU,则上述命令可能不起作用。
或者,您可以使用以下命令列出所有使用 GPU 的进程:
sudo fuser -v /dev/nvidia*
Run Code Online (Sandbox Code Playgroud)
输出应如下所示:
USER PID ACCESS COMMAND
/dev/nvidia0: root 2216 F...m Xorg
sid 6114 F...m krunner
sid 6116 F...m plasmashell
sid 7227 F...m akonadi_archive
sid 7239 F...m akonadi_mailfil
sid 7249 F...m akonadi_sendlat
sid 18120 F...m chrome
sid 18163 F...m chrome
sid 24154 F...m code
/dev/nvidiactl: root 2216 F...m Xorg
sid 6114 F...m krunner
sid 6116 F...m plasmashell
sid 7227 F...m akonadi_archive
sid 7239 F...m akonadi_mailfil
sid 7249 F...m akonadi_sendlat
sid 18120 F...m chrome
sid 18163 F...m chrome
sid 24154 F...m code
/dev/nvidia-modeset: root 2216 F.... Xorg
sid 6114 F.... krunner
sid 6116 F.... plasmashell
sid 7227 F.... akonadi_archive
sid 7239 F.... akonadi_mailfil
sid 7249 F.... akonadi_sendlat
sid 18120 F.... chrome
sid 18163 F.... chrome
sid 24154 F.... code
Run Code Online (Sandbox Code Playgroud)
从这里,我得到了持有 GPU 内存的进程的 PID,在我的例子中是 24154。
使用以下命令通过其 PID 终止进程:
sudo kill -9 MY_PID
Run Code Online (Sandbox Code Playgroud)
用相关的 PID 替换 MY_PID。
张量流 2.0 阿尔法
问题是,Tensorflow 贪婪地分配所有可用的 VRAM。这会给一些人带来问题。
对于 Tensorflow 2.0 alpha / nightly,请使用以下命令:
import tensorflow as tf
tf.config.gpu.set_per_process_memory_fraction(0.4)
Run Code Online (Sandbox Code Playgroud)
来源: https: //www.tensorflow.org/alpha/guide/using_gpu
| 归档时间: |
|
| 查看次数: |
41880 次 |
| 最近记录: |