🐥
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 だけで使うことができます。
-
Docker Desktop を cask でインストール
brew install --cask docker -
Docker デーモンをバックグラウンドで起動
# 1 回だけ起動(Dock にアイコンが残ることに注意) open -a Docker # Dockerデスクトップアップリを停止するには # osascript -e 'quit app "Docker Desktop"' -
デーモンが起動したら確認
docker version
備考
Docker Desktop は常に GUI(Dock アイコン)が表示されますが、dockerコマンドは完全に CLI で操作できます。
GUI を完全に回避したい場合はcolimaなどの軽量 VM を利用する方法もあります(以下では Docker Desktop を前提にしています)。
3. Ollama をネイティブにインストール & Metal バックエンドで起動
-
Ollama を brew でインストール
brew install ollama -
最大メモリ量を環境変数に追記
- 16GB RAM で動かす場合は、メモリが足りないと swap が大量に使われため、制限をかけます。
~/.zshrcファイルの以下を追記します。# 追記する行 export OLLAMA_MAX_VRAM="12GiB"
-
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}' -
gpt‑oss‑20b モデルを取得
ollama pull gpt-oss:20b -
起動確認
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_MODELはollama 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 |
まとめ
-
Homebrew → 2. Docker Desktop(CLI で操作)→ 3. Ollama(Metal バックエンド)→ 4. AnythingLLM(Docker Compose)
この流れで、GUI を最小限に抑えつつ、Apple Silicon の GPU を活かした LLM 環境を構築できます。祝・ご利用ください!
Discussion