MLC-LLM 推論フレームワーク(エムエルシーエルエルエム スイロンフレームワーク)
Machine Learning Compilation for LLMの略。Apache TVM/MLCコンパイラスタックを用いてLLMをCUDA/Metal/Vulkan/WebGPU向けに最適化コンパイルし、スマートフォンから高性能GPUまで幅広いデバイスでLLMを実行するフレームワーク。
MLC-LLMとは
MLC-LLM(Machine Learning Compilation for Large Language Models)は、Apache TVM/MLCコンパイラインフラを使ってLLMをターゲットデバイスの最適機械語にコンパイルするフレームワークです。Carnegie Mellon University・上海交通大学・MLC AIチームが開発し、2023年5月に公開されました。
「どのデバイスでも動くLLM」 を実現するのがコンセプトで、NVIDIA GPU(CUDA)、Apple GPU(Metal)、AMD GPU(Vulkan)、iPhone/Android、そしてWebブラウザ(WebGPU)をサポートします。
主な特徴
TVMコンパイラによる自動カーネル最適化
- テンソル演算をターゲットHWのISA(PTX/Metal Shading Language/SPIRV)に直接コンパイル
- Auto-tuningでCUDA cuBLASを超えるカーネル性能を実現するケースあり
- 量子化(Q4_0/Q4_K_M)を演算グラフに組み込みKernel Fusion
WebLLM:ブラウザ内LLM推論
- Chrome/Edge 113+(WebGPU対応)でモデルをブラウザ内実行
- モデルキャッシュはIndexedDB(初回ダウンロード後はオフライン動作)
- WebLLM npm パッケージでReact/Vue/Vite等に統合可能
モバイルデプロイ
- iOS: Metal + CoreML経由。Gemma 2 2B Q4をiPhone 15 Proで18 tok/s
- Android: OpenCL + Vulkan。Phi-3 Mini 4K Q4をSnapdragon 8 Gen 3で15 tok/s
- React Native対応パッケージあり
対応デバイスとパフォーマンス
| デバイス | モデル | バックエンド | 速度(tok/s) | モデルサイズ |
|---|---|---|---|---|
| RTX 4090 | Llama 3.1 8B Q4 | CUDA | 185 | 4.5GB |
| M3 Max | Llama 3.1 8B Q4 | Metal | 105 | 4.5GB |
| iPhone 15 Pro | Gemma 2 2B Q4 | Metal | 18 | 1.4GB |
| Snapdragon 8 Gen3 | Phi-3 Mini Q4 | Vulkan | 15 | 2.3GB |
| Chrome(WebGPU) | Llama 3.1 8B Q4 | WebGPU | 12 | 4.5GB |
| RX 7900 XTX | Llama 3.1 8B Q4 | Vulkan | 95 | 4.5GB |
llama.cppとの比較
| 観点 | MLC-LLM | llama.cpp |
|---|---|---|
| コンパイル方式 | TVM事前コンパイル | JITなし実行 |
| GGUF対応 | 変換パス経由 | ネイティブ |
| WebGPU対応 | ✅(WebLLM) | ❌ |
| モバイル対応 | ✅(iOS/Android) | 限定的 |
| セットアップ難易度 | 高(コンパイル要) | 低 |
| カスタムカーネル | 自動生成 | 手動実装 |
インストールと使用例
Python APIで推論
import mlc_llm
llm = mlc_llm.ChatModule(
model="HF://mlc-ai/Llama-3.1-8B-Instruct-q4f16_1-MLC",
device="cuda",
)
response = llm.generate(
"東京の人口は?",
progress_callback=mlc_llm.GenerationConfig(max_tokens=200)
)
print(response)
WebLLM(ブラウザ統合)
import { CreateMLCEngine } from "@mlc-ai/web-llm";
const engine = await CreateMLCEngine(
"Llama-3.1-8B-Instruct-q4f16_1-MLC",
{ initProgressCallback: (p) => console.log(p.text) }
);
const reply = await engine.chat.completions.create({
messages: [{ role: "user", content: "こんにちは" }],
});
xGrammarによる制約付きデコーディング
MLC-LLMはxGrammar(MLC AIが開発した文法ベースデコーディングエンジン)をネイティブ統合しています。JSON Schema・正規表現・BNF文法を指定することで、LLMの出力を強制的に構造化JSON等にできます。
llm.generate(
"ユーザー情報を抽出: 田中太郎、30歳、東京在住",
generation_config=mlc_llm.GenerationConfig(
response_format={"type": "json_object",
"schema": user_schema}
)
)
# → {"name": "田中太郎", "age": 30, "city": "東京"} を保証出力
FAQ
Q1: llama.cppとどちらを使うべきですか? A: ローカルPC・サーバー推論ならllama.cppの方がセットアップ簡単です。モバイルアプリ組み込みやブラウザ内推論が目的ならMLC-LLMが最適です。
Q2: GGUF形式のモデルをそのまま使えますか?
A: 直接は使えません。mlc_llm convertコマンドでMLC形式に変換する手順が必要です(所要時間:8Bモデルで約5分)。
Q3: 商用利用は可能ですか? A: MLC-LLMはApache 2.0ライセンスで商用利用可能です。ただしモデルのライセンスは別途確認が必要です。
Q4: iOS App Storeに審査提出できますか? A: 可能です。MLC-LLMのiOS SPMパッケージをXcodeに組み込んだアプリが複数App Storeで公開されています。
まとめ
MLC-LLMはTVMコンパイラによるハードウェア最適化とWebGPU/モバイル対応を両立する唯一の本番級LLM推論フレームワークです。ローカル開発にはllama.cppが手軽ですが、モバイルアプリ・ブラウザアプリ・最大限のGPU性能を求める場合はMLC-LLMが強力な選択肢となります。