一般的なMacで260億パラメータのモデルを2GBのメモリで実行する方法
M2搭載の基本的なMacBook Airで8 GBのユニファイドメモリを使用している場合、最新の言語モデルを実行するのは厳しい状況です。4ビット量子化後の14〜200億パラメータモデルでさえ、10〜16 GBのRAMが必要です。システムは積極的にデータをディスクにスワップし始め、生成速度は1秒あたりトークンの小数にまで低下し、macOSのインターフェースが応答しなくなります。
エンジニアのAndrey Mikhailovは、型破りなエンジニアリングの技巧でこの問題を解決しました。彼はゼロからTurboFieldfareというランタイムを書き、Googleの指示モデルGemma 4 26B-A4Bをわずか2 GBのRAMで実行します。
アーキテクチャの主な技巧は何ですか
Gemma 4 26B-A4BはMixture of Experts(MoE)アーキテクチャに基づいて構築されています。合計260億パラメータありますが、特定のトークンを処理するためにすべてのレイヤーがアクティブ化されるわけではありません—約38.8億パラメータのみがアクティブ化されます。
通常、llama.cppやMLXのようなランタイムは、作業を開始する前にモデルの全重みをメモリにロードします。4ビットGemmaの場合、約14.3 GBになります。TurboFieldfareは異なるアプローチを取ります:
- モデルの共有コア(1.35 GB)とコンテキスト用のFP16 KVキャッシュは永続RAMに保持されます。
- 各レイヤーのモデルのルーターは、現在のトークンに必要な8人のエキスパートを決定します。
- プログラムはメモリ内のローカルエキスパートキャッシュ(LFUアルゴリズムを使用した16スロット)をチェックします。
- 必要なエキスパートがRAMにない場合、ランタイムは並列システムコールを通じてSSDから直接高速にロードし、Metalがアクセス可能なバッファに配置します。
GPUが共有エキスパートのブランチを計算している間、並列CPUスレッドがストレージから欠落している重みを読み取ることに成功します。その結果、ピーク時のメモリ消費は約2 GB以内に収まります。

llama.cppやMLXへの依存なし
このプロジェクトは純粋にSwift 6.2とMetal 4で書かれています。著者は既存のC++ライブラリのラッパーを作成するのではなく、量子化、行列演算(GEMV)、アテンション、MoE、RMSNorm正規化、RoPE用のカスタムGPUカーネルを написалました。
リポジトリには4つのすぐに使えるユーティリティが含まれています:
TurboFieldfareMac— SwiftUIとAppKitで構築されたネイティブデスクトップアプリケーションで、統合チャット、メモリ監視、生成設定を備えています。TurboFieldfareCLI— JSONメッセージファイル 통한バッチ生成とスクリプト駆動実行のためのコマンドラインインターフェース。TurboFieldfareServer— OpenAI Chat Completions仕様と互換性のあるAPIを持つローカルサーバー(http://127.0.0.1:8080/v1)。TurboFieldfareRepack— Hugging Faceからカスタム.gturbo形式に直接重みをストリーミングダウンロードするユーティリティ。
インストーラーは必要なバイト範囲のみをダウンロードし、オンザフライでパックします。最初に15 GBのソース重みをダウンロードし、その横に別の15 GBの変換済みファイルを保持する必要はありません。
実際の性能
ディスクからのストリーミング読み取りは不可避免的にI/Oレイテンシーを生み出します。ミラクルはありません:生成速度はSSDのスループットと高速なキャッシュに直接依存します。
著者は異なるApple Silicon世代で一連のベンチマークを実施しました:
- 8 GB RAMの基本的なMacBook Air M2では、5.1〜6.3トークン/秒の速度を達成します。これはリアルタイムでテキストを読むのに快適なペースです。
- 24 GBのメモリ搭載のMacBook Pro M5 Proでは、31〜35トークン/秒の生成速度を達成します。
プリフィルフェーズ(入力プロンプトの処理)には、著者は128トークンでのチャンキングを実装しました。これにより、1つのロードされたエキスパートを一度に行のグループに対して呼び出すことができ、最初のトークンまでの時間が大幅に短縮されます。
ビルドと実行方法
ビルドには、Swift 6.2サポート付きのmacOSの現在のバージョンとXcodeを実行しているApple Silicon Macが必要です。
リポジトリをクローンし、リリースモードでプロジェクトをビルドします:
git clone https://github.com/drumih/turbo-fieldfare.git
cd turbo-fieldfare
swift build -c release
ビルド後、ネイティブアプリケーションを起動します:
.build/release/TurboFieldfareMac
初回起動時にDownloadボタンをクリックします。アプリがモデル(約15 GBの空きディスク容量が必要)をダウンロードし、scratch/gemma4.gturboディレクトリを準備します。ダウンロードが完了したら、Load Modelをクリックし、入力フィールドにクエリを入力します。
コンソールを好む場合は、別のコマンドでモデルをダウンロードできます:
swift run -c release TurboFieldfareRepack \
--output scratch/gemma4.gturbo \
--overwrite
次に、CLIにダイアログファイルを渡します:
swift run -c release TurboFieldfareCLI \
--model scratch/gemma4.gturbo \
--messages-file messages.json
OpenCodeやカスタムPythonスクリプトなどのローカルクライアントを接続するには、サーバーを起動するだけです:
.build/release/TurboFieldfareServer --model scratch/gemma4.gturbo
サーバーはポート8080でリッスンし、ストリーミングとツール呼び出しサポートを備えたおなじみの/v1/chat/completionsエンドポイントを提供します。
プロジェクトが実際に役立つ場面
これは任意の重みに対する万能エンジンではありません。TurboFieldfareは1つの特定のモデル—Gemma 4 26B-A4B—に厳密に調整されています。しかし、そのニッチな分野内で、プロジェクトはいくつかの具体的なシナリオをカバーしています:
- 低端ノートPCでのローカル開発者アシスタント。8 GBのRAMがある場合、システム全体をフリーズさせることなく他の方法で26Bモデルを実行することは事実上不可能です。
- 機密データをクラウドに送信せずに、ツール呼び出しとテキスト解析のためのループバックインターフェース経由のバックグラウンドサーバー。
- 低レベルのMetal最適化のための学習リソース。リポジトリには、読み取り速度、キャッシュ、GPUカーネル性能のベンチマークを含む103の詳細な実験のログが含まれています。
基本的なMacBookで大きなMoEモデルをローカルで実行したい場合、またはML用のカスタムMetalシェーダーの記述に興味がある場合、リポジトリは確かにクローンして学ぶ価値があります。
関連プロジェクト