2020/12/27
VSCodeの拡張機能(Jupyter)を使って*.ipynb
で機械学習を扱っていたところ、表記のエラーが起こった。
エラー全文
InternalError: Failed copying input tensor
from /job:localhost/replica:0/task:0/device:CPU:0
to /job:localhost/replica:0/task:0/device:GPU:0
in order to run Min: Dst tensor is not initialized. [Op:Min]
原因
いろいろ探ってみたところ、GPUのメモリが足らない事が原因であった。
Geforceを使っているので、nvidia-smi
コマンドによってGPUのステータスを確認することができる。
以下、通常時とエラー発生時のGPUのステータスを貼る。
注釈をつけた行を見ると、/usr/bin/python3
がGPUのメモリを圧迫していることがわかった。
通常時
$ nvidia-smi
Sun Dec 27 01:27:48 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI XXX.XX.XX Driver Version: XXX.XX.XX CUDA Version: XX.X |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 GeForce RTX 207... Off | 00000000:0A:00.0 On | N/A |
| 52% 25C P5 24W / 215W | 669MiB / 7959MiB | 7% Default | <- この行を見てね
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A XXXX G /usr/lib/XXXX/XXXX 53MiB |
| 0 N/A N/A XXXX G /usr/lib/XXXX/XXXX 259MiB |
| 0 N/A N/A XXXX G /usr/bin/XXXXXXXXXXX 76MiB |
| 0 N/A N/A XXXX G ...AAAAAAAA== --shared-files 39MiB |
| 0 N/A N/A XXXX G ...AAAAAAAAA= --shared-files 30MiB |
| 0 N/A N/A XXXXXX G ...AAAAAAAA== --shared-files 194MiB |
+-----------------------------------------------------------------------------+
エラー発生時
$ nvidia-smi
Sun Dec 27 01:26:41 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI XXX.XX.XX Driver Version: XXX.XX.XX CUDA Version: XX.X |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 GeForce RTX 207... Off | 00000000:0A:00.0 On | N/A |
| 52% 25C P8 22W / 215W | 7611MiB / 7959MiB | 12% Default | <- この行を見てね
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A XXXX G /usr/lib/XXXX/XXXX 53MiB |
| 0 N/A N/A XXXX G /usr/lib/XXXX/XXXX 277MiB |
| 0 N/A N/A XXXX G /usr/bin/XXXXXXXXXXX 82MiB |
| 0 N/A N/A XXXX G ...AAAAAAAA== --shared-files 39MiB |
| 0 N/A N/A XXXX G ...AAAAAAAAA= --shared-files 30MiB |
| 0 N/A N/A XXXXXX G ...AAAAAAAA== --shared-files 194MiB |
| 0 N/A N/A XXXXXX G ...AAAAAAAAA= --shared-files 69MiB |
| 0 N/A N/A 161454 C /usr/bin/python3 6845MiB | <- この行も見てね
+-----------------------------------------------------------------------------+
対処
根本的な解決を目指す場合は、GPUをより高性能なものにする必要がある。
しかし通常(私も)、PCの構成を変えずに解決したいだろう。
その場合、以下がいいのではないだろうか。というか、これくらいしか対処方法が思い浮かばない。
- notebook内で扱うメモリを減らす
- メモリを適宜解法
- 学習と評価を別のカーネルで行えるようにする
これを機にGPUを買い直す場合は、GPUのよくあるベンチマークだけでなく、グラフィックスメモリ
という項目を確認しておくと良い。