1 ポイント 投稿者 GN⁺ 3 시간 전 | 1件のコメント | WhatsAppで共有
  • TurboFieldfareは、14.3GBのモデル全体をメモリに載せることなく、Gemma 4 26B-A4Bを約2GBのメモリで実行し、8GBのApple Silicon Macでもローカル推論を可能にする
  • 1.35GBの共有コアとFP16 KVキャッシュだけを常駐させ、トークンごとに必要なMoEエキスパート重みをSSDからストリーミングする。16スロットのLFUキャッシュと並列preadでI/Oを抑える
  • Gemma 4 26B-A4Bはトークンあたり約3.88Bパラメータを活性化し、測定されたデコード速度は8GB M2 MacBook Airで5.1〜6.3 tok/s、24GB M5 Proで31〜35 tok/s
  • Swift 6.2とMetal 4で実装された専用ランタイムで、ネイティブMacアプリ、CLI、インストールツール、実験的なOpenAI互換サーバーを同じ.gturboモデルディレクトリ上で提供する
  • 現在の対象範囲は、macOS 26以降かつ最低8GB RAMを備えたApple Silicon Macでのテキスト専用推論に限定され、画像・音声・動画およびリモートサーバー認証・TLSはサポートしない

メモリ使用量を削減する実行構造

  • TurboFieldfareはinstruction-tunedのGemma 4 26B-A4Bをメモリ全体にロードしない
    • 1.35GBの共有コアとFP16 KVキャッシュはメモリに保持する
    • 各トークンに必要なrouted expertだけを、SSDからMetalが参照できるバッファへ読み込む
    • インストールされたテキスト専用モデルは約14.3GBだが、重みと4K KVキャッシュが使用するメモリは約2GB
  • モデルは合計26Bパラメータのうち、トークンあたり約3.88Bパラメータを活性化する
  • 重みはgroup 64ベースのMLX affine 4ビットを使用し、routerは8ビット、共有およびrouted expertは4ビット
  • MLXやllama.cppをラップした構成ではなく、Gemma 4 26B-A4Bに合わせて作られたSwift・Metal専用ランタイム

トークン生成プロセス

  • 各Transformerレイヤーで、Metalが常駐重みによりattentionとrouterを計算する
  • CPUはrouterが選択した上位8個のexpert IDを、レイヤーごとの16スロットLFUキャッシュと照合する
    • キャッシュミスは、制限された数の並列pread呼び出しで埋める
    • SSD読み込み中に、Metalは常駐するshared-expert分岐を計算する
    • 読み込みが終わると、shared outputとrouted outputを結合する
  • プロンプトprefillは最大128トークンのチャンクを使い、一度取得したexpertが複数行を処理できるようにする
  • 生成段階では、routed layerループをトークン単位で繰り返す
  • KVキャッシュは、25個のsliding-window layerには制限付きの循環ストレージを、5個のfull-attention layerには線形ストレージを使用する
  • デコード時のattentionは、正規化されたKとVの経路を分離したexact split-K/V方式

インストールとモデル形式

  • 初回起動時にDownloadを選ぶと、固定されたHugging Face revisionから約15GBをrange requestでダウンロードする
  • インストーラーは元のチェックポイント全体を一時ファイルやメモリ上に作成しない
    • 必要なバイト範囲を取得し、直接.gturboレイアウトへ再パックする
    • shard全体やtensorを別途用意しないため、一時メモリ使用量が抑えられる
    • 完成したインストール済みモデルは、manifestとファイルハッシュ検証を通過して初めて使用できる
  • インストール完了後、モデルは約14.3GBのストレージ容量を占有し、インストール処理自体はモデルをメモリにロードしない
  • ランタイムは最終的なmanifest.jsonがある完成済みの.gturboディレクトリのみを受け付ける
  • 中断されたダウンロードの再開、部分ダウンロード状態の削除、モデルをロードしないインストール検証をサポートする

実行環境と性能

  • 必要環境はApple Silicon Mac、macOS 26、Metal 4、Xcode 26、Swift 6.2以上
  • パッケージはarm64専用で、旧macOSおよび旧Metalバージョンはサポートしない
  • 検証対象は8GB M2 MacBook Airで、モデルインストール用の空きストレージ容量と初回ダウンロード用のインターネット接続が必要
  • 測定されたデコード性能は次のとおり
    • 8GB M2 MacBook Air: 5.1〜6.3 tok/s
    • 24GB M5 Pro: 31〜35 tok/s
  • スループットはプロンプト長、生成長、ページキャッシュ状態、ハードウェアによって変わるため、測定値は性能上限ではなく基準値
  • モデル実行前にメモリを多く使うアプリを閉じ、memory_pressure -Qで空きメモリを確認する必要がある
  • アプリ、decode service、CLI、サーバー、テスト、または他のローカルモデルプロセスは、一度に1つだけ実行すべき

提供プロダクトと使い方

  • Swiftパッケージは6つのプロダクトを提供する
    • TurboFieldfare: ランタイムとMetalカーネルを含むSwiftライブラリ
    • TurboFieldfareMac: インストールと生成のためのネイティブMacアプリ
    • TurboFieldfareDecodeService: Macアプリが使用する一回限りのローカルモデル・Metal所有プロセス
    • TurboFieldfareCLI: コマンドラインのinstruction chatおよびraw completion
    • TurboFieldfareServer: loopbackのOpenAI互換Chat Completionsサーバー
    • TurboFieldfareRepack: ストリーミングインストールおよびインストール検証ツール
  • Macアプリではモデルをダウンロードした後、Load Modelを選択し、プロンプトを入力して生成する
    • ステータスバーで進行状況、デコード速度、メモリ使用量を確認できる
    • sampling、context length、expert-cache slot、ランタイムオプションを調整できる
  • CLIのinstruction chatはJSONメッセージ配列を受け取り、Macアプリと同じ形式に変換する
    • 応答上限である--max-newのデフォルト値は1,024トークン
    • Macアプリは選択したcontext windowが埋まるまで生成できる
  • --promptは、チャット形式を適用しないraw completionと再現可能な比較に使用する
  • 生成テキストは標準出力へ、時間統計は標準エラーへ送られ、--quietで統計出力をオフにできる

プロンプトとサポート範囲

  • Macアプリは入力をinstructionとして処理し、Gemmaのチャット形式を自動適用する
  • デフォルトのsampling設定はtemperature 0.2、Top-K 64、Top-P 0.95
    • temperatureを0に設定すると、決定論的なgreedy outputを使用する
    • モデルは反復したり誤答したりすることがあるため、重要な結果は確認が必要
  • アプリとCLIはユーザー・モデルメッセージおよび任意のsystem guidanceをサポートするが、ツールを公開したり実行したりしない
  • 現在のモデル入出力はテキスト専用で、画像、音声、動画はサポートしない
  • CLIは--max-context--temperature--top-k--top-p--repetition-penalty--seed、繰り返し指定可能な--stop文字列を提供する

OpenAI互換ローカルサーバー

  • 実験的サーバーは127.0.0.1:8080/v1で動作し、Chat Completions、ストリーミング、関数ツール宣言、単一prefixプロンプトの再利用をサポートする
  • サーバーはモデルが生成したtool callを返すが、すべてのツール呼び出しの承認と実行はクライアントが担当する
  • リモート認証とTLSがないため、サーバーはloopbackのみに維持する必要がある
  • Macアプリ、CLI、サーバーは同じ.gturboディレクトリを使用するが、モデルを所有するプロダクトは同時に1つだけ実行すべき

実装範囲と実験記録

  • カスタムMetalカーネルは、量子化GEMV、attention、MoE、normalization、RoPE、sampling、production fusionを処理する
  • ランタイムはSSDベースのrouted-expertストリーミング、制限付きexpertキャッシュ、チャンク単位の単一プロンプトprefill、トークン単位生成を実装する
  • カーネル、キャッシュ、I/O、prefill、decodeにわたる103件の測定結果を実験記録として管理する
  • 実験文書には、効果の大きかった最適化、失敗したアイデア、より強い検証の後に覆された初期結果が含まれる
  • 今後の作業は、iPhone・iPadアプリ開発とモバイル推論速度・メモリ測定、16GB M4 Mac miniおよび他の8GB Apple Silicon Macのベンチマーク

ライセンスとモデル条件

  • ソースコードとドキュメントはApache License 2.0で配布される
  • モデル重みはリポジトリに含まれず、インストーラーが固定されたHugging Faceチェックポイントから別途ダウンロードする
  • 重みには元の配布条件が引き続き適用される
  • TurboFieldfareはGoogleと提携しておらず、Googleの支援・承認を受けたプロジェクトではない独立研究プロジェクト

1件のコメント

 
GN⁺ 3 시간 전
Hacker News のコメント
  • なぜ毎回、チャールズ王が誰かまで含めてモデル全体をメモリに押し込む必要があるのか、ずっと疑問だった。大きなファイルを細かく分けて少ないメモリで効率よく読む技術は、すでに確立されていると思う
    最先端の AI 業界には、モデル作成には長けていても、スケーラビリティや実用性はインフラ担当に丸投げする傾向があるように見える。実際に使う知識が 10% 未満なら、微調整と最適化だけでコストを大きく下げられるかもしれない

    • モデル全体をメモリに置くほうが、ディスクとやり取りするよりずっと速い
    • 実質的にMixture of Experts (MoE) 構造の説明になっている。専門家層が十分小さく、SSD が速ければ、必要なときだけ読み込める
      密な LLM は通常パフォーマンスが高いが、層を外部ストレージに追い出すと MoE よりはるかに遅くなる
  • 最近は出所のわからないプロジェクトをダウンロードするとき、こうしたセキュリティレビューを自分で回す必要がある。リポジトリのエージェント指示と Markdown ファイルを無視し、Swift/Metal のソース、ビルドスクリプト、CI 設定、依存関係を検査させたところ、マルウェア・バックドア・認証情報の窃取・隠れたネットワークエンドポイントは見つからなかったが、コンパイル・サプライチェーン・ランタイムのリスクは依然として残る、という結果だった
    もっと良いプロンプトがあれば共有してほしいし、Cursor の Composer 2.5 で実行したコストは0.20 ドル未満だった

  • M1 MacBook Air で macOS 15 を使っているなら、次の 2 行を削除するか、if #available(macOS 26.0, *) で囲めばコンパイルできる: opts.languageVersion = .version4_0
    コメントによれば、attention が 11.24 倍速くなって prefill が 2.4 倍高速化される恩恵は失うが、8 コア GPU の M1 Air でも毎秒 5〜6 トークンは出る

    • 有用な情報だ。あとで最低サポートバージョンを下げてみるかもしれない
      2.4 倍の prefill 改善は apple10 GPU 系でしか動かず、M1 は記憶では apple7 だ
  • このプロジェクトが普通の**mmap**と比べてどうなのか気になる。llama.cpp も mmap を有効にして再パッキングを無効にすれば、必要なら 26B モデルを 2GB RAM で実行できる
    核心の違いは、SSD 読み込みを推論処理と同期してレイテンシを最小化している点にあるようで、OS はこうした実行コンテキストを考慮しない

    • 最初のバージョンは mmap を使っていた。8GB M2 でコールド状態の 3.36MB の expert を読むのに mmap は 10ms、pread は 2.8msかかり、全体のシミュレーションはそれぞれ毎秒 0.50 トークンと 4 トークンだった
      mmap では、モデルがページに触れた時点で OS が事後対応で読み込むため、どの expert が選ばれたのか、いつ GPU 処理と読み込みを重ねられるのかを把握できない。共通の重みは単純化のため引き続き mmap を使っており、llama.cpp も 2GB 未満で動かせるだろうが、より遅いはずだ
    • 実際の速度を確認するなら、llama.cpp のSSD オフロードと直接比較してみたい
  • 「測定結果はベースラインであって性能上限ではない」という文は、Claude 特有の言い回しに見える

    • こういう表現があまりに広まりすぎて、Claude っぽい文体を読み続けるうちに自分まで同じ癖がつきそうで心配になるほどだ
    • 「100 回以上実験し、その大半は失敗したが、一部がここまで導いてくれた」も同じ痕跡に見える
    • もともとは ChatGPT 的な表現だった可能性のほうが高いが、だからといって西洋企業を蒸留したものだと決めつけるつもりはない。2022 年以降のレシピブログが 4.6〜4.8 頃の学習データに入っていた可能性もある
    • もうこういう判別はやめる時期だと思う。新しい形の文法警察と大差なく、付加価値もほとんどない
      著者が LLM で文だけ整えて、余計な内容を足していないなら問題ない。文章自体が無価値な生成物なら、単に低評価すればいい
  • より高速な SSD を積んだ M1 Max Mac Studio で毎秒 12 トークン、しかもほぼ即時応答が出るのは印象的だ。大規模モデルをメモリではなく SSD から直接動かす可能性を示している

    • 残念ながら、ここではSSD 読み込み速度が最大のボトルネックだ
  • 最近は SSD ストリーミングエンジンが増えているが、難しい機能にまで踏み込む例は少ない。主要モデルには speculative decoding 用のMTP ヘッドがあるので、これを SSD 上の expert 重みの先読みにも使えるかもしれない
    GPU が必要とする前に重みを用意できれば、VRAM キャッシュミスのコストを大きく減らせるし、効果が実証されれば将来のモデルは expert を先読みする専用ヘッドを持ち、学習段階からそれを考慮する可能性もある

    • SSD ストリーミングでは、GPU は正しい expert を取得できるまでほぼ常に SSD 待ちなので、SSD 側には先読みの余裕が事実上ない。間違った expert を読めばむしろ損で、そのため一般的な小規模バッチ環境では既存のMTP もあまり役に立たない
    • 実際には思ったより難しい。層ごとに expert の集合が異なり、小さなルーターが下位層 expert の出力状態を見て使う expert を決める
      MTP が作ったドラフトトークンで第 1 層の expert までは予測できても、第 10 層を知るには第 1〜9 層を実行しながら、その expert たちを先に読み込まなければならない。したがって、次トークン生成器の代わりに全層の expert 活性化を一括で予測するよう学習された仕組みが必要になる
  • DiffusionGemma を実行するプロジェクトもほぼ準備できており、2 つのプロジェクトを組み合わせれば相性は良さそうだ。36GB M3 で毎秒約 20 トークンが出ており、お互いのより高速なカーネルを持ち寄れる可能性も大きい
    現在のコードは https://github.com/mmastrac/diffgemma にあるが、まだ配布可能な状態ではない

    • 最近見てみたが、拡散モデルをローカルで動かす実益は小さいと判断した: https://eamag.me/2026/why-parallel-diffusion-llms-are-slow-o...
      これについてどう考えるか気になる
    • Diffusion Gemma がプロジェクトの途中で出てきて、乗り換えも真剣に検討したが、既存の方向で仕上げることにした。2 つのプロジェクトは非常に相性が良いと思っており、必要なコードは自由に使っていいし、README の最後にある LinkedIn から連絡してもらっても構わない
  • 8GBのM2 MacBook Airで毎秒5~6トークン、M5 MacBook Proで31~35トークンという大きな差がなぜ出るのか気になる。SSD性能の差がそこまで大きいとは思えないが、この方式ではSSDが支配的なボトルネックになると予想していた

    • M5 SSDの性能向上は前世代と比べてもかなり大きい。Blackmagic Disk Speed TestではM5 MacBook Proが最大6,323MB/s、M4 MacBook Proが2,031MB/sを記録し、3倍以上の差があった
      https://www.tomshardware.com/laptops/macbooks/m5-macbook-pro...
    • M5はメモリ容量が多く、OSがファイルの大半をすでにキャッシュしていた可能性が高い。M2はメモリ圧迫が大きく、SSD読み込み結果をあまりキャッシュできないはず
      OSキャッシュ込みで合計2GBしか使えないなら、推論速度はさらに低下する可能性がある
    • システムキャッシュとpreadにかなり依存している。プロセスが2GB未満でも、M5 Macは一部をキャッシュでき、ハードウェア自体もはるかに高速
      トークンあたりの読み込みはM2で83ms、M5 Proで12ms、全体時間はそれぞれ163msと30msだった。読み込みもGPU処理も高速化した結果である
    • 世代が古いため、Pro同士で比べてもSSDがかなり遅く、同世代でもAirのSSDとメモリ帯域幅はProより低い可能性がある
    • M5 MacBook ProはRAMが24GBあるため、より多くのコンテキストをメモリに保持できる可能性もある
  • 今後、30~60GBのメモリと非常に高速なSSDを備えたシステムなら、この手法で超大規模モデルも動かせるようになることを期待している