TL;DR(この記事の結論)
- Ollama: 最も簡単。5分でLLMが動く。初心者はここから
- MLX: Apple純正。M5チップで最高性能。Python/Swift開発者向け
- Open WebUI: ChatGPTライクなUIを自前で構築できる
- 推奨構成: M4 Max 64GB + Ollama + Llama 3.3 70B で最高の体験
- 環境変数チューニングでメモリ効率が劇的に改善する
1. はじめに: この記事で構築するもの
前回の記事でMPS(Metal Performance Shaders)の理論を学んだあなた。「で、実際どうやって動かすの?」という疑問が湧いているはずだ。
この記事では、Macで大規模言語モデル(LLM)をローカル実行するための具体的な手順を解説する。理論は前編で十分。今回は手を動かしていこう。
ゴール: 記事を読み終えた時点で、あなたのMacでChatGPTライクなAIチャットが完全オフラインで動いている状態を目指す。
2. Ollama: 最速でLLMを動かす(所要時間: 5分)
2.1 Ollamaとは
Ollamaは、ローカルLLM実行の事実上の標準ツールだ。llama.cppをバックエンドに持ち、Apple Silicon(Metal)に完全最適化されている。難しい設定は一切不要。コマンド一発でLLMが動く。
2.2 インストール手順
方法1: 公式インストーラー(推奨)
https://ollama.com/download/mac
方法2: Homebrew
brew install ollama
2.3 最初のモデルを動かす
# Llama 3.2 3Bをダウンロード&実行(約2GB)
ollama run llama3.2
# より高性能なモデル(8GB以上推奨)
ollama run llama3.1:8b
# 70Bクラス(64GB以上推奨)
ollama run llama3.3:70b
これだけ。本当にこれだけでLLMが動く。初回はモデルのダウンロードに数分かかるが、2回目以降は即座に起動する。
2.4 よく使うコマンド
ollama list # ダウンロード済みモデル一覧
ollama ps # 実行中のモデル確認
ollama pull qwen2.5 # モデルのダウンロードのみ
ollama rm llama2 # モデル削除
ollama show llama3.1 # モデル情報表示
3. MLX: Apple純正フレームワークで最高性能を引き出す
3.1 MLXとは
MLXはApple Machine Learning Researchが開発したオープンソースフレームワークだ。統一メモリアーキテクチャを最大限活用し、M5チップではNeural Acceleratorにも対応。「Apple Silicon専用設計」だからこそ出せる性能がある。
OllamaがユーザーフレンドリーさでNo.1なら、MLXは「性能」と「柔軟性」でNo.1だ。Python/Swiftから直接制御でき、ファインチューニングも可能。
3.2 インストール手順
# 仮想環境作成(推奨)
python -m venv mlx-env
source mlx-env/bin/activate
# MLX-LMインストール
pip install -U mlx-lm
3.3 基本的な使い方
# 対話モード(チャット)
mlx_lm.chat --model mlx-community/Llama-3.2-3B-Instruct-4bit
# ワンショット生成
mlx_lm.generate --model mlx-community/Mistral-7B-Instruct-v0.3-4bit \
--prompt "Pythonでクイックソートを実装して"
3.4 Pythonから使う
from mlx_lm import load, generate
model, tokenizer = load("mlx-community/Llama-3.2-3B-Instruct-4bit")
response = generate(model, tokenizer, prompt="Hello!", verbose=True)
ポイント: mlx-communityのモデルはMLX用に最適化済み。Hugging Faceから直接ダウンロードされる。
4. Open WebUI: ChatGPTライクなインターフェースを構築
4.1 Open WebUIとは
CLIでの対話も悪くないが、やっぱりChatGPTのようなWebインターフェースが欲しい。Open WebUIはまさにそれを実現するオープンソースプロジェクトだ。
- ChatGPTライクなUI
- 会話履歴の保存
- RAG(検索拡張生成)対応
- マルチモデル対応
- 完全オフライン動作
4.2 インストール方法
前提: Ollamaがインストール済みであること
重要: MacではDocker経由でGPUアクセラレーションが使えない。そのため、Ollamaはネイティブインストール、Open WebUIのみDockerで動かすのがベストプラクティス。
方法1: pipでインストール(推奨)
pip install open-webui
open-webui serve
http://localhost:8080 でアクセス可能。
方法2: Docker(Ollama別途起動)
docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
4.3 初期設定
- ブラウザで http://localhost:3000 (または8080)にアクセス
- 管理者アカウントを作成(最初のユーザーが自動的に管理者になる)
- 左上のモデル選択から使いたいモデルを選択
- チャット開始
5. 環境最適化: パフォーマンスを最大化する
5.1 Ollama環境変数
Apple Siliconの統一メモリを最大限活用するため、以下の環境変数を設定しよう。
# ~/.zshrc に追加
export OLLAMA_NUM_PARALLEL=4 # 並列リクエスト数
export OLLAMA_MAX_LOADED_MODELS=2 # 同時ロードモデル数
export OLLAMA_FLASH_ATTENTION=1 # Flash Attention有効化
export OLLAMA_KV_CACHE_TYPE=q8_0 # KVキャッシュ量子化
Flash Attention: コンテキスト長が増えてもメモリ使用量の増加を抑える技術。有効化必須。
KVキャッシュ量子化: q8_0で約半分のメモリ使用量に。品質低下は最小限。
5.2 macOS固有の設定
# 環境変数をlaunchctlで永続化
launchctl setenv OLLAMA_FLASH_ATTENTION "1"
launchctl setenv OLLAMA_KV_CACHE_TYPE "q8_0"
# 設定確認
launchctl getenv OLLAMA_FLASH_ATTENTION
5.3 パフォーマンスモニタリング
# GPUメモリ使用状況確認
ollama ps
# システム全体のメモリ使用状況
vm_stat
# 温度監視(サーマルスロットリング防止)
sudo powermetrics --samplers smc -n 1 | grep -i temp
6. 用途別おすすめモデル2025
| 用途 | モデル | 必要メモリ | コマンド |
|---|---|---|---|
| 軽量チャット | Llama 3.2 3B | 8GB+ | ollama run llama3.2 |
| 汎用高品質 | Llama 3.1 8B | 16GB+ | ollama run llama3.1:8b |
| コーディング | Qwen2.5-Coder 7B | 16GB+ | ollama run qwen2.5-coder |
| 多言語対応 | Qwen2.5 7B | 16GB+ | ollama run qwen2.5 |
| 推論特化 | DeepSeek-R1 8B | 16GB+ | ollama run deepseek-r1:8b |
| 最高性能 | Llama 3.3 70B | 64GB+ | ollama run llama3.3:70b |
| 画像認識 | LLaVA 1.6 | 16GB+ | ollama run llava |
量子化フォーマットの選び方:
- Q4_K_M: 最も一般的。品質と速度のバランス良し
- Q8_0: 高品質だがメモリ消費大
- Q4_0: 最速・最軽量だが品質やや落ちる
7. トラブルシューティング
7.1 よくある問題と解決策
問題: モデルが遅い/メモリ不足
# より軽量な量子化モデルを使用
ollama pull llama3.1:8b-q4_0 # Q4_K_Mの代わりにQ4_0
# コンテキスト長を短くする
export OLLAMA_CONTEXT_LENGTH=2048
問題: Ollamaが起動しない
# サービス停止 → キャッシュクリア → 再起動
brew services stop ollama
rm -rf ~/.ollama/cache
brew services start ollama
問題: Open WebUIがOllamaに接続できない
# Ollamaを外部アクセス可能にする
launchctl setenv OLLAMA_HOST "0.0.0.0:11434"
# Ollamaアプリを再起動後、接続確認
curl http://localhost:11434
問題: GPU(Metal)が使われていない
# ollama psでPROCESSOR列を確認
ollama ps
# 出力例: 100% GPU なら正常、CPU表示なら問題あり
7.2 ログの確認方法
# Ollamaログ確認
tail -f ~/.ollama/logs/server.log
8. Ollama vs MLX: どちらを選ぶべきか
| 観点 | Ollama | MLX |
|---|---|---|
| セットアップ | 超簡単(1コマンド) | やや手間(Python環境必要) |
| 性能 | 高い(llama.cpp) | 最高(M5 Neural Accelerator対応) |
| カスタマイズ性 | 制限あり | 自由自在(Python/Swift) |
| ファインチューニング | 非対応 | LoRA対応 |
| モデル形式 | GGUF | safetensors/MLX形式 |
| おすすめユーザー | 初心者〜中級者 | 開発者・研究者 |
結論: まずOllamaで始めて、物足りなくなったらMLXへ。両方併用も全然アリ。
9. まとめ: 次のステップ
ここまでで、MacでローカルLLMを動かす基盤は整った。次に挑戦すべきことを挙げておく。
- RAGシステム構築: 自分のドキュメントを読み込ませて質問応答
- ファインチューニング: MLXでLoRAを使った独自モデル作成
- マルチモーダル: LLaVAで画像認識、Whisperで音声認識
ローカルLLMの世界へようこそ。プライバシーを守りながら、最先端のAIを手元で動かす。これこそMacユーザーの特権だ。
参考文献
- Ollama公式: https://ollama.com/
- MLX GitHub: https://github.com/ml-explore/mlx
- MLX-LM: https://github.com/ml-explore/mlx-lm
- Open WebUI: https://docs.openwebui.com/
- Apple MLX研究: https://machinelearning.apple.com/research/exploring-llms-mlx-m5
- WWDC25 MLX LLMセッション: https://developer.apple.com/videos/play/wwdc2025/298/
- llama.cpp Apple Silicon性能: https://github.com/ggml-org/llama.cpp/discussions/4167
- Ollama FAQ: https://docs.ollama.com/faq