概要
- Swiftlet はAppleデバイス(Mac/iPhone)で Qwen3.6-35B/80B モデルを動作可能にするSwift+Metalランタイム
- Mixture-of-Experts(MoE) のストリーミング実装で、RAM消費を大幅削減しつつ大規模モデルを実現
- Priv AIアプリ やCLI、OpenAI互換サーバー、ライブラリとして利用可能
- Metalによる高速推論 と、ストレージからのオンデマンド読み込みによる効率化
- オープンソース (Apache 2.0)、iPhone 17でも動作確認済み
SwiftletによるQwen3.6-35B/80BのAppleデバイス上での動作
- Swiftlet は、 Qwen3-Next および Qwen3.5/3.6 MoEハイブリッドモデル のためのSwift+Metalランタイム
- モデルの小さな 密結合コアのみをRAM常駐、 専門家(Experts)重みはストレージからストリーミング読み込み
- これにより、 35Bモデルは18GBディスク/2.6GB RAM/7-11 tok/s (M5 Mac)、 80Bモデルは42GBディスク/4.3GB RAM/4.5-5 tok/s で動作
- iPhone 17 でも 約2.5GB RAM/1 tok/s で35Bモデルが動作
- ANEMLL による397B MoEのiPhone 17 Pro上動作も参考事例
インストール・利用手順(Mac)
- リポジトリをクローン
git clone https://github.com/leonickson1/Swiftlet.git && cd Swiftletswift build -c release
- モデルコンテナのダウンロード
- 35B:
.build/release/swiftlet-repack --from-hf Leonickson/Qwen3.6-35B-A3B-qpack --output ~/models/qwen3.6-35b.qpack - 80B:
.build/release/swiftlet-repack --from-hf Leonickson/Qwen3-Next-80B-A3B-qpack --output ~/models/qwen3-next-80b.qpack
- 35B:
- チャット起動例
.build/release/swiftlet chat ~/models/qwen3.6-35b.qpack "Who wrote One Hundred Years of Solitude?"
- ワンショット生成
.build/release/swiftlet generate ~/models/qwen3.6-35b.qpack --gpu --chat --prompt "Explain expert streaming in one paragraph."
- OpenAI互換サーバー起動
.build/release/swiftlet-server --model ~/models/qwen3.6-35b.qpack --port 8080
- 要件 :Apple Silicon、macOS 14+またはiOS 17+、十分なSSD空き容量(35B:18GB/80B:42GB)
iPhoneでの利用方法
- Priv AIアプリ (App Store)内で35Bモデルをダウンロードして利用
- 設定→Experimental Models→モデルダウンロード
- ストレージからストリームし、完全オンデバイス動作
- 最新版アプリで利用可能(App Store審査中の場合あり)
- 自分でビルドも可能
leonickson1/localLLMリポジトリをクローンし、swiftletを隣に配置- Xcodeでプロジェクトを開き、iPhone上で実行
仕組みと特徴
- 各トークンごとに約3Bパラメータのみ活性化
- 80B: 各層で512人中10人のエキスパートにルーティング
- 35B: 256人中8人のエキスパートにルーティング
- 常駐部分 :attention、DeltaNet投影、ルーター、共有エキスパート、埋め込みなど
- 35B: 約1.3GB(4bit量子化時)、80B: 約2.5GB
- 専門家重みは.qpackコンテナで固定ストライド配置
- 1エキスパート読み出し=SSDからのpread一回
- mmapやページキャッシュのスラッシング無し
- キャッシュ :LFU+再利用性でホットエキスパートを管理
- キャッシュヒット率43~70%でも速度ほぼ変わらず(SSDがミスを吸収)
- Metalで推論全体を実行
- ランタイムコンパイル型シェーダー採用
- iOSとmacOSで同じコードが動作
- Gated DeltaNet線形attention によりKVキャッシュ増加無し
- 長文でもメモリ消費が安定
利用方法のバリエーション
- Swiftパッケージ :macOS/iOSアプリにSwiftletCoreを追加し、チャット・ストリーミング等が利用可能
- CLIツール :
swiftlet chatやswiftlet generateでローカル対話・ベンチマーク - OpenAI互換サーバー :ローカルモデルをOpenAI API形式で利用可能
- iOSアプリ :Priv AIがSwiftletCoreをエンジンとして利用
正確性・検証
- 各層ごとにmlx-lmリファレンス実装と検証
- f32/int4量子化両方で検証
- MetalカーネルはCPUリファレンスと一致確認
- コンテナは元チェックポイントとバイト単位で一致
- ストリーミング配置はモデル意味論に影響なし
swift testでテスト可能
TurboFieldfareとの関係
- TurboFieldfare はGemmaモデル向け、SwiftletはQwenハイブリッド向け
- 専門家ストリーミング・キャッシュ戦略 等はTurboFieldfareの設計から着想
- アーキテクチャやMetalカーネル、.qpack設計、チャット層等はSwiftlet独自実装
ライセンス・注意点
- Swiftlet本体はApache 2.0ライセンス
- モデル重みは別途ダウンロード・個別ライセンス(Qwen: Apache 2.0)
- 詳細は
THIRD_PARTY_NOTICES.md参照