ガイド/Ollamaのメモリ使用量が多すぎる
MacでOllamaのメモリ使用量が多すぎる? 読み込まれたモデルの確認とアンロードの方法
結論
Ollamaは、次の質問にすばやく答えられるように、最後の応答から5分間、モデルをメモリに保持します。使うのをやめても数ギガバイトを抱えたままなのは、そのためです。ollama psを実行すると、どのモデルが読み込まれていて、それぞれいつアンロードされるかがわかります。すぐにアンロードするには、ollama stopのあとにモデル名を付けて実行します。モデルが使うメモリの量は、モデルのサイズと、実行時のコンテキスト長で決まります。Mac用システムモニタのVitalsなら、Ollamaのメモリ、グラフィックスチップの負荷、Macのメモリプレッシャーをメニューバーに表示します。
Ollamaのメモリを確認して解放する方法
- 01 ターミナルで
ollama psを実行します。各行がメモリ内のモデルで、サイズ、グラフィックスチップで動いているかどうか、アンロードされるまでの時間が表示されます。 - 02 すぐにアンロードするには、
ollama stopのあとに名前を付けて実行します。たとえばollama stop llama3.2です。メモリは1〜2秒で戻ります。 - 03 アクティビティモニタを開いて“メモリ”をクリックし、下部の“メモリプレッシャー”を見ます。緑なら、モデルは収まっています。モデルが読み込まれている間に黄色か赤になるなら、ほかに開いているものに対してモデルが大きすぎます。
- 04 モデルを早くアンロードさせるには、保持する時間を設定します。ターミナルで
launchctl setenv OLLAMA_KEEP_ALIVE 1mを実行し、メニューバーのアイコンからOllamaを終了して、もう一度開きます。 - 05 モデルが読み込まれるたびにMacのメモリが足りなくなるなら、小さいモデルか、同じモデルの小さいバージョンを使います。
ollama listで、持っているモデルとそのサイズがわかります。
keep-aliveを0にすると、モデルは応答が終わるとすぐにアンロードされます。-1にすると、止めるまで読み込まれたままになります。Ollamaとやり取りするアプリは、リクエストごとに独自の値を設定できます。モデルが設定より長く残ることがあるのは、そのためです。
自分のMacでモデルを動かすということは、モデル全体を一度にメモリに保持するということです。Appleシリコン搭載のMacは、プロセッサとグラフィックスチップが1つのメモリプールを共有します。そのため、ほかのコンピュータでは専用のグラフィックスカードが必要なモデルも収まりますが、アプリが使うのと同じメモリから割り当てられます。16 GBのMacで8 GBのモデルを使うと、ほかのすべてに残るのは8 GBです。Ollamaがそれだけのメモリを抱えていても、メモリリークではありません。モデルを保持しているだけです。下の表は、その量を決める要素を示しています。
Ollamaのメモリを決めるもの
| 見えているもの | 理由 | すること |
|---|---|---|
| チャットをやめたあとも数GBを抱えている | モデルは5分間読み込まれたままになる | ollama stop、またはkeep-aliveを短くする |
| モデルのファイルサイズより多いメモリ | 実行時のコンテキストにもメモリが必要 | コンテキスト長を小さくする |
| 2つのモデルが同時にメモリにある | 最初のモデルがアンロードされる前に2つ目が要求された | ollama psで確認し、使っていないほうを停止する |
| メモリプレッシャーが黄色か赤で、Macが遅い | 空いているメモリに対してモデルが大きすぎる | 小さいモデルを使うか、ほかのアプリを閉じる |
| 応答が遅く、CPUが忙しい | モデルの一部がグラフィックスチップに収まらなかった | ollama psで配分を確認し、小さいモデルを使う |
Ollamaがモデルを読み込んだままにする理由
モデルの読み込みとは、何ギガバイトものデータをディスクからメモリに読み込むことで、数秒から1分かかります。質問のたびにこれを行うと、毎回応答が遅くなります。そのためOllamaは、最後に使ってから5分間モデルを保持し、そのあとでアンロードします。新しい質問をするたびに、この時間はリセットされます。エディタの自動補完など、Mac上のアプリが数分おきにモデルに何かを尋ねていると、モデルはいつまでもアンロードされません。
この設定はkeep-aliveと呼ばれます。OLLAMA_KEEP_ALIVEで、全体のデフォルトを変更できます。0にするとメモリはすぐに戻りますが、毎回最初の応答が遅くなります。
モデルに必要なメモリの量
目安として、必要なメモリは、モデルのファイルサイズに会話のための余裕を足した量です。パラメータ数が80億のモデルは、一般的な圧縮で約5 GB、300億のモデルは約20 GBです。ollama listで表示されるディスク上のサイズが、最初の目安になります。
見落とされがちなのがコンテキスト長です。モデルが一度に覚えておけるテキストの量のことで、そのためのメモリは、使い切るかどうかにかかわらず、モデルの読み込み時に確保されます。小さいモデルでもコンテキストが長いと、モデル自体より多くのメモリを使うことがあります。ollama psで表示されるサイズがファイルのサイズよりかなり大きいなら、コンテキストが理由です。
そのモデルはMacに収まる?
確実な確認方法は、モデルを読み込み、いつものアプリを開いた状態でのメモリプレッシャーです。緑なら、収まっています。黄色なら、macOSが空きを作るためにメモリを圧縮していて、少し遅くなります。赤なら、ディスクにスワップしていて、モデルもMacも遅くなります。グラフィックスチップに収まらず、一部がプロセッサで動いているモデルも、かなり遅くなります。どう配分されたかはollama psでわかります。
同じモデルの小さいバージョンなら、たいてい品質はあまり落ちず、メモリは大幅に減ります。16 GBのMacでは、約8 GBまでのモデルなら作業する余裕が残ります。Macがメモリをどう共有するかは、ユニファイドメモリを参照してください。
LM Studioとほかのアプリ
モデルをローカルで動かすアプリは、どれも同じです。LM Studioは、取り出すかアイドル時間が切れるまでモデルを読み込んだままにし、読み込まれたモデルをウインドウの上部に表示します。モデルを動かしてくれるエディタやチャットアプリも、裏で同じことをしています。どのアプリが抱えていても、そのメモリはモデルです。
Vitalsでできること
Vitalsは、読み込まれたモデルがMacにかける負荷を、作業中も見える場所に表示します。
- Ollamaのメモリを1行で表示。ヘルパープロセスも含めて集計
- メニューバーにメモリプレッシャーと空きメモリを表示。モデルが収まるかどうかがすぐにわかります
- グラフィックスチップの負荷をメニューバーと専用のタブに、使っているアプリとともに表示
- アプリのメモリ使用量が増え続けたときに通知
- 最もエネルギーを使ったアプリを1時間単位で表示。モデルの実行は、バッテリー駆動のMacにとって最も重い処理の1つです
知っておくと便利なこと
- Vitalsが表示するのはOllamaが抱えているメモリで、どのモデルが読み込まれているかは表示しません。それは
ollama psでわかります。 - Vitalsはモデルをアンロードしません。
ollama stopでアンロードできます。
よくある質問
Ollamaのメモリ使用量が多いのはなぜ?
モデルをメモリに保持しているからです。モデルは、最後の応答から5分間読み込まれたままになります。ollama psを実行すると何が読み込まれているかがわかり、ollama stopにモデル名を付けて実行するとアンロードできます。
Ollamaでモデルをアンロードするには?
ollama stopのあとにモデル名を付けて実行します。モデルが自動で早くアンロードされるようにするには、OLLAMA_KEEP_ALIVEを短い時間に設定します。
MacでOllamaがモデルを読み込んだままにする時間を変えるには?
ターミナルで、希望の時間を指定してlaunchctl setenv OLLAMA_KEEP_ALIVE 1mを実行し、Ollamaを終了して開き直します。0にするとすぐにアンロードされ、-1にすると読み込まれたままになります。
Ollamaでモデルを動かすにはどれくらいのメモリが必要?
モデルのファイルサイズに、コンテキストのための余裕を足したくらいです。16 GBのMacでは、約8 GBまでのモデルなら、ほかのアプリの余裕が残ります。
Ollamaがモデルのサイズより多くのメモリを使うのはなぜ?
コンテキスト長のためのメモリが、モデルの読み込み時に確保されるからです。コンテキストが長いと、数ギガバイト増えることがあります。必要なければ、コンテキストを小さくしてモデルを実行しましょう。
使っていないときもOllamaはメモリを使う?
最後の応答から5分間だけです。ただし、アプリが何かを尋ね続けている場合や、keep-aliveの時間を長くしている場合は別です。そのあとはモデルがアンロードされ、Ollamaはほとんどメモリを使いません。
ローカルモデルがMacのメモリに収まるかどうかがわかるアプリはある?
Vitalsは、メモリプレッシャー、空きメモリ、グラフィックスチップの負荷をメニューバーに表示するので、読み込まれたモデルの負荷を作業中に確認できます。
用語集
ほかのガイド
- Macが遅い原因
- Macのバッテリーを消耗させているもの
- CPUやメモリを使っているアプリ
- Macがスリープしない原因
- Chromeのメモリ使用量が多すぎる
- Macのファンがうるさい原因
- Macのファン速度を制御する方法
- MacでRAMを解放する方法
- Dockerのメモリ使用量が多すぎる
- Dockerコンテナを停止する方法
- Mac用の音量ミキサー
- CursorのCPU使用率が高い
- Claude Codeのメモリ使用量が多すぎる
- ClaudeアプリのCPU使用率が高い
- CodexのCPU使用率が高い
- アクティビティモニタの代替アプリ
- iStat Menusの代替アプリ
- Statsの代替アプリ
- Mac用のタスク マネージャー
- Mac向けシステムモニタのおすすめ
- Mac向けメニューバー型モニタのおすすめ
- Mac向け音量ミキサーのおすすめ