SharpAIがSwiftLMを発表。Apple SiliconネイティブのSwift推論サーバで、MLXモデルをOpenAI互換API経由で動作させる。最大の特徴は、TurboQuant技術を統合したKVキャッシュ圧縮(3.5倍)と、SSD Expert Streaming機能。これにより大規模言語モデルをMacBook Proで実運用可能に。Python ランタイム、GIL、不要なメモリコピー一切不要。
大型言語モデルのローカル実行は、メモリ制約が大きな課題。特に「Mixture of Experts (MoE)」アーキテクチャの大規模モデルは、Unified MemoryへのスワップでmacOS Watchdog OS カーネルパニックを引き起す。従来はPython + llama.cppが標準だったが、GILによるオーバーヘッド、メモリコピーロスが無視できず。SwiftLMは「ベアメタルApple Silicon性能」を重視し、Swift + Metal Native実装で根本的に再設計された。
SwiftLMはハイブリッドV2+V3 TurboQuantを実装。従来のTurboQuantは2つの路線で分裂していた:
| 方式 | 特徴 | 課題 |
|---|---|---|
| V2(ハードウェア高速化版) | 線形affine量子化、高速 | 3-bitで品質低下 |
| V3(論文準拠版) | 非線形Lloyd-Max符号帳、高品質 | ソフトウェア逆量子化が遅い |
SwiftLMの突破口:
bggml-metal)【K-Cache圧縮フロー】
1. L2ノルム抽出&正規化:x̂ = x / ‖x‖
2. Fast Walsh-Hadamard Transform (WHT) 回転で外れ値を分散
3. 3-bit非線形Lloyd-Max符号帳で各座標を量子化
4. 残差誤差を計算
5. Johnson-Lindenstrauss (QJL) 行列で投影、1-bit符号を格納
QJL採用理由:内積注目度スコアリング時の符号帳解像度低下を抑制するレギュライザーとして機能
V-キャッシュは注意機構のスコアリングに使用されないため、QJL補正は不要。QJLを無効化して追加25%メモリ削減を実現。
大規模モデルのMoE層をNVMe SSDから直接GPU command bufferにストリーミング。macOS Unified Memoryスワップを完全バイパス(ゼロコピー)。Watchdog OS パニック回避。
⚠️ 対応済み:MoEモデルの推論実行、OpenAI互換API経由のアクセス
/v1/chat/completions--gpu-layers)、Wisdom Auto-Calibration 搭載# 1. Releases から最新版 tarball をダウンロード
tar -xzf SwiftLM-<version>-macos-arm64.tar.gz
# 2. 解凍ディレクトリから実行(default.metallib同梱、同じディレクトリに配置必須)
./SwiftLM --model mlx-community/Qwen2.5-3B-Instruct-4bit --port 5413
# リポジトリをクローン(mlx-swift サブモジュール必須)
git clone --recursive https://github.com/SharpAI/SwiftLM
cd SwiftLM
# ビルド
swift build -c release
# default.metallib を.build/release/ に配置
cp LocalPackages/mlx-swift/Source/Cmlx/mlx/mlx/backend/metal/kernels/default.metallib \
.build/release/
# 実行(SSD Expert Streaming 有効)
.build/release/SwiftLM \
--model <HuggingFace-model-id> \
--stream-experts \
--port 5413
curl http://localhost:5413/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen-model",
"stream": true,
"messages": [
{"role": "system", "content": "You are a helpful assistant. Output strictly in JSON format."},
{"role": "user", "content": "Provide a JSON response with a key and a reason."}
]
}'
| オプション | デフォルト | 説明 |
|---|---|---|
--model |
必須 | HuggingFace モデルID または ローカルパス |
--port |
5413 | リッスンポート |
--host |
127.0.0.1 | バインドホストアドレス |
--max-tokens |
2048 | 生成トークン上限 |
--gpu-layers |
モデルデフォルト | GPU割当層数制限 |
--stream-experts |
false | MoE Expert マトリクスのSSDストリーミング有効化(実験段階) |
Failed to load the default metallib が発生した場合、バイナリと default.metallib が同じディレクトリに있는지確認。バイナリのみ移動した場合エラーが発生。
Pythonの mlx-metal パッケージは使用禁止。pip mlx-metal は本バイナリのコンパイル対象と異なるMLXバージョン。バージョン不一致時GPU kernel ABIが破壊され、クラッシュが発生。必ず LocalPackages/mlx-swift/Source/Cmlx/mlx/mlx/backend/metal/kernels/default.metallib を使用。
SSD Expert Streaming は現在実験段階。今後の改善次第で、大規模モデルへの対応可能性。エッジAI活用シーンの拡大が期待される。
この記事はAI業界の最新動向を速報でお届けする「AI Heartland ニュース」です。