自分専用のChatGPTをセルフホスト:Open WebUIとDockerによるプロフェッショナルガイド

AI tutorial - IT technology blog
AI tutorial - IT technology blog

データの主導権を取り戻す

プライバシーは、クラウドベースのAIから脱却する最大の理由です。パブリックモデルに送信されるすべてのプロンプトは、保存、監査、またはトレーニングに使用される可能性があります。機密性の高いクライアントコードや独自のデータを扱う開発者にとって、これは大きなリスクです。Open WebUIはこのギャップを埋めてくれます。自前のハードウェア上で動作する、洗練されたChatGPT風のインターフェースを提供します。

私はこのセットアップを利用して、素のローカルモデルと生産的なチーム環境の間のギャップを埋めてきました。これにより、コマンドラインツールがコラボレーションプラットフォームへと変わります。単にモデルを実行するだけでなく、プライベートなAIエコシステムを構築することになるのです。

クイックスタート:5分で稼働させる

Dockerの準備が整い、マシンでOllamaがすでに動作しているなら、コマンド1つでインターフェースを起動できます。これは、本格的な設定を行う前にUIをテストする最も速い方法です。

docker run -d -p 3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v open-webui:/app/backend/data \
  --name open-webui \
  ghcr.io/open-webui/open-webui:main

コンテナが起動したら、http://localhost:3000にアクセスしてください。最初に登録したユーザーが管理者になります。ここでのポイントはhost.docker.internalフラグです。これにより、コンテナ化されたUIがホストOS上で動作しているOllamaサービスと通信できるようになります。

Professional Deployment with Docker Compose

テスト目的であれば単一のdocker runで十分ですが、長期的な利用にはDocker Composeをお勧めします。環境変数、ネットワーク設定、データボリュームを、バージョン管理可能な1つのファイルに集約できます。このアプローチは、RAG(検索拡張生成)の統合や、複数のバックエンドの接続を開始する際に不可欠です。

最適化された設定

docker-compose.yamlファイルを作成します。この設定により、UIとOllamaバックエンドが同じ仮想ネットワーク上に配置され、信頼性の高い通信が保証されます。

services:
  ollama:
    volumes:
      - ./ollama:/root/.ollama
    container_name: ollama
    pull_policy: always
    tty: true
    restart: unless-stopped
    image: ollama/ollama:latest

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    volumes:
      - ./open-webui:/app/backend/data
    depends_on:
      - ollama
    ports:
      - 3000:8080
    environment:
      - 'OLLAMA_BASE_URL=http://ollama:11434'
      - 'WEBUI_SECRET_KEY=ここに長いランダムな文字列を入力してください'
    restart: unless-stopped

データを失わないために

よくある間違いは、ボリュームマッピングを忘れることです。Open WebUIは、チャット履歴やユーザー設定をコンテナ内のSQLiteデータベースに保存します。/app/backend/dataをハードドライブのフォルダにマッピングしないと、次回のアップデート時にデータが消失してしまいます。上記の例では、ポータビリティとバックアップのしやすさを考慮して./open-webuiを使用しています。

高度なパフォーマンス:GPUとRAG

Llama 3.1 70BのようなモデルをCPUで実行するのは、ストレスの元です。おそらく毎秒1〜2トークンという低速な動作になるでしょう。毎秒50トークン以上の速度を得るには、GPUをDockerにパススルーする必要があります。NVIDIAユーザーは、ホストシステムにNVIDIA Container Toolkitをインストールしておく必要があります。

ハードウェアアクセラレーションの有効化

Composeファイルのollamaサービスを更新して、GPUリソースを割り当てます。

deploy:
  resources:
    reservations:
      devices:
        - driver: nvidia
          count: all
          capabilities: [gpu]

この単純な追加で、体験が劇的に変わります。レスポンスは、一語一語ゆっくり生成される状態から、ほぼ瞬時に結果が出るようになります。

RAGでAIをよりスマートにする

Open WebUIにはRAGエンジンが組み込まれています。PDFやテキストファイルをチャットに直接ドロップできます。システムがそれらをインデックス化し、そのコンテキストを使用して質問に答えます。技術文書の場合、RAG_TOP_Kを5または10に設定することをお勧めします。これにより、モデルがより多くのドキュメントスニペットを参照するようになり、より正確な技術的回答が得られます。

メンテナンスとセキュリティのヒント

安全なアップデート

Open WebUIチームは頻繁にアップデートをリリースしており、週に数回行われることもあります。チャットを失わずにアップデートするには、以下の3ステップのワークフローに従ってください。

  1. docker compose down でサービスを停止します。
  2. docker compose pull で最新イメージを取得します。
  3. docker compose up -d で再起動します。

以前に永続ボリュームを定義したため、データベースは安全に保たれます。

チーム利用のためのセキュリティ強化

このインスタンスを同僚と共有する場合、デフォルト設定は権限が緩すぎます。全員がアカウントを作成したら、環境変数でENABLE_SIGNUP=Falseを設定し、部外者がアカウントを作成できないようにします。また、UIがネットワーク経由でアクセス可能な場合は、常にNginxやTraefikなどのリバースプロキシを使用してHTTPSを有効にしてください。

ハイブリッドハブ戦略

ローカルモデルは素晴らしいですが、時にはGPT-4oのような圧倒的なパワーが必要になることもあります。私はよくOpen WebUIをハイブリッドハブとして使用します。設定でOpenAIやAnthropicのAPIキーを追加することで、基本的なタスクには無料のローカルモデルを、複雑な推論にはプレミアムなクラウドモデルを、同じ会話スレッド内で切り替えて使用できます。

最後に、ハードウェアの状態に注意してください。UIが重く感じる場合は、RAMの割り当てを確認してください。WindowsやMacのDocker Desktopは、デフォルトで2GBまたは4GBのRAMに制限されています。LLMをスムーズに動作させるには、Dockerの設定で少なくとも16GBまで引き上げることをお勧めします。

Share: