はじめに
MLX(エムエルエックス)は、Appleが開発したApple Silicon(M1/M2/M3/M4)専用の機械学習フレームワークです。この記事では、MLXで実際に何ができるのか、具体例を交えて徹底解説します。🍎 MLXとは?
基本情報
- 開発元: Apple Machine Learning Research Team
- 公式リポジトリ: https://github.com/ml-explore/mlx
- 対象: Apple Silicon搭載Mac専用
- ライセンス: オープンソース(MIT)
- 言語: Python API + CLI
最大の特徴
Apple Silicon向けに完全最適化- CPU・GPU・メモリを統合的に活用
- Unified Memory Architectureの恩恵
- Intel MacやNVIDIA GPUは不要
- M1 Macでも高速動作
🚀 MLXでできること
1. LLMの実行(推論)
コマンド一発でLLMが動くテキスト生成
mlx_lm.generate --prompt "富士山の高さは?"
チャット
mlx_lm.chat
対応モデル
- Llama 3.2 / 3.1 / 2
- Mistral / Mixtral
- Phi-3 / Phi-2
- Qwen 2
- Gemma
- その他数千のモデル
モデル: Llama-3.2-3B-Instruct-4bit
速度: 30-40 tokens/sec
メモリ: 約2GB
2. LoRA/QLoRAファインチューニング
超軽量なファインチューニングコマンド一発でファインチューニング
mlx_lm.lora \
--model mlx-community/Llama-3.2-3B-Instruct-4bit \
--train \
--data mlx-community/wikisql \
--iters 100
実績(M1 Mac)
- 学習時間: 約5分
- メモリ使用: 2.3GB
- Loss改善: 40%
- 更新パラメータ: 0.027%のみ
- アダプターサイズ: 3.3MB
- LoRA(Low-Rank Adaptation)
- QLoRA(量子化 + LoRA)
- DoRA
- Full fine-tuning
3. モデルの量子化
モデルサイズを大幅削減モデルを4bit量子化
mlx_lm.convert \
--hf-path mistralai/Mistral-7B-v0.3 \
-q \
--q-bits 4
量子化のメリット
- メモリ使用量: 1/4〜1/8に削減
- ダウンロード時間: 大幅短縮
- 推論速度: ほぼ変わらず
- 精度低下: 最小限
- 2-bit
- 4-bit(推奨)
- 8-bit
4. モデル変換とアップロード
HuggingFaceモデルをMLX形式に変換変換してHuggingFaceにアップロード
mlx_lm.convert \
--hf-path mistralai/Mistral-7B-v0.3 \
-q \
--upload-repo mlx-community/my-mistral-4bit
できること
- HuggingFace → MLX形式
- 量子化とアップロードを一度に
- GGUF形式へのエクスポート
5. プロンプトキャッシング
長いプロンプトの再利用を高速化プロンプトをキャッシュ
cat long_context.txt | mlx_lm.cache_prompt \
--model mistralai/Mistral-7B-v0.3 \
--prompt - \
--prompt-cache-file cached.safetensors
キャッシュを使って生成
mlx_lm.generate \
--prompt-cache-file cached.safetensors \
--prompt "上記の内容を要約して"
メリット
- 長文の再処理が不要
- 複数の質問を高速実行
- マルチターン対話の高速化
6. バッチ処理
複数のプロンプトを効率的に処理from mlx_lm import load, generate
model, tokenizer = load("model")
prompts = ["質問1", "質問2", "質問3"]
バッチ生成
for prompt in prompts:
text = generate(model, tokenizer, prompt=prompt)
7. ストリーミング生成
リアルタイムで結果を表示from mlx_lm import load, stream_generate model, tokenizer = load("model")
for response in stream_generate(model, tokenizer, prompt="..."): print(response.text, end="", flush=True)
8. LoRAアダプターの統合
複数のアダプターを管理アダプターを元のモデルに統合
mlx_lm.fuse \
--model mistralai/Mistral-7B-v0.3 \
--adapter-path ./adapters \
--save-path ./fused_model
メリット
- アダプターの永続化
- 配布が容易
- 推論速度の向上
9. 分散実行
複数のデバイスで並列実行分散実行(実験的機能)
mlx_lm.generate --model ... --distributed
10. カスタムサンプリング
生成方法のカスタマイズfrom mlx_lm import load, generate from mlx_lm.sample_utils import top_p_sampling model, tokenizer = load("model")
text = generate( model, tokenizer, prompt="...", sampler=top_p_sampling(p=0.9), temp=0.7 )
💡 実際の使用例
例1: SQL生成AI(今回実装)
1. WikiSQLでファインチューニング
mlx_lm.lora \
--model mlx-community/Llama-3.2-3B-Instruct-4bit \
--train \
--data mlx-community/wikisql \
--iters 50
2. SQL生成
mlx_lm.generate \
--model mlx-community/Llama-3.2-3B-Instruct-4bit \
--adapter-path ./adapters \
--prompt "Table: employees | Show top 5 salaries"
出力
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 5;
例2: 日本語特化モデル
日本語データでファインチューニング
mlx_lm.lora \
--model mlx-community/Llama-3.2-3B-Instruct-4bit \
--train \
--data ./japanese_data \
--iters 500
例3: コード生成AI
コードデータセットで学習
mlx_lm.lora \
--model mlx-community/Qwen2.5-Coder-3B-Instruct-4bit \
--train \
--data ./code_dataset \
--iters 200
📊 パフォーマンス比較
M1 Mac(16GB)での実測
| タスク | MLX | その他 | 備考 | |--------|-----|--------|------| | Llama-3B推論 | 30-40 tok/s | 15-25 tok/s | 1.5-2倍高速 | | LoRA学習 | 150-160 tok/s | N/A | GPU不要 | | メモリ効率 | 2-3GB | 8-12GB | 1/4のメモリ | | セットアップ | 1コマンド | 複雑 | 圧倒的に簡単 |
M4 Max(128GB)での実測
| モデル | 速度 | メモリ | 備考 | |--------|------|--------|------| | Mistral-7B (4bit) | 60-80 tok/s | 5GB | 快適 | | LoRA学習 | 250+ tok/s | 24GB | 高速 |
🔧 セットアップ
インストール
基本インストール
pip install mlx-lm
ファインチューニング用
pip install "mlx-lm[train]"
conda経由
conda install -c conda-forge mlx-lm
動作要件
- 必須: Apple Silicon Mac(M1/M2/M3/M4)
- OS: macOS 13.4以降
- Python: 3.8以降
- Intel Mac: 非対応
🆚 他フレームワークとの比較
MLX vs PyTorch
| 項目 | MLX | PyTorch | |------|-----|---------| | 対象 | Apple Silicon専用 | 汎用(全プラットフォーム) | | セットアップ | 超簡単 | やや複雑 | | Apple Silicon最適化 | ◎ | △ | | メモリ効率 | ◎ | ○ | | エコシステム | △ | ◎ |
MLX vs llama.cpp
| 項目 | MLX | llama.cpp | |------|-----|-----------| | 言語 | Python | C++ | | 使いやすさ | ◎ | ○ | | ファインチューニング | ◎ | × | | 速度 | ◎ | ◎ | | 汎用性 | △(Apple専用) | ◎ |
MLX vs Ollama
| 項目 | MLX | Ollama | |------|-----|--------| | 使いやすさ | ○ | ◎ | | ファインチューニング | ◎ | × | | 量子化 | ◎ | ◎ | | カスタマイズ | ◎ | △ |
📚 対応モデル
LLMファミリー
- Llama: 全バージョン対応
- Mistral: Mistral, Mixtral
- Phi: Phi-2, Phi-3
- Qwen: Qwen, Qwen2
- Gemma: Google Gemma
- その他: Yi, Falcon, InternLM2, など
MLX Community
HuggingFaceのmlx-communityに数千のMLX形式モデルがあります:
🎯 ユースケース
1. プライバシー重視のAI
- ローカル完結: データが外部に出ない
- オフライン動作: ネット不要
- 高速: クラウドのレイテンシなし
2. カスタムAI開発
- ファインチューニング: 独自データで学習
- 軽量: LoRAで効率的
- 高速: 5分で完了
3. プロトタイピング
- 高速セットアップ: 1コマンド
- 実験が簡単: CLI完結
- 低コスト: GPU不要
4. 教育・研究
- 低コスト: M1 Macで十分
- 実験しやすい: 軽量・高速
- 学習曲線: 緩やか
🌟 MLXの強み
1. Apple Silicon完全最適化
- Unified Memoryを最大活用
- CPU + GPU + Neural Engineの統合
- Metal APIの直接利用
2. 超シンプルなAPI
- コマンド一発で完結
- Pythonコード不要
- 初心者でも簡単
3. メモリ効率
- 2-3GBで7Bモデル実行
- 4bit量子化で更に削減
- 16GBマシンでも余裕
4. 高速ファインチューニング
- LoRA: 5分で完了
- QLoRA: メモリ1/4
- 実用的な学習速度
5. オープンソース
- MIT ライセンス
- 活発な開発
- コミュニティが成長中
⚠️ 制約事項
1. プラットフォーム限定
- Apple Silicon専用
- Intel Mac不可
- Windows/Linux不可
2. エコシステム
- PyTorchより小さい
- ライブラリは成長中
- 一部機能は実験的
3. 対応モデル
- テキストモデル中心
- 画像・音声は限定的
- マルチモーダルは発展途上
🔮 今後の展望
予定されている機能
1. マルチモーダル対応拡大 - 画像生成の最適化 - 音声処理の強化
2. 分散実行の強化 - 複数Mac間での並列処理 - クラスタリング対応
3. 更なる最適化 - M4 Chipの完全活用 - Neural Engineの活用拡大
🎓 学習リソース
公式ドキュメント
- MLX: https://github.com/ml-explore/mlx
- MLX-LM: https://github.com/ml-explore/mlx-lm
- MLX Examples: https://github.com/ml-explore/mlx-examples
コミュニティ
- HuggingFace MLX Community: https://huggingface.co/mlx-community
- GitHub Discussions
- Discord(非公式)
✨ まとめ
MLXでできること1. ✅ LLMの高速実行(推論) 2. ✅ LoRA/QLoRAファインチューニング 3. ✅ モデルの量子化 4. ✅ モデル変換とアップロード 5. ✅ プロンプトキャッシング 6. ✅ バッチ処理 7. ✅ ストリーミング生成 8. ✅ カスタムサンプリング 9. ✅ 分散実行(実験的) 10. ✅ Python API + CLI
MLXが向いている人- ✅ Apple Silicon Macを持っている
- ✅ ローカルでLLMを動かしたい
- ✅ ファインチューニングに興味がある
- ✅ プライバシーを重視する
- ✅ 低コストで実験したい
- M1 Macで2.3GB、5分でLoRA完了
- Loss 40%改善
- 実用的な速度(30-40 tokens/sec)
- コマンドラインのみで完結
Apple Silicon Macユーザーなら、MLXは必須のツールです。 ローカルLLM、ファインチューニング、プロトタイピングに最適!
--- 環境: M1 Mac / macOS 24.6.0 / MLX-LM 0.28.2 執筆日: 2025-10-12