Swiftletという、SwiftとMetalを組み合わせた実行環境が、「大規模モデルをどこに実行できるか」を再定義しています。これはQwen3-NextとQwen3.5/3.6のMoE混合モデルを専門に処理するもので、中心的な考え方は巧妙です:モデルの小さな密なコアのみをメモリに常駐させ、実際に大きな部分であるルーティングエキスパートの重みは普段はSSDに保存されておき、必要なときに要求に応じてストリーミングで取り出されます。

その効果は数字で直接示されています。M5Macでは、Qwen3.6-35B-A3Bの4ビットバージョンはディスク上に18GBを占めますが、ピークメモリは2.6GBに抑えられ、デコード速度は7〜11tok/sです。さらに驚くのは、Qwen3-Next-80B-A3Bの4ビットバージョンはディスクに42GB必要ですが、ピークメモリはわずか4.3GBに抑えられ、速度は4.5〜5tok/sです。35Bバージョンは今やiPhone17で動作可能で、メモリは約2.5GB、速度は約1tok/sです——開発者によると、これは同規模のモデルがスマホでネイティブに動作した初めてのケースで、サーバーに触ることなく全行程を完了しています。

image.png

プロジェクトはエンド・トゥ・エンドで利用可能であり、2つのモデルとも検証済みの正しい出力を生成できます。開発者はまた、コストについても正直に明かしています: 1つのトークンあたり実際にアクティブになるパラメータは約3B個なので、これらのモデルは会話や執筆では大規模モデルのように振る舞いますが、事実上の記憶力は小規模モデルに近いです。

その仕組みを解説すると、ポイントはスケジューリングの細かさにあります。各層では、それぞれのトークンが512個のエキスパートの中の10個(80Bバージョン)または256個のエキスパートの中の8個(35Bバージョン)にルーティングされます。Swiftletは密な重み—注意力、DeltaNet投影、ルーター、共有エキスパート、埋め込みベクトル—をメモリに固定して置き、4ビットの場合で約1.3GB(35B)または2.5GB(80B)になります。数千個のルーティングエキスパートは、固定ステップサイズのデータブロックとして再構築され、.qpackコンテナに詰め込まれます。1つのエキスパートを取り出すにはSSDに対して1回preadを行うだけで、mmapを使わず、ページキャッシュを乱しません。人気のあるエキスパートは、有限サイズのプールにキャッシュされ、LFU加えて最近性に基づいた淘汰アルゴリズムで管理されます。実測ではヒット率は43%から70%まであり、キャッシュサイズは速度にほとんど影響を与えません。AppleのSSDは未ヒット時のオーバーヘッドを十分に処理できるからです。

全体のフォワード伝播はMetal上で行われており、実行時にコンパイルされたシェーダーを使用しているため、ビルド時にMetalツールチェーンを必要としません。同じコードをiOSに直接デプロイできます。さらに面白いのは、75%のレイヤーがGated DeltaNet線形アテンションを使用し、固定サイズの循環状態を持つため、無論上下文がどれだけ長くても、K-Vキャッシュが膨張することはありません——長いテキストでの会話の隠れた負担が静かに軽減されました。

Swiftletは単なるコマンドラインの遊び物ではありません。自身に4つの役割を設定しています。ライブラリとして、SwiftletCoreは任意のmacOSまたはiOSアプリに組み込むことができ、ストリーミングのインクリメンタル出力とチャットキャッシュを備えたチャット機能を提供します。コマンドラインツールとして、swiftlet chatとswiftlet generateはローカルで実行およびベンチマーキングを行い、swiftlet-repackはMLXチェックポイントから直接コンテナを構築でき、Hugging Faceからの中断継続ダウンロードもサポートします。サーバーとして、swiftlet-serverはループバックアドレスでOpenAI互換のchat-completionsインターフェースを提供し、OpenAIに互換のあるチャットインターフェースであればすべてローカルモデルに接続可能です。アプリとして、iOS側のPriv AIはSwiftletCoreをストリーミングモデルエンジンとして組み込んでおり、普通のユーザーはダウンロードボタンをクリックするだけでチャットが可能です。

正確性については、各層のフォワード伝播はmlx-lmの参照実装と逐層比較され、f32およびint4の量子化形式をカバーしています。インクリメンタルデコードはシーケンス全体の結果と比較され、MetalカーネルはCPU参照に完全に正確であることを確認しました。コンテナはソースチェックポイントとバイトレベルで検証され、エキスパートがキャッシュから読み込まれるのかディスクから読み込まれるのかに関わらず、得られる答えは完全に一致しています。

そのインスピレーションの流れも明確に説明されています:TurboFieldfareがまずMacでGemmaのエキスパートストリーミングの可能性を検証しました。Swiftletはそのいくつかの公開された設計経験を借りています。例えば、preadを使ってエキスパートをストリーミングしてバウンディングされたスロットプールに読み込むこと、LFUと最近性に基づいた淘汰戦略、固定ステップサイズによるパッキングにより一度の読み込みで一度のフェッチを行うことです。しかし、それ以外の大部分はゼロから書き直されています。約1万行のSwiftとMetalのコードによって、アーキテクチャが完全に異なるQwenの混合システムを克服しました: Gated DeltaNet線形アテンション、ゲーテッドGQA、共有エキスパートを備えた高疎なMoE。さらに、Metal内でMLXスタイルのint4/int8グループ量子化計算を実装し、バイトアドレス可能なカーネルと64ビットオフセットによって数ギガバイトのスニペットを支えています。