課題
fastaiで学習を実行するときに、DataLoaderで以下のエラーが出る
RuntimeError: DataLoader worker (pid(s) ~) exited unexpectedly
原因
DataLoaderが結構メモリを食う(5GB~)ので、メモリが足りなくなるため。
メモリ32GBのホストOSで動かすなら、メモリ消費割合は5GB/32GBで問題ないが、
WSLにはデフォルトで、(ホストOSのメモリが16GB以上の場合)8GBしかメモリが割り当てられないので、対応が必要。
対応
WSL上のDockerコンテナでfastaiを動かす場合、WSLとDockerコンテナそれぞれにメモリの割り当てる。
WSLの対応:WSLの設定(.wslconfig)に、メモリサイズを指定
C:\Users\(username)\.wslconfig
に、以下のように設定する。(16GB割り当てる場合)
.wslconfig
[wsl2]
memory=16GB
参考:WSL2 RAMとスワップを理解する-デフォルトを50%〜25%変更する
Dockerコンテナの対応:コンテナ起動時に共有メモリサイズ(shm-size)を指定
docker composeでコンテナを管理している場合は、以下のように記述する。
docker-compose.yml
services:
jupyter:
image: lilacs2039/fastai-nbdev
(中略)
shm_size: 2gb # shared memory