Ollama が GPU を使わず CPU で動いてしまう問題の対処法

Ollama が GPU ではなく CPU で動いてしまうときの実用的な切り分け手順を整理します。GPU の認識、ROCm や CUDA 環境、サービス再起動、VRAM 不足、AMD 環境で起きやすい互換性問題を重点的に扱います。

ローカルで大規模モデルを動かしているとき、かなり悩まされやすいのが「GPU があるのに Ollama がほぼ CPU しか使わず、速度も極端に遅い」という問題です。

先に結論を言うと、この手の問題はたいてい単一の原因ではありません。よくある原因は次のとおりです。

  • Ollama が利用可能な GPU を認識できていない
  • ドライバ、ROCmCUDA の環境構築が正しくない
  • Ollama サービスが正しい環境変数を引き継がずに起動している
  • モデルが大きすぎて CPU もしくは CPU/GPU の混在ロードに落ちている
  • AMD 環境では、ROCm のバージョン、gfx 設定、デバイス可視性などの互換性問題が追加で発生している

以下、時間を無駄にしにくい順番で切り分けていきます。

1. まず本当に GPU を使えていないのか確認する

一番わかりやすい確認方法はこれです。

1
ollama ps

見るべきなのは 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 つを試すのがいちばん早いです。

  1. より小さいモデルでテストする
    いきなり大きなモデルを試すのではなく、まずは 4B7B のような小さめのモデルで確認します。
  2. すでに読み込まれている他のモデルを外してから再確認する
    先に ollama ps を見て、別のモデルが VRAM を占有していないか確認します。

小さいモデルは GPU で動くのに、大きいモデルだけだめなら、原因はドライバではなく VRAM 容量であることがほとんどです。

3. GPU ドライバと下位ランタイムが正常か確認する

小さいモデルですら CPU しか使わないなら、次は下位レイヤの確認です。

NVIDIA の場合

まずはドライバが正常で、OS から GPU が見えているかを確認します。よく使う確認方法は次のとおりです。

1
nvidia-smi

ここでエラーになるなら、Ollama が GPU を正常に使える可能性はかなり低いです。

AMD / ROCm の場合

AMD GPU、特に ROCm 環境なら、まず次を確認します。

1
2
rocminfo
rocm-smi

これらがデバイスを正常に列挙できないなら、問題はまだ Ollama より下の層にあります。アプリ側をいじる前に、そこを直すべきです。

AMD でよくあるのは、単純な「ドライバが入っているか」ではなく、次のような問題です。

  • ROCm のバージョンと OS の組み合わせが合っていない
  • 対象 GPU アーキテクチャのサポートが不完全
  • デバイス自体は存在するが、実行環境が Ollama に正しく渡っていない

4. ターミナルではなく Ollama サービス自体を再起動する

これはかなりよくある落とし穴です。

ドライバを入れ直し、環境変数を変え、ROCm を調整したあとで、単に新しいターミナルを開いて ollama run を続けてしまうケースがあります。ですが Ollama がバックグラウンドサービスとして動いているなら、古い環境のまま動作し続けている可能性があります。

なので、より安全なのは次のやり方です。

  • Ollama サービスを完全に再起動する
  • 必要なら OS ごと再起動する

Linux でサービスとして動かしているなら、古いプロセスを再利用していないかも確認してください。

5. 環境変数が本当にサービスまで届いているか確認する

これは特に AMD ROCm 環境で重要です。

シェル上で手動実行すると問題ないのに、Ollama サービスにすると CPU しか使わない、というケースがあります。多くの場合、原因はシェルで設定した変数がサービスプロセスに渡っていないことです。

よく確認したい変数は次のあたりです。

1
2
ROCR_VISIBLE_DEVICES
HSA_OVERRIDE_GFX_VERSION

それぞれの意味は次のとおりです。

  • ROCR_VISIBLE_DEVICES: ROCm から見える GPU を制限または指定する
  • HSA_OVERRIDE_GFX_VERSION: 一部 AMD 環境で互換性確保のために使うことがある

現在のターミナルで一時的に export しただけでは、systemd、デスクトップのバックグラウンドサービス、その他のデーモン経由で起動された Ollama には反映されないことがあります。

つまり、ターミナルで「設定済みに見える」ことと、Ollama が実際にその設定を使っていることは別です。

6. AMD 環境では ROCm の互換性を重点的に見る

公開ページの情報を見る限り、この話題の元動画は AMD Max+ 395strix haloAMD ROCm の文脈にあります。
この種の環境では、Ollama が GPU を使えない原因は、NVIDIA よりもバージョン整合性に左右されやすい傾向があります。

優先的に見るべき点は次のとおりです。

  1. 現在の OS と GPU に対して ROCm のバージョンが適切か
  2. その GPU が ROCm で比較的安定して動くアーキテクチャか
  3. HSA_OVERRIDE_GFX_VERSION の指定が必要か
  4. 古い Ollama や古い推論ランタイムが互換性の問題を起こしていないか

rocminfo は正常で GPU も OS から見えているのに、Ollama だけが CPU しか使わないなら、モデルパラメータをいじるより、まずバージョンの組み合わせを疑うべきです。

7. Docker、WSL、リモート環境ではデバイスマッピングも確認する

もしベアメタルではなく、次のような環境で動かしているなら:

  • Docker
  • WSL
  • リモートコンテナ
  • 仮想化環境

もう一段下を見て、「GPU デバイスが本当にその環境に渡っているか」を確認する必要があります。

典型的には次のような状態になります。

  • ホスト側では GPU が見えている
  • しかしコンテナやサブシステム内の OllamaCPU しか使わない

この場合、問題は Ollama 自体ではなく、コンテナやサブシステムに GPU アクセス権限が渡っていない可能性があります。

8. 最後にログを見る。やみくもに再インストールしない

ここまで確認したなら、次に有効なのは何度も再インストールすることではなく、Ollama の起動ログと実行ログを直接見ることです。

見るべきポイントは大きく 2 つです。

  • GPU を認識できているか
  • ドライバ、ライブラリ読込、デバイス初期化失敗などのエラーが出ていないか

ログに「互換 GPU が見つからない」や「ROCm/CUDA の初期化に失敗した」といった内容が出ていれば、切り分けの方向はかなり明確になります。

切り分け順序

最短ルートだけ覚えたいなら、次の順番で確認すると効率的です。

  1. ollama psGPUCPU、混在ロードのどれかを確認する
  2. 小さいモデルで試し、VRAM 不足を切り分ける
  3. nvidia-smirocminforocm-smi で下位環境が正常か先に確認する
  4. Ollama サービスを完全に再起動する
  5. 特に AMD では ROCR_VISIBLE_DEVICESHSA_OVERRIDE_GFX_VERSION を確認する
  6. Docker / WSL ならデバイスマッピングを確認する
  7. 最後にログを見て、具体的なエラーを特定する

まとめ

OllamaGPU ではなく CPU を使ってしまう問題は、だいたい次の 3 パターンのどれかです。

  • GPU がそもそも認識されていない
  • GPU は見えているが、実行環境が Ollama に届いていない
  • GPU は動いているが、モデルが大きすぎて CPU または混在メモリに落ちている

この 3 つをまず分けて考えるだけで、切り分けはかなり速くなります。
AMD 環境では特に、ROCm のバージョン整合性、デバイス可視性、互換性用の環境変数を重視して確認するのがポイントです。

元動画:https://www.bilibili.com/video/BV1cHoYBqE8k/

记录并分享
Hugo で構築されています。
テーマ StackJimmy によって設計されています。