OllamaをデュアルGPU環境で社内PCから使えるようにするまでの完全トラブルシューティング

生成AIを業務適用に向けて様々な検証を行っていた最中、過去に他部門で利用していたお下がりPCが手に入り、RTX8000(メモリ48GB)2枚を搭載したすごいマシンを業務で利用可能になりました。

Windows 11 + Quadro RTX 8000 × 2 のマシンで、Chrome拡張「Page Assist」から社内ネットワーク越しにOllamaを使えるようにした実録です。「動いているのに使えない」を一つずつ潰していった記録を、同じ壁にぶつかった方の時短につながるよう整理して共有します。


目次

環境

  • OS: Windows 11
  • GPU: Quadro RTX 8000 × 2
  • CUDA: 12.4
  • 目的: 別PCのChrome拡張(Page Assist)からOllamaサーバーに接続して使う

最初に押さえる全体像

  • 最近、OllamaにもチャットUIが搭載されるもインストールしたPCでのみ利用可能。
  • 別PCから利用する場合、Ollamaは「APIサーバー」。ブラウザで直接アクセスしてもチャットUIは出ません。
  • チャットUIは別途フロントエンドが必要(例: Page Assist、Offline AI Chat、Ollama Client など)。
  • 社内別PCから使うには「Ollamaを外部接続可にする」「Windowsファイアウォールを開ける」「フロントエンドのCORS設定を合わせる」の3点が要所。

推奨フロントエンド

  • Page Assist(機能豊富・RAG対応)
  • Offline AI Chat (Ollama)(シンプル)
  • Ollama Client(プライバシー重視)

ステップバイステップ手順

1) Ollamaを外部接続可にする

サーバー用ターミナルでのみ環境変数をセットして起動(クライアント側に影響させないのがコツ)。

set OLLAMA_HOST=0.0.0.0
set OLLAMA_ORIGINS=*
ollama serve

Windows Defender ファイアウォール:

  1. 「セキュリティが強化されたWindows Defenderファイアウォール」を開く
  2. 受信の規則 → 新しい規則 → ポート → TCP 11434 → 接続を許可
  3. プロファイルは「ドメイン」「プライベート」を選択(社内LAN向け)

動作確認(別PCから):

curl http://サーバーIP:11434/            # “Ollama is running” が返ればOK(UIは出ないのが正常)
curl http://サーバーIP:11434/api/tags    # モデル一覧が返ればAPI疎通OK

ポイント:

  • OLLAMA_HOST はサーバーの待受アドレス。0.0.0.0 で全NIC待受け。
  • これをグローバル環境に入れると、クライアントの ollama コマンドも 0.0.0.0 に繋ごうとして失敗します。サーバー起動用のターミナルにだけ設定するのが安全。

2) Page Assistをつなぐ(CORS対策)

Page Assistの設定:

  • 自動Ollama CORSフィックス: 無効
  • カスタムOriginのURL: http://サーバーIP:11434
  • カスタムOriginのURLを有効化: 有効

サーバー側は OLLAMA_ORIGINS=* で広めに許可(運用では必要に応じて絞るのを推奨)。

よくある誤解:

  • http://サーバーIP:11434 にブラウザでアクセスしてもチャットは表示されません。Page AssistなどのUIから接続します。

3) GPUで動いているか確認(LM Studio干渉の罠)

現象:

  • nvidia-smi でOllamaプロセスが見えるのにGPU使用率が0%のまま。

原因:

  • LM StudioがGPUメモリを占有(available="0 B" に近い、offloaded 0/xx layers to GPU でCPU実行)。

解決:

taskkill /f /im "LM Studio.exe"
ollama serve

成功の目安(ログ抜粋):

available="46.5 GiB" free="46.5 GiB"
offloaded 25/25 layers to GPU

4) デュアルGPUの活用

まず両GPUを可視化:

set CUDA_VISIBLE_DEVICES=0,1

並列度など(用途に応じて):

set OLLAMA_NUM_PARALLEL=2
set OLLAMA_MAX_LOADED_MODELS=1

重要な補足(単一リクエストで2枚活用したい場合):

  • 1つのモデルを複数GPUに分割して載せるには、Modelfile(またはリクエスト)で gpu_split を指定。
    例(2枚均等分割のイメージ):
  gpu_split 50 50
  • CUDA_VISIBLE_DEVICES で2枚を見せただけではGPU0のみ使う挙動になることがあります。nvidia-smi で両方に負荷が載るか要確認。
  • バージョンにより挙動やパラメータ名は変わり得るため、該当バージョンのOllama/llama.cppドキュメントを参照してください。

5) パフォーマンス系の任意設定(必要に応じて)

環境やバージョン差異があるため、「使える場合に」試すものとして記載します。

set OLLAMA_KEEP_ALIVE=30m
set OLLAMA_MAX_LOADED_MODELS=1
set OLLAMA_NUM_PARALLEL=2
set OLLAMA_ORIGINS=*
set CUDA_VISIBLE_DEVICES=0,1

補足:

  • コンテキスト長はモデル側の設定(num_ctx)で指定するのが確実。環境変数 OLLAMA_NUM_CTX をサポートする版もあり。
  • num_gpu 系はリクエストやModelfile側のパラメータとして指定する実装が主流で、環境変数でない版が多いです。
  • OLLAMA_FLASH_ATTENTION 等の実験的オプションはバージョン依存のため、実装状況を確認のうえ使用してください。

発生した具体的な問題と解決

問題1: ブラウザに「Ollama is running」と出るだけ

  • 原因: OllamaはAPIサーバー。UIは別途必要。
  • 対策: Page Assistなどのフロントエンドを利用。

問題2: Page Assistで「Unable to connect to Ollama」

対策:

  • サーバー側で OLLAMA_HOST=0.0.0.0OLLAMA_ORIGINS=* を設定し、ollama serve を起動。
  • Windows Defender ファイアウォールで TCP 11434 を「ドメイン」「プライベート」に許可。

検証コマンド:

echo %OLLAMA_HOST%
echo %OLLAMA_ORIGINS%
netstat -an | findstr 11434

問題3: 接続後に403「Ollama call failed with status code 403」

  • 原因: Page Assist側のCORS設定が競合。
  • 対策(Page Assist設定):
  • 自動Ollama CORSフィックス: 無効
  • カスタムOriginのURL: http://192.168.x.x:11434
  • カスタムOriginのURLを有効化: 有効

問題4: GPUを使わずCPUで動作

  • 原因: LM StudioがGPUを専有。
  • 対策:
  taskkill /f /im "LM Studio.exe"
  ollama serve
  • 確認: nvidia-smi でGPU使用率、ログの offloaded xx/xx layers to GPU をチェック。

問題5: デュアルGPU活用

設定例:

set CUDA_VISIBLE_DEVICES=0,1
set OLLAMA_NUM_PARALLEL=2
set OLLAMA_MAX_LOADED_MODELS=1

単一推論を2枚で分割するなら Modelfile で gpu_split を指定(両GPUに負荷が乗るか nvidia-smi で確認)。


重要な発見(正体判明): 環境変数設定時に ollama コマンドがエラー

現象:

set OLLAMA_HOST=0.0.0.0
ollama list
# Error: something went wrong, please see the ollama server logs for details

原因の本質:

  • OLLAMA_HOST はクライアントの接続先指定にも使われます。
  • 0.0.0.0 は「サーバーの待受アドレス」であって「クライアントの接続先」にはなりません。
  • そのため、クライアント側で OLLAMA_HOST=0.0.0.0 が見えていると接続に失敗します。

正しい回避/運用:

  1. サーバー起動用ターミナルでのみ環境変数をセットして起動
   set OLLAMA_HOST=0.0.0.0 && set OLLAMA_ORIGINS=* && ollama serve
  1. 別ターミナル(環境変数を未設定のまま)でクライアントコマンドを実行
   ollama list
  1. もし既に環境に入れてしまった場合は、一時的にクリアしてから実行
   set OLLAMA_HOST=
   set OLLAMA_ORIGINS=
   ollama list

トラブルシューティングのコツ(チェックリスト)

プロセス・ポート・GPUの競合確認

nvidia-smi                         # GPU使用プロセス確認
tasklist | findstr ollama          # Ollamaプロセス確認
netstat -an | findstr 11434        # ポート使用状況

競合しやすいアプリ例: LM Studio、他の推論サーバー、監視/セキュリティ製品のプロキシ機能

段階的アプローチ

  • 外部接続だけ → フロントエンド接続 → GPU単体 → デュアルGPU → 最適化 の順で一つずつ確認。
  • どこで壊れたかを切り分けやすくする。

ログを活用

詳細ログを有効化して起動:

set OLLAMA_DEBUG=1
ollama serve

ネットワークとセキュリティの注意

  • OLLAMA_ORIGINS=* は検証向け。本番は必要最小限に絞る(拡張のオリジンや社内FQDNなど)。
  • ファイアウォールは「ドメイン」「プライベート」のみに限定。パブリックでは開けない。
  • サブネット/VLAN越えの場合はL3ルーティングとACLも確認。

まとめ(得られた教訓)

  • OllamaはAPIサーバー。UIは別に用意する。
  • 社内別PCから使うには、ホストバインド・ファイアウォール・CORSの3点が要。
  • GPUが使われないときは、まず nvidia-smi で他プロセスの専有を疑う(LM Studioが典型例)。
  • OLLAMA_HOST はサーバー用にだけスコープ。クライアント側に漏れるとコマンド失敗。
  • デュアルGPUは「並列実行」と「モデル分割」で使い方が異なる。後者は gpu_split の指定を忘れない。

この手順で、Quadro RTX 8000 × 2 の環境で、社内の複数PCからPage Assist経由で高速なローカルLLMを安定運用できました。誰かの「動くはずなのに動かない」を1つでも減らせたら幸いです。


参考リンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次