📟

WSL2/Ubuntu/Raspberry Piでのメモリ不足を解消する

2023/02/28に公開

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

その他、詳細は以下参照ください(参考にさせていただきました)。

https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-20-04-ja

Raspberry Pi OSでのスワップ領域追加方法

さらについでにRaspberry Pi OSでのスワップ領域の追加方法です。

/etc/dphys-swapfileというファイルのCONF_SWAPSIZE=100を変更すればOKです。変更後は、再起動するか、以下コマンドを実行すれば反映されます。

$ sudo /etc/init.d/dphys-swapfile restart

確認方法は以下です。

$ swapon -s

詳しくは、以下記事が参考になります。

https://uepon.hatenadiary.com/entry/2023/04/16/163424

参考リンク

https://zenn.dev/suzuki5080/articles/1438d52377b9df

https://snowsystem.net/other/windows/wsl2-fixed-memory-allocation/

変更履歴

  • 2023/04/16 Raspberry Pi OSのスワップ領域の追加に関して追記
  • 2023/03/28 Linuxのスワップ領域の追加に関して追記

Discussion