🐥

Mac Mini  M4 (16 GB) にOllama/AnythingLLM/gpt‑oss‑20bでローカルLLM構築

に公開

1. 事前準備 – Homebrew が無い場合はインストール

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Tip
Mac Mini M4(Apple Silicon)では Homebrew があればほとんどのツールをコマンドラインだけで入れられます。


2. Docker を CLI でインストール & 起動

macOS では Docker Desktop が唯一の公式エンジンですが、GUI を開かずに CLI だけで使うことができます。

  1. Docker Desktop を cask でインストール

    brew install --cask docker
    
  2. Docker デーモンをバックグラウンドで起動

    # 1 回だけ起動(Dock にアイコンが残ることに注意)
    open -a Docker
    # Dockerデスクトップアップリを停止するには
    # osascript -e 'quit app "Docker Desktop"'
    
  3. デーモンが起動したら確認

    docker version
    

備考
Docker Desktop は常に GUI(Dock アイコン)が表示されますが、docker コマンドは完全に CLI で操作できます。
GUI を完全に回避したい場合は colima などの軽量 VM を利用する方法もあります(以下では Docker Desktop を前提にしています)。


3. Ollama をネイティブにインストール & Metal バックエンドで起動

  1. Ollama を brew でインストール

    brew install ollama
    
  2. 最大メモリ量を環境変数に追記

  • 16GB RAM で動かす場合は、メモリが足りないと swap が大量に使われため、制限をかけます。
    ~/.zshrcファイルの以下を追記します。
    # 追記する行
    export OLLAMA_MAX_VRAM="12GiB"
    
  1. Ollama サーバを起動

    # サーバ起動
    # Ollama はデフォルトで 11434 番ポートで待ち受けます。
    brew services start ollama
    # サーバ停止
    # brew services stop ollama
    # ollamaが利用している物理メモリ量を調べるには
    # ps -eo rss,command | grep ollama | grep -v grep | awk '{printf "%8.2f MB  %s\n", $1/1024, $2}'
    
  2. gpt‑oss‑20b モデルを取得

    ollama pull gpt-oss:20b
    
  3. 起動確認

    curl http://localhost:11434/api/tags
    
    • 取得したモデル一覧が JSON で返ってくれば OK。

4. AnythingLLM を Docker で起動

4‑1. プロジェクトディレクトリ作成

mkdir -p ~/llm_project && cd ~/llm_project

4‑2. docker-compose.yml を作成

# ~/llm_project/docker-compose.yml
services:
  anythingllm:
    image: mintplexlabs/anythingllm:latest
    container_name: anythingllm
    restart: unless-stopped
    
    # 永続化設定
    environment:
      # 必須:内部ストレージのパスを設定。これが以前のエラーの原因でした。
      - STORAGE_DIR=/app/server/storage
      - LLM_BACKEND=ollama
      - OLLAMA_BASE_URL=http://host.docker.internal:11434
      # OLLAMA_MODEL名は、任意の名前に修正が必要な可能性があります
      - OLLAMA_MODEL=gpt-oss:20b
      - MAX_CONTEXT=4096          # 必要に応じて変更
      - ALLOW_ORIGINS=* # CORS 設定(任意)
      
    # Docker Volume をマウントし、データをホストに永続化
    volumes:
      - anythingllm-storage:/app/server/storage
      
    # AnythingLLM の公式デフォルトポート(3001)を使用
    ports:
      - "3001:3001"               # AnythingLLM が 3001 番で待ち受け
      
# Volume 定義の追加
volumes:
  anythingllm-storage:
    driver: local

ポイント

  • OLLAMA_BASE_URL は Docker コンテナから Mac のホスト上にある Ollama に接続するために host.docker.internal を使用。
  • OLLAMA_MODELollama pull で取得したモデル名と一致させる。
  • MAX_CONTEXT はモデルのコンテキスト窓。小さくするとメモリ使用量が減ります。

4‑3. Docker Compose で AnythingLLM を起動

docker compose up -d

確認

docker ps | grep anythingllm

でコンテナが 8000 番で稼働していることを確認。

4‑4. 動作確認(サンプルリクエスト)

curl -X POST http://localhost:8000/v1/chat/completions \
     -H "Content-Type: application/json" \
     -d '{
           "model":"gpt-oss-20b",
           "messages":[{"role":"user","content":"こんにちは、LLM は何ができますか?"}],
           "max_tokens":100
         }'

正常に JSON が返ってくればセットアップ完了です。


5. 追加ヒント

目的 コマンド / 設定 備考
メモリ不足対策 OLLAMA_MAX_CONTEXT=2048 などで窓を小さくする 20 B は 12 GB 以上推奨
GPU を使いたい場合 Ollama が Metal バックエンドを自動で使用 Docker 内からは REST API で呼び出すだけ
ログ確認 docker logs anythingllm エラーが出ていないか確認
永続化 docker compose down -v でデータ消去 データはコンテナ外に保存しないので OK

まとめ

  1. Homebrew → 2. Docker Desktop(CLI で操作)→ 3. Ollama(Metal バックエンド)→ 4. AnythingLLM(Docker Compose)
    この流れで、GUI を最小限に抑えつつ、Apple Silicon の GPU を活かした LLM 環境を構築できます。祝・ご利用ください!

Discussion