ローカルで大規模モデルを動かしているとき、かなり悩まされやすいのが「GPU があるのに Ollama がほぼ CPU しか使わず、速度も極端に遅い」という問題です。
先に結論を言うと、この手の問題はたいてい単一の原因ではありません。よくある原因は次のとおりです。
Ollamaが利用可能な GPU を認識できていない- ドライバ、
ROCm、CUDAの環境構築が正しくない Ollamaサービスが正しい環境変数を引き継がずに起動している- モデルが大きすぎて
CPUもしくはCPU/GPUの混在ロードに落ちている - AMD 環境では、
ROCmのバージョン、gfx設定、デバイス可視性などの互換性問題が追加で発生している
以下、時間を無駄にしにくい順番で切り分けていきます。
1. まず本当に GPU を使えていないのか確認する
一番わかりやすい確認方法はこれです。
|
|
見るべきなのは PROCESSOR 列です。
100% GPU: モデルは完全に GPU 上で動いている100% CPU: GPU はまったく使えていない48%/52% CPU/GPUのような表示: 一部は VRAM に載り、一部はシステムメモリに落ちている
100% CPU なら、次は環境とサービス設定を重点的に確認すべきです。
混在ロードの場合は、GPU が壊れているとは限らず、単純に VRAM が足りないだけのことも多いです。
2. まず一番多い思い込みを外す: モデルが VRAM に収まっていない
GPU を積んでいれば Ollama は常にフル GPU 推論になる、と考えている人は多いですが、実際はそうではありません。
モデルが大きすぎる、コンテキストが長すぎる、あるいは別のモデルがすでに VRAM を使っている場合、Ollama は次のような状態に落ちることがあります。
- 一部 GPU + 一部 CPU
100% CPU
この場合、まずは次の 2 つを試すのがいちばん早いです。
- より小さいモデルでテストする
いきなり大きなモデルを試すのではなく、まずは4Bや7Bのような小さめのモデルで確認します。 - すでに読み込まれている他のモデルを外してから再確認する
先にollama psを見て、別のモデルが VRAM を占有していないか確認します。
小さいモデルは GPU で動くのに、大きいモデルだけだめなら、原因はドライバではなく VRAM 容量であることがほとんどです。
3. GPU ドライバと下位ランタイムが正常か確認する
小さいモデルですら CPU しか使わないなら、次は下位レイヤの確認です。
NVIDIA の場合
まずはドライバが正常で、OS から GPU が見えているかを確認します。よく使う確認方法は次のとおりです。
|
|
ここでエラーになるなら、Ollama が GPU を正常に使える可能性はかなり低いです。
AMD / ROCm の場合
AMD GPU、特に ROCm 環境なら、まず次を確認します。
|
|
これらがデバイスを正常に列挙できないなら、問題はまだ Ollama より下の層にあります。アプリ側をいじる前に、そこを直すべきです。
AMD でよくあるのは、単純な「ドライバが入っているか」ではなく、次のような問題です。
ROCmのバージョンと OS の組み合わせが合っていない- 対象 GPU アーキテクチャのサポートが不完全
- デバイス自体は存在するが、実行環境が
Ollamaに正しく渡っていない
4. ターミナルではなく Ollama サービス自体を再起動する
これはかなりよくある落とし穴です。
ドライバを入れ直し、環境変数を変え、ROCm を調整したあとで、単に新しいターミナルを開いて ollama run を続けてしまうケースがあります。ですが Ollama がバックグラウンドサービスとして動いているなら、古い環境のまま動作し続けている可能性があります。
なので、より安全なのは次のやり方です。
Ollamaサービスを完全に再起動する- 必要なら OS ごと再起動する
Linux でサービスとして動かしているなら、古いプロセスを再利用していないかも確認してください。
5. 環境変数が本当にサービスまで届いているか確認する
これは特に AMD ROCm 環境で重要です。
シェル上で手動実行すると問題ないのに、Ollama サービスにすると CPU しか使わない、というケースがあります。多くの場合、原因はシェルで設定した変数がサービスプロセスに渡っていないことです。
よく確認したい変数は次のあたりです。
|
|
それぞれの意味は次のとおりです。
ROCR_VISIBLE_DEVICES:ROCmから見える GPU を制限または指定するHSA_OVERRIDE_GFX_VERSION: 一部 AMD 環境で互換性確保のために使うことがある
現在のターミナルで一時的に export しただけでは、systemd、デスクトップのバックグラウンドサービス、その他のデーモン経由で起動された Ollama には反映されないことがあります。
つまり、ターミナルで「設定済みに見える」ことと、Ollama が実際にその設定を使っていることは別です。
6. AMD 環境では ROCm の互換性を重点的に見る
公開ページの情報を見る限り、この話題の元動画は AMD Max+ 395、strix halo、AMD ROCm の文脈にあります。
この種の環境では、Ollama が GPU を使えない原因は、NVIDIA よりもバージョン整合性に左右されやすい傾向があります。
優先的に見るべき点は次のとおりです。
- 現在の OS と GPU に対して
ROCmのバージョンが適切か - その GPU が
ROCmで比較的安定して動くアーキテクチャか HSA_OVERRIDE_GFX_VERSIONの指定が必要か- 古い
Ollamaや古い推論ランタイムが互換性の問題を起こしていないか
rocminfo は正常で GPU も OS から見えているのに、Ollama だけが CPU しか使わないなら、モデルパラメータをいじるより、まずバージョンの組み合わせを疑うべきです。
7. Docker、WSL、リモート環境ではデバイスマッピングも確認する
もしベアメタルではなく、次のような環境で動かしているなら:
- Docker
- WSL
- リモートコンテナ
- 仮想化環境
もう一段下を見て、「GPU デバイスが本当にその環境に渡っているか」を確認する必要があります。
典型的には次のような状態になります。
- ホスト側では GPU が見えている
- しかしコンテナやサブシステム内の
OllamaはCPUしか使わない
この場合、問題は Ollama 自体ではなく、コンテナやサブシステムに GPU アクセス権限が渡っていない可能性があります。
8. 最後にログを見る。やみくもに再インストールしない
ここまで確認したなら、次に有効なのは何度も再インストールすることではなく、Ollama の起動ログと実行ログを直接見ることです。
見るべきポイントは大きく 2 つです。
- GPU を認識できているか
- ドライバ、ライブラリ読込、デバイス初期化失敗などのエラーが出ていないか
ログに「互換 GPU が見つからない」や「ROCm/CUDA の初期化に失敗した」といった内容が出ていれば、切り分けの方向はかなり明確になります。
切り分け順序
最短ルートだけ覚えたいなら、次の順番で確認すると効率的です。
ollama psでGPU、CPU、混在ロードのどれかを確認する- 小さいモデルで試し、VRAM 不足を切り分ける
nvidia-smi、rocminfo、rocm-smiで下位環境が正常か先に確認するOllamaサービスを完全に再起動する- 特に AMD では
ROCR_VISIBLE_DEVICESとHSA_OVERRIDE_GFX_VERSIONを確認する - Docker / WSL ならデバイスマッピングを確認する
- 最後にログを見て、具体的なエラーを特定する
まとめ
Ollama が GPU ではなく CPU を使ってしまう問題は、だいたい次の 3 パターンのどれかです。
- GPU がそもそも認識されていない
- GPU は見えているが、実行環境が
Ollamaに届いていない - GPU は動いているが、モデルが大きすぎて
CPUまたは混在メモリに落ちている
この 3 つをまず分けて考えるだけで、切り分けはかなり速くなります。
AMD 環境では特に、ROCm のバージョン整合性、デバイス可視性、互換性用の環境変数を重視して確認するのがポイントです。