【Mac】Ollama + OpenWebUI: Docker Composeによる最短構築手順と「GPU問題」の現実

【Mac】Ollama + OpenWebUI: Docker Composeによる最短構築手順と「GPU問題」の現実解

最近、社内でも「ローカルLLM」の話題が尽きません。 データの機密性を保ちつつ、好き放題にAIを使える環境を手元に持っておくことは、技術検証において必須になりつつあります。

今回は、Macユーザー向けに Ollama(バックエンド)と OpenWebUI(フロントエンド)を組み合わせた環境を、エンジニアらしく Docker Compose でサクッと構築する手順を紹介します。

…が、実はそこには「Dockerには罠がある」という話もしなければなりません。 構築手順とセットで、Mac特有のパフォーマンス問題とその回避策(ハイブリッド構成)まで、現場目線で深掘りします。

Docker Composeで一発構築(基本編)

まずは「とにかく動かす」ことが大事です。 依存関係を汚さず、コマンド一発で環境が立ち上がるのがDockerの魅力です。

以下の docker-compose.yaml を作成します。

services:
  # バックエンド: LLMを動かすエンジン
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ./ollama:/root/.ollama  # モデルデータを永続化
    restart: always
    environment:
      - OLLAMA_KEEP_ALIVE=24h   # モデルをメモリに維持する時間
      - OLLAMA_NUM_PARALLEL=2   # 並列リクエスト数

  # フロントエンド: ChatGPTライクなUI
  ollama-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: ollama-webui
    restart: unless-stopped
    ports:
      - "8080:8080"
    extra_hosts: 
      - "host.docker.internal:host-gateway" # コンテナからホストへアクセス用
    depends_on:
      - ollama
    volumes:
      - ./ollama-webui:/app/backend/data # チャット履歴等を永続化
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434 # コンテナ間通信

volumes:
  ollama:
  ollama-webui:

起動とモデルの準備

# 起動
docker-compose up -d

# モデルのダウンロード(例: 軽量で高性能なLlama 3)
docker exec -it ollama ollama run llama3

これで http://localhost:8080 にアクセスすれば、アカウント作成画面(初回のみ)を経て、すぐにチャットが始められます。 チームメンバーに「これ試してみて」と共有するなら、このdocker-compose.yamlを渡すのが最適解です。

Macユーザーが直面する「重い」という現実

しかし、Mac(特にApple Silicon搭載機)で上記の手順を実行すると、あることに気づくはずです。

「…あれ、生成遅くない?」

ファンが勢いよく回り出し、PC本体が熱くなります。 実は、現在のDocker Desktop for Macの仕様上、コンテナ内のOllamaからはMacのGPU (Metal) に直接アクセスできません

結果として、高性能なM1/M2/M3チップを積んでいても、LLMの推論処理を含めた全てを CPU で処理することになります。 これでは、せっかくのMacのパワフルさが台無しです。

Warning

CPU動作だと、7Bクラスのモデルでもレスポンスが「モッサリ」します。実用には少し厳しいレベルです。

最適解:ハイブリッド構成(Native + Docker)

そこで私が推奨する「ファイナルアンサー」がこれです。

  • Ollama: Mac Native版アプリを使用(GPUフル活用)
  • OpenWebUI: Dockerコンテナを使用(環境管理が楽)

この構成なら、推論はGPUで爆速、UIはDockerで管理という「いいとこ取り」が可能です。

手順1: Native Ollamaのセットアップ

1. 公式サイト (ollama.com) からMac版をダウンロードしてインストール。 2. ターミナルで ollama serve が動いていることを確認(アプリ起動で自動起動しています)。

手順2: 外部アクセス許可の設定

デフォルトでは、Native Ollamaはローカルホスト以外からの接続を拒否します。Dockerコンテナ(OpenWebUI)から接続させるため、環境変数を設定します。

# ターミナルで実行
launchctl setenv OLLAMA_ORIGINS "*"

※設定後はOllamaアプリを再起動してください(メニューバーのアイコンからQuit -> 再度起動)。

手順3: Docker Composeの修正

WebUIだけを立ち上げるシンプルな構成に変更します。

services:
  ollama-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: ollama-webui
    restart: unless-stopped
    ports:
      - "8080:8080"
    extra_hosts:
      - "host.docker.internal:host-gateway" # ここが重要!
    volumes:
      - ./ollama-webui:/app/backend/data # 履歴データの永続化
    environment:
      # Docker内部のOllamaではなく、ホストマシンのポート11434を見に行く
      - OLLAMA_BASE_URL=http://host.docker.internal:11434

これで docker-compose -f docker-compose-hybrid.yaml up -d すれば完了です。

まとめ:適材適所で使い分ける

  • Docker完結版: Windows/Linuxユーザーや、GPUリソースを気にせずとりあえず試したいチーム向け。配布が楽。
  • ハイブリッド版: Macユーザーの個人の開発環境向け。GPUパワーを解放し、ストレスフリーな対話が可能。

技術的には「すべてDocker」が美しいのですが、ハードウェアの特性を活かすならこの一工夫が必要になります。 「導入してみたけど重くて使わなくなった」とならないよう、Macユーザーの皆さんはぜひNative版との連携を試してみてください。

このブログ記事はAIを利用して自動生成されました。

コメント

このブログの人気の投稿

Blogger Sitemap登録エラー解決

【iOS】SwiftでCGAffineTransformから角度・ラジアン・度数・スケールを計算する方法

Ollama & Open WebUI: ローカルLLM構築