TL;DR
未解決
問題:普段PyTorchで深層学習を行っていて、たまに以下の様にVRAMに余裕があるのにすべて予約せずにOut of Memoryを吐いてくることがある(↓例では10GiB
の容量があるのに PyTorchは5.72 GiB
しか予約していない)。
RuntimeError: CUDA out of memory. Tried to allocate 98.00 MiB (GPU 0; 9.78 GiB total capacity; 5.61 GiB already allocated; 15.38 MiB free; 5.72 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
CUDAでGPUのVRAMの使用容量を制限できるようなので、それがかかってのかも、と調べてみた。 nvidia-smiのGOM設定でVRAM制限・制限解除ができるようだが、制限なしの状態でもこのエラーが現れるので、もはや何が悪いのかわからない。。。
GPU Operation Mode (GOM) property
GOMを設定することにより、GPUの利用に制限を掛けることができるらしい。
nvidia-smi --help-query-gpu
曰く、
(nvidia-smi --help-query-gpu | grep GOM -n10
)
123-Section about gom properties 124:GOM allows to reduce power usage and optimize GPU throughput by disabling GPU features. Each GOM is designed to meet specific user needs. 125-In "All On" mode everything is enabled and running at full speed. 126-The "Compute" mode is designed for running only compute tasks. Graphics operations are not allowed. 127-The "Low Double Precision" mode is designed for running graphics applications that don't require high bandwidth double precision. 128:GOM can be changed with the (--gom) flag. 129- 130-"gom.current" or "gpu_operation_mode.current" 131:The GOM currently in use. 132- 133-"gom.pending" or "gpu_operation_mode.pending" 134:The GOM that will be used on the next reboot.
GOM値の確認
まずは現在の設定値を確認したい。nvidia-smiでGPU関連の設定値を調べるには、nvidia-smi --query
で全設定値を読み込むか、--query-gpu=[PROPERTY]
として特定の値を指定する (--fotmat
も指定しないといけないらしい)。
nvidia-smi --query-gpu=[PROPERTY] --format=csv
nvidia-smi --query-gpu=gom.current --format=csv
としてクエリを与えると返してくれる。
nvidia-smi --query-gpu=gom.current --format=csv gom.current [N/A]
[N/A]
と返ってきたので、恐らく設定されていないのだと。。。(じゃあなぜ6GiBしか予約してくれないんだ…)
明示的に”All On”
を設定しないとダメなのか???
GOMを設定・解除
ここでは記述されていないが、nvidia-smi --gom=0
とすると”All On"
に設定できるらしいので、今走らせている学習プロセスが終了したら実施したい。
CUDAでGPUのVRAM容量を制限したり、解除したりするには、NVIDIAのGPUを制御するためのツールやライブラリを使用する必要があります。以下に、GPUのVRAM制限と解除の方法を説明します。
GPU VRAMの制限:
GPU VRAMの制限には、NVIDIAのGPU制御ツールである"NVIDIA System Management Interface (nvidia-smi)"を使用します。以下は、GPU VRAMの制限方法です:
GPU VRAMの制限を解除:
制限を解除するには、nvidia-smiを再起動するか、再起動することなく制限を解除する方法があります。
nvidia-smiを再起動して制限を解除する場合:
nvidia-smi --gom=0
システムを再起動せずに制限を解除する場合、以下のコマンドを実行します。
nvidia-smi --gom=auto
これにより、GPU VRAMの制限が解除される。