WSL2/Ubuntu/Raspberry Piでのメモリ不足を解消する
WSL2でのメモリ不足
WSL2では、デフォルトだとメインメモリの半分しかメモリが割り当てられません。
通常は問題ないのですが、ディープラーニング系のメモリを使う用途だとメモリ不足になりがちなので、設定でメモリを多く確保しましょう。調べればたくさん出てくる情報ですが、自分のために簡単にメモです(よく忘れるので)。
ついでにUbuntuでのスワップ領域の確保の方法も記載します。
.wslconfigのセットアップ
Windows上に.wslconfig
ファイルを準備します。ファイルの場所は以下です。ファイルがなければ作りましょう。
C:\Users\[ユーザ名]\.wslconfig
ファイルの中身は以下のように書きます。メインメモリとスワップの容量を記載します。メインメモリはマシンに搭載されているメモリが最大値となります(より大きい数字を書いても、制限されます)。
[wsl2]
memory=32GB
swap=128GB
一回wslをシャットダウンします。
> wsl --shutdown
WSL2上での確認
wslを起動します。
> wsl
以下でメモリを確認できます。
$ free -h
設定値通りにメモリが確保されていたらOKです。
total used free shared buff/cache available
Mem: 31Gi 512Mi 9.9Gi 0.0Ki 20Gi 30Gi
Swap: 128Gi 188Mi 127Gi
Ubuntuでのスワップ領域追加方法
ついでにネイティブのLinux(Ubuntu)環境でのスワップ領域の追加方法です。
スワップ領域の有無は以下コマンドで確認できます。
$ sudo swapon --show
何も返ってこなかったらスワップ領域が確保されていません。
単純に以下のfreeコマンドでも確認できます。
$ free -h
以下のようにSwapが0になっています。
total used free shared buff/cache available
Mem: 31Gi 2.9Gi 27Gi 164Mi 1.2Gi 27Gi
Swap: 0B 0B 0B
スワップ領域を32GB確保したい場合は以下の通りです。
$ sudo fallocate -l 32G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
再度以下コマンドで確認します。
$ sudo swapon --show
確保できています。
NAME TYPE SIZE USED PRIO
/swapfile file 32G 360.8M -2
freeコマンドで確認しましょう。
$ free -h
total used free shared buff/cache available
Mem: 31Gi 2.0Gi 27Gi 41Mi 1.3Gi 28Gi
Swap: 31Gi 360Mi 31Gi
このままだと再起動すると、スワップ領域が無くなるので、以下コマンドで永続化できます。
$ echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
その他、詳細は以下参照ください(参考にさせていただきました)。
Raspberry Pi OSでのスワップ領域追加方法
さらについでにRaspberry Pi OSでのスワップ領域の追加方法です。
/etc/dphys-swapfile
というファイルのCONF_SWAPSIZE=100
を変更すればOKです。変更後は、再起動するか、以下コマンドを実行すれば反映されます。
$ sudo /etc/init.d/dphys-swapfile restart
確認方法は以下です。
$ swapon -s
詳しくは、以下記事が参考になります。
参考リンク
変更履歴
- 2023/04/16 Raspberry Pi OSのスワップ領域の追加に関して追記
- 2023/03/28 Linuxのスワップ領域の追加に関して追記
Discussion