ニューラルネットワークを訓練し始めたとき、それはCUDA_ERROR_OUT_OF_MEMORY
に合格しましたが、訓練は間違いなく続行される可能性があります。テンソルフローのCUDA_ERROR_OUT_OF_MEMORY
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
...
そして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 |
+-----------------------------------------------------------------------------+
を私がコメントした後、私はそれが本当に必要とGPUメモリを使用していたので、私は次のようにgpu_options.allow_growth = True
【選択ログがある設定しました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 |
+-----------------------------------------------------------------------------+
私はそれについて2つの質問があります。なぜCUDA_OUT_OF_MEMORY
が出て手続きが正常に行われたのですか?なぜコメントallow_growth = True
のコメント後にメモリ使用量が小さくなったのですか?
私は1つのプロセスのみを起動します。私は 'allow_growth = True'とコメントした後、テンソルフローはデフォルトオプションのためにメモリ全体を使用するべきですが、実際には' allow_growth = True'を使ったときに8107Mを超えない7793Mメモリしか使用しませんでした)。そのトレーニングでは、実際にはあまりにも多くのメモリが必要ないことが示されます。 – luohao
デフォルトでは、tensorflowはメモリ全体のgpuメモリの95%しか考慮しないので、7793MBが正しいように見えます(余分なリンクを参照)。 'allow_growth'でより多くのメモリを使用することは、あなたのネットワークのサイズに関連しているはずです(私はそれについての情報源はまだ見つかりませんでした...)。たとえば、GPUに2つの4GB変数を割り当てると、 'allow_growth'(〜8GB)に収まるが、あらかじめ割り当てられたメモリには収まらないので、' CUDA_ERROR_OUT_OF_MEMORY'警告が発生します –