LinuxのRAMが足りない!スワップを水増しする dd,mkswap,swapon

2024.05.28
8GB RAMで生成AIを頑張っているのですが、メモリ不足による強制終了で作業が進まないので、スワップ領域を作ろうと思います。

スワップ領域の確認
まず、スワップの状態をモニターするにはswaponコマンドを実行します。
$ swapon
Ubuntu22.04をパーティションをいじらずにおまかせでインストールしたところ、「/swapfile」に2GBのスワップ領域が作成されていました。
既存のスワップ領域を拡張する
すでにあるスワップ領域「/swapfile」を拡張しようと思います。
1.swapoffコマンドでスワップを無効化
$ sudo swapoff /swapfile
2.ddコマンドで/swapfileを24GBに水増し
$ sudo dd if=/dev/zero of=/swapfile bs=1G count=24
Linuxには/dev/zeroというアクセスすると空データを出力し続ける不思議なファイルがあります。それを利用してddコマンドで任意のサイズのファイルを作成しています。
さらにLinuxには/dev/nullという虚無を返すファイルや、/dev/random,/dev/urandomというランダムデータを返すファイルもあり、それぞれ色々な使い道があります。
3.mkswapコマンドでスワップを作成
$ sudo mkswap /swapfile
4.swaponコマンドでスワップを有効化
$ sudo swapon /swapfile
これで24GBのスワップ領域ができました。

LLMを動かしているときのメモリとスワップの様子

rinna/japanese-gpt-neox-3.6bをCPUで動かすとRAMはほぼ使い切っており、スワップは12GBも使用しています。(GPUの4GB VRAMでは足りなくて速攻落ちる)
これを見ると、Ollamaは7Bのモデルでも軽快に動くので、限られたリソースの中でだいぶうまいことやってるんだなぁと感心します。
この記事のコメント一覧(1)
zoritoler imol 2025-02-04 22:50:27
Im not sure the place you are getting your info, but great topic. I must spend a while learning much more or understanding more. Thanks for excellent information I used to be in search of this information for my mission.