大規模なモデルをローカルで実行する場合、最も混乱する問題は、マシンには明らかにグラフィック カードが搭載されていますが、依然として Ollama が主に CPU を消費し、速度が途方もなく遅いということです。
まず結論からお話します。通常、この種の問題の原因は 1 つだけではありません。最も一般的なカテゴリは次のとおりです。
Ollama利用可能な GPU がまったく認識されない- ドライバーおよび
ROCmまたはCUDA環境が正しくインストールされていません。 ・Ollamaサービス起動時に正しい環境変数が引き継がれない。 - モデルが大きすぎるため、実際には
CPUまたはCPU/GPU混合ロードに戻されました。 - AMD プラットフォームには、誤った
ROCmバージョン、gfxコードネーム、または誤ったデバイスの可視性設定など、追加の互換性の問題があります。
最も時間を節約できる順序を以下に示します。 1. まずは「本当にGPUが使用されていないのか」を確認してください
最も直接的な方法は、以下を確認することです。
|
|
PROCESSOR 列を確認します。
100% GPU:モデルの重みがすべて GPU にロードされています。100% CPU:重みがすべてシステムメモリにあります。48%/52% CPU/GPUのような表示:一部が GPU に offload され、残りがシステムメモリにあります。
この割合はモデルのロード先を表し、瞬間的な GPU 使用率ではありません。生成の合間に使用率が下がっても、重みは VRAM に残っている場合があります。
表示される内容が 100% CPU の場合は、後で環境とサービス構成を確認することに重点を置く必要があります。
混合ロードが発生した場合、必ずしも「グラフィック カードが動作していない」わけではなく、VRAMが不足している可能性が高くなります。 2. まず、最も一般的な誤解を解消します。モデルをVRAMにロードできないということです。
多くの人は、GPU がインストールされている限り、Ollama は完全なグラフィックス カード推論を実行できると考えています。実際にはそうではありません。
モデルが大きすぎる場合、コンテキストが長すぎる場合、またはマシン上にVRAMを占有している他のモデルがある場合、Ollama は次のようにフォールバックする可能性があります。
- 一部の GPU + 一部の CPU
- 直接
100% CPU
現時点では、最初に 2 つの最も簡単な検証を行うことができます。
- テスト用に小さいモデルに変更します。
たとえば、最初から多数のパラメーターを実行するのではなく、
4Bや7Bなどの小規模なモデルを最初に使用します。 - ロードされている他のモデルをアンロードして、再試行します。
まず、
ollama psを見て、VRAMを占有している他のモデルがないことを確認します。
小規模モデルは GPU 上で実行できるが、大規模モデルは実行できない場合、多くの場合、問題はドライバーではなくVRAM容量にあります。 3. グラフィックス カード ドライバーと基盤となる環境が利用可能かどうかを確認します。
小規模なモデルでも CPU しか実行できない場合、次のステップは基盤となる環境を調べることです。 NVIDIA の方向性
まず、ドライバーが正常であり、システムがグラフィックス カードを認識できることを確認します。一般的な検査方法には次のようなものがあります。
|
|
ここでエラーが報告された場合、Ollama は基本的に GPU を正常に使用することができません。 AMD / ROCm 方向
AMD GPU の場合、特に ROCm 環境では、重要なポイントは次のとおりです。
|
|
これらのツールがデバイスを正常にリストできない場合は、Ollama よりも前に問題がまだ存在していることを意味します。アプリケーション層を投げ続けないでください。
AMD の場合、最も一般的な質問は「ドライバーはインストールされていますか?」ではありません。しかし:
ROCmのバージョンがシステムのバージョンと一致しません- 現在の GPU アーキテクチャのサポートは不完全です
- デバイスは存在しますが、動作環境が Ollama に正しく公開されていません 4. 端末を再起動するだけでなく、Ollama サービスを再起動します。
これは非常に高周波のピットです。
多くの人は、ドライバーをインストールし、環境変数を変更し、ROCm を完了した後、ターミナルを再度開いて、直接 ollama run を続行します。ただし、Ollama がバックグラウンド サービスとして実行されている場合は、古い環境がまだ使用されている可能性があります。
したがって、より安定したアプローチは次のとおりです。
Ollamaサービスを完全に再起動します- 必要に応じてシステムを直接再起動します
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 プラットフォームよりもバージョン マッチングに依存します。
次の項目に優先順位を付けることができます。
- バージョン
ROCmは現在のシステムと現在のグラフィックス カードに適していますか? 2.現在のGPUがROCmがより適切にサポートするアーキテクチャ範囲に属しているかどうか HSA_OVERRIDE_GFX_VERSIONを補足する必要がありますか?- 互換性の問題の原因は、
Ollamaの古いバージョンですか、それとも基礎となる推論ライブラリの古いバージョンですか?
rocminfo が正常であり、GPU がシステムによって認識されることを確認したが、Ollama が依然として CPU のみを実行する場合は、モデル パラメーターをやみくもに調整し続けるのではなく、バージョンの組み合わせに戻って再確認する必要がある可能性が高くなります。 7. Docker、WSL、またはリモート環境では、デバイス マッピングをさらに確認する必要があります
ベアメタル上で直接実行しているのではなく、次の環境で実行している場合:
-ドッカー -WSL
- リモートコンテナ -仮想化環境
次に、もう 1 つのレイヤー、つまり GPU デバイスが実際に公開されているかどうかを確認する必要があります。
典型的な現象は次のとおりです。
- ホストは GPU を認識できます
- コンテナ内の
OllamaはCPUのみを実行できます
現時点では、問題が Ollama 自体にあるのではなく、コンテナーまたはサブシステムが GPU にまったくアクセスできないことを最初に確認する必要があります。 8. ログの最初から推測するのではなく、最後にログを読んでください。
以前にすべてを確認したことがある場合、最も効果的な方法は、繰り返し再インストールを続けるのではなく、Ollama の起動ログと実行ログを直接確認することです。
次の 2 種類の情報に注目してください。
・GPUは認識されていますか?
- ドライバー、ライブラリのロード、デバイスの初期化の失敗などのエラーはありませんか。
「互換性のある GPU が見つかりません」または「ROCm/CUDA の初期化に失敗しました」などのメッセージがログに明確に表示されていれば、トラブルシューティングの方向性がすぐに明確になります。 プラットフォームごとに実際のログを読み取る
ウィンドウ
デバッグ モードで起動する前に、Ollama をトレイから完全に終了します。
|
|
インストール バージョン ログは通常、次の場所にあります。
|
|
はディレクトリを直接開くことができます。
|
|
Linux システム
|
|
NVIDIA デバイスの検出が失敗した場合は、次のことをもう一度確認してください。
|
|
公式トラブルシューティング ドキュメントに記載されている一般的な CUDA エラーには、初期化されていない、デバイスが利用できない、デバイスなし、不明なエラーなどがあります。これらのメッセージがログに表示される場合、方向はモデル プロンプトの単語ではなく、ドライバー、UVM モジュール、またはコンテナー ランタイムです。 ドッカー
まず、コンテナーの実行中に GPU が表示されることを証明します。
|
|
このコマンドが失敗すると、Ollama コンテナーは NVIDIA GPU を使用できなくなります。 Ollama コンテナを再起動する前に、NVIDIA Container Toolkit または Docker 構成を修復します。 Linux AMD
Ollama サービス ユーザーが /dev/kfd および /dev/dri にアクセスできるかどうかを確認します。
|
|
ROCm 検出プロセスをデバッグする必要がある場合:
|
|
ログに GPU 検出タイムアウトが表示され、システムがまだ ROCm 6.x 以前のドライバーを使用している場合は、互換性のある ROCm 7 ドライバーにアップグレードし、Ollama の現在のハードウェア ドキュメントに従って再起動する必要があります。明確なドライバー バージョン エラーをマスクするために HSA_OVERRIDE_GFX_VERSION を使用しないでください。 修理後の受付
修理後に少なくとも 1 回のコールド スタート検証を完了します。
|
|
nvidia-smi、rocm-smi、またはシステム GPU モニターを同時に観察します。受入結論は、ollama ps の PROCESSOR 列に従って記録されます。
100% GPU: モデルは GPU に完全にロードされています。100% CPU: システム メモリをまだ完全に使用しています。CPU/GPU: 混合ロード。通常は、VRAMの容量不足によるものであるかどうかを判断し続ける必要があります。
最後に、サービス ログを再度チェックして、新しいデバイスの検出が失敗していないことを確認します。 GPU 使用率の一時的な増加が確認されただけでは、モデルが常に GPU 上にあることを証明するには十分ではありません。 リカバリとロールバック
環境変数を変更した後に Ollama を起動できない場合は、まずこのラウンドで追加した変数を元に戻してサービスを再起動します。ドライバー、コンテナー マッピング、ROCm バージョン、および Ollama 構成を同時に変更しないでください。変更すると、どの変更が有効になるかを判断できなくなります。
各ラウンドで 1 つの変更のみを行い、変更前のログ、変更コマンド、および変更された ollama ps の 3 つの証拠を保存することをお勧めします。ドライバーをアップグレードする前に、システムの復元ポイントを作成するか、ロール可能なドライバーのインストール パッケージを保持します。 注文を確認しています
最短パスを覚えておきたい場合は、次の順序で実行できます。
ollama psGPU、CPU、または混合負荷であるかどうかを確認します。- VRAM不足を解消するために、より小さいモデルに変更します。
nvidia-smi、rocminfo、rocm-smiを使用して、まず基盤となる環境が正常であることを確認します。Ollamaサービスを完全に再起動します。- サービス環境変数、特に AMD の
ROCR_VISIBLE_DEVICESおよびHSA_OVERRIDE_GFX_VERSIONを確認します。 - Docker/WSLの場合はデバイスマッピングを再度確認します