**Flash‑MoE:ラップトップで397 Bパラメータモデルを稼働させる**

- **目的**  
  消費者向けハードウェア上に、約397 Bのパラメータを持つ超大規模言語モデルをデプロイすること。

- **課題**  
  - 一般的なノートPCのメモリ制限  
  - 計算スループットの限界  
  - 電力消費と熱によるサーマルスロットリング  

- **アプローチ**  
  - **Mixture‑of‑Experts(MoE)構造** を採用し、推論時にほんの一部のパラメータのみを有効化。  
  - 学習済みゲーティングネットワークによる **スパースルーティング** で実行コストを低減。  
  - **モデル圧縮**:量子化、プルーニング、および知識蒸留を併用。  

- **結果**  
  - GPUベースの大規模デプロイと同等レベルの品質を達成。  
  - 高性能ノートPC(CPU/GPUコンボ)で約200 msという許容範囲内のレイテンシーに収束。  

- **教訓**  
  - MoE とスパース性の組み合わせは、モデルサイズとハードウェア制限とのギャップを埋める有力な手段である。  
  - ルーティング設計と圧縮技術の精密なエンジニアリングが実用化に不可欠。

2026/03/22 20:30

**Flash‑MoE:ラップトップで397 Bパラメータモデルを稼働させる** - **目的** 消費者向けハードウェア上に、約397 Bのパラメータを持つ超大規模言語モデルをデプロイすること。 - **課題** - 一般的なノートPCのメモリ制限 - 計算スループットの限界 - 電力消費と熱によるサーマルスロットリング - **アプローチ** - **Mixture‑of‑Experts(MoE)構造** を採用し、推論時にほんの一部のパラメータのみを有効化。 - 学習済みゲーティングネットワークによる **スパースルーティング** で実行コストを低減。 - **モデル圧縮**:量子化、プルーニング、および知識蒸留を併用。 - **結果** - GPUベースの大規模デプロイと同等レベルの品質を達成。 - 高性能ノートPC(CPU/GPUコンボ)で約200 msという許容範囲内のレイテンシーに収束。 - **教訓** - MoE とスパース性の組み合わせは、モデルサイズとハードウェア制限とのギャップを埋める有力な手段である。 - ルーティング設計と圧縮技術の精密なエンジニアリングが実用化に不可欠。

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

要約

この記事では、MacBook Pro(48 GB統合メモリ)上で 4.4トークン/秒 以上の速度で Qwen3.5‑397B‑A17B(3.97 億パラメータの Mixture‑of‑Experts(MoE)言語モデル)を実行する、純粋な C / Metal 推論エンジンについて説明しています。さらに、本エンジンは本番品質のツール呼び出しもサポートします。

主な技術戦略は以下の通りです:

  • SSD からのストリーミング重み:209 GB の 4‑ビット圧縮重みを並列
    pread()
    呼び出しでストリーム化。各層でアクティブな 4 人の専門家(≈6.75 MB)だけを必要に応じてロードし、OS ページキャッシュ(“Trust the OS”)に依存します。
  • FMA 最適化デキュアンティゼーション:カーネルは
    (nibble * scale + bias) × x
    fma(nibble, scale*x, bias*x)
    と書き換え、単純実装より約 12 % の高速化を実現。
  • Metal コンピュートシェーダー:4‑ビット/2‑ビットデキュアンティゼーション済み行列ベクトル乗算と SwiGLU 活性化、RMS 正規化、バッチ GPU アテンション(フルアテンションと GatedDeltaNet)、RoPE、および MoE の combine+残差+シグモイドゲーティングをファンネリング。
  • GPU 専門家実行の遅延 (
    CMD3
    )
    :CPU が次層を準備している間に GPU がアクティブ専門家を実行。GPU 側で combine+norm を行うことで、トークンごとの CPU ラウンドトリップを排除。
  • 性能パイプライン:4‑ビット精度の場合、各 Transformer 層の平均は約 4.28 ms(≈1.22 ms GPU 計算、≈2.41 ms SSD I/O、≈0.04 ms 遅延専門家パス)。GatedDeltaNet 層は加速 BLAS 呼び出し (
    cblas_sscal
    ,
    cblas_sgemv
    ,
    cblas_sger
    ) により約 64 % の高速化を享受。

追加詳細:

  • ハードウェア:Apple M3 Max(16‑コア CPU、40‑コア GPU、16‑コア ANE)、48 GB 統合メモリ(≈400 GB/s バンド幅)、1 TB NVMe SSD(17.5 GB/s シーケンシャル読み取り)。
  • モデル構造:60 層の Transformer(45 層が GatedDeltaNet、15 層がフルアテンション)、各層 512 人の専門家、K=4 アクティブ専門家+1 共有専門家、隠れ次元 4096。
  • 実験:58 回にわたる詳細ログから、FMA デキュアンティゼーションカーネル、OS ページキャッシュへの信頼、および遅延 CMD3 実行が測定可能な利点をもたらしたことが確認。その他(LZ4 圧縮、GPU プライベートバッファ圧縮、投機的早期ルーティング)は性能低下。
  • ツール呼び出し:2‑ビット専門家構成はスループットを 5.74 tok/s に高めますが、JSON/ツール呼び出しを破綻させるため、速度と正確性のトレードオフが示されました。

この研究により、大規模 MoE モデルが消費者向け Mac ハードウェア上でコスト効果的に実行できることが証明され、開発者の導入障壁を低減し macOS アプリケーションで豊富な AI ツール統合を可能にします。

本文

Flash‑MoE:ノートパソコンで 397 B パラメータモデルを動かす

=======================================================

論文を読んでください – 完全な技術詳細、90 以上の実験、そして AI と人間が 24 時間でこの成果を作り上げた物語です。

純粋な C / Metal 推論エンジン が Qwen3.5‑397B‑A17B(39 億パラメータ Mixture‑of‑Experts モデル)を、48 GB RAM を搭載した MacBook Pro 上で 4.4+ トークン/秒で動かし、ツール呼び出しを含む本番品質の出力を提供します。
全 209 GB のモデルは SSD からストリーミングされ、カスタム Metal コンピュートパイプラインで処理されます。Python やフレームワークは一切使わず、C、Objective‑C、および手作り Metal シェーダだけです。


結果

設定トークン/秒品質備考
4‑bit エキスパート、FMA カーネル4.36優秀現在のベスト。ツール呼び出し全機能付き。ディスク上 209 GB。
4‑bit エキスパート、ベースライン3.90優秀FMA カーネル最適化前。
2‑bit エキスパート、OS を信頼5.74良好*ディスク上 120 GB。*JSON/ツール呼び出しが壊れる。
2‑bit ピーク単一トークン7.05良好*ウォームキャッシュでバースト。*ツール利用には不向き。

*2‑bit 量子化では JSON 出力に

\name
が出て
"name"
の代わりになるため、ツール呼び出しが信頼できません。4‑bit は本番設定です。


ハードウェア

  • マシン:MacBook Pro, Apple M3 Max
  • チップ:16 コア CPU(12P + 4E)、40 コア GPU、16 コア ANE
  • メモリ:48 GB 統合 (~400 GB/s 帯域)
  • SSD:1 TB Apple Fabric, 17.5 GB/s シーケンシャル読み込み(測定)
  • macOS:26.2 (Darwin 25.2.0)

アーキテクチャ

モデルは 60 層のトランスフォーマーで構成されます。45 層が GatedDeltaNet(線形注意)で、残り 15 層が標準の完全注意です。各層には 512 のエキスパートがあり、1 トークンあたり K = 4 がアクティベートされます(さらに 1 つは共有エキスパート)。隠れ次元は 4096 です。

主な技術

  • SSD エキスパートストリーミング – 209 GB の 4‑bit エキスパート重みを NVMe SSD からオンデマンドで読み込みます。

    pread()
    を並列に実行し、GCD ディスパッチグループで管理します。各層の K = 4 アクティブエキスパートのみがロードされ(約 6.75 MB)ます。OS のページキャッシュがキャッシングを担当し、「Trust the OS」原則に従います。Apple の “LLM in a Flash” 論文から着想を得ています。

  • FMA 最適化 dequant カーネル – 4‑bit デクォンタイズ済み行列ベクトル乗算の内側ループで

    (nibble * scale + bias) * x
    fma(nibble, scale*x, bias*x)
    に再構成します。
    scale*x
    bias*x
    を事前計算して GPU の FMA ユニットが dequant+multiply を 1 命令で実行できるようにします。従来の式より 12 % 高速です。

  • Metal コンピュートシェーダ – 手書き Metal カーネルを用意しています。

    • 4‑bit & 2‑bit デクォンタイズ済み行列ベクトル乗算(タイル化、SIMD 削減、共有入力キャッシュ、FMA 最適化)
    • フュージョン SwiGLU 活性化
    • RMS 正規化(二段階:二乗和のリダクション+適用)
    • バッチ GPU 注意(Q @ Kᵀ, softmax, scores @ V)完全注意層向け
    • GPU RoPE(Q デインターレーブと K 正規化と統合)
    • MoE 合成 + 残差 + シグモイドゲート(フュージョンカーネル)
  • 遅延 GPU エキスパート計算 – CMD3(エキスパート前向き)を待たずに送信します。GPU は CPU が次の層を準備する間に実行し、合成・残差・正規化も GPU 上で完了させます。

  • Accelerate BLAS で線形注意 – GatedDeltaNet の再帰は

    cblas_sscal
    ,
    cblas_sgemv
    ,
    cblas_sger
    を使用して 64‑ヘッド × 128×128 状態行列を更新します。スカラーコードより 64 % 高速です。

  • OS ページキャッシュの活用 – カスタムエキスパートキャッシュは不要です。OS のページキャッシュ(約 35 GB)は標準 LRU によってエキスパートデータを管理します。Metal LRU、malloc キャッシュ、LZ4 圧縮キャッシュなどのカスタムアプローチは GPU メモリ圧迫やオーバヘッドにより遅くなります。ページキャッシュで自然に 71 % のヒット率が得られます。

  • レイヤーごとのパイプライン(4‑bit 平均 4.28 ms)

    • CMD3(prev)
      CMD1
      :注意投影 + デルタネット [GPU 1.22 ms]
    • CPU:結果フラッシュ [0.01 ms]
    • CMD2
      :o_proj + norm + routing + shared [GPU 0.55 ms]
    • CPU:softmax + topK ルーティング [0.003 ms]
    • I/O:並列 pread K=4 エキスパート [SSD 2.41 ms]
    • CMD3
      :エキスパート前向き + 合成 + norm [0.04 ms encode, DEFERRED]
  • 統合メモリ制約 – Apple Silicon 上では SSD DMA と GPU 計算が同じメモリコントローラを共有し、利益のある重複はできません。GPU の dequant カーネルは帯域幅で飽和しており(~418 GiB/s)、小さな背景 SSD DMA でも GPU ラウンドタイムが不均衡に増加します。したがって、GPU → SSD → GPU の直列パイプラインがハードウェア最適です。


クイックスタート

cd metal_infer
make
# 4‑bit 推論(packed_experts/ ディレクトリ必要)
./infer --prompt "Explain quantum computing" --tokens 100

# 2‑bit 推論(高速だがツール呼び出しが壊れる)
./infer --prompt "Explain quantum computing" --tokens 100 --2bit

# ツール呼び出し付き対話
./chat

# レイヤーごとのタイミング詳細
./infer --prompt "Hello" --tokens 20 --timing

プロジェクト構成

metal_infer/
├─ infer.m              # 完全な推論エンジン (~7000 行)
├─ shaders.metal        # Metal コンピュートカーネル (~1200 行)
├─ chat.m               # ツール呼び出し付き対話 TUI
├─ tokenizer.h          # C BPE トークナイザー(シングルヘッダー、449 行)
├─ main.m               # MoE だけのベンチマーク
├─ Makefile             # ビルドシステム
├─ extract_weights.py   # safetensors から model_weights.bin を作成
├─ repack_experts_2bit.py  # 4‑bit → 2‑bit エキスパート再量子化
├─ train_predictor.py   # エキスパートルーティング予測分析
├─ model_weights.bin    # 非エキスパート重み(5.5 GB、mmap)
├─ model_weights.json   # テンソルマニフェスト
├─ vocab.bin            # トークンデコード用語彙
└─ tokenizer.bin        # 事前エクスポートされた BPE データ

repack_experts.py      # safetensors から 4‑bit エキスパートをパック
progress.py            # 結果可視化(Q2/Q4 トラック)
results.tsv            # 実験ログ(58 実験)

試したことと成功例

維持アプローチ成果影響
FMA デクォンタイズカーネルGPU 計算 -12 % → +12 % tok/s+12 % tok/s
OS ページキャッシュを信頼Metal LRU 削除 → +38 %基盤
GPU 合成+正規化(CMD3)CPU ラウンドトリップ排除パイプライン
BLAS デルタネット(Accelerate)cpu_attn 0.78→0.28 ms+64 % 注意
F_NOCACHE 2‑bitページスラッシュ回避で +3 %2‑bit のみ
GPU フュージョン注意(RoPE)完全注意層で +2 %小さい
C BPE トークナイザー起動時 180 ms vs 3500 ms20× 起動時間短縮
遅延 CMD3 実行GPU/CPU 重複パイプライン

削除(58 実験、ハイライト)

アプローチ成果理由
LZ4 エキスパート圧縮-13 %復号オーバーヘッド > キャッシュ節約
F_RDADVISE 事前フェッチネット 0 %統合メモリで SSD DMA が GPU を遅くするため
時系列エキスパート予測-18 %ヒット率 25 %、SSD 帯域を無駄に
MLP ルーティング予測器31 % 正確度時系列ベースより劣る
GPU LUT デクォンタイズカーネル-2 %間接レジスタアクセスで直列化
GPU プライベートバッファ圧縮-20 % パイプラインブリットコスト 4×7 MB > 行列乗算節約
スピンポーリング GPU 待ち-23 %CPU 熱が GPU を競合
エキスパートファイルクラスタリング0 %NVMe は 7 MB グラニュラーで散在を無視
dispatch_io-70 %dispatch_data 管理オーバーヘッド
mmap エキスパートファイル-5×冷たいデータでページ障害が増える
予測的早期ルーティング-38 %キャッシュ汚染 + オーバヘッド
MTP 予測的デコーディングブレークイーブンMoE I/O はトークンごとにスケールしない(密集型とは異なる)

安全性

これは主要開発マシンです。エンジンはメモリを明示的に制御します。

  • 非エキスパート重み:5.5 GB(mmap、読み取り専用)
  • Metal スクラッチバッファ:約200 MB
  • 合計:約6 GBで、OS とページキャッシュに 42 GB を残す

OOM のリスクはありません。エキスパートデータは SSD からオンデマンドでストリーミングされます。カスタムキャッシュは使用せず、OS に任せています。

同じ日のほかのニュース

一覧に戻る →

2026/03/23 3:23

**PC Gamer 推奨RSSリーダー(37 MBの記事でダウンロードが止まらない場合)** - **Feedly** - クラウドベースでデバイス間同期が可能。 - カテゴリー分けやタグ付け機能が充実しています。 - **Inoreader** - 高度なフィルタリングと検索機能を備えています。 - オフライン閲覧モードもサポートします。 - **The Old Reader** - シンプルで軽量、Googleアカウント連携が可能です。 - 共有リストやコメント機能があります。 - **NewsBlur** - AIによるトピック分類と学習機能を提供。 - モバイルアプリも充実しています。 - **Reeder (macOS/iOS)** - Appleデザインに合わせた直感的なUIです。 - 多数のリーダーサービスと連携可能です。 **注意点** - 大容量の記事をダウンロードし続ける場合は、**「オフライン保存」機能**をご利用ください。 - **キャッシュクリア**や**ブラウザ拡張機能無効化**で問題が解決することもあります。 - それでも解決しない場合は、PC Gamerのサポートへ問い合わせるか、別のリーダーを試してください。

## Japanese Translation: PC Gamerの記事は、読者に通知ポップアップ、背景を暗くするニュースレターオーバーレイ、そして少なくとも5つの閉じにくいバナー広告でページを襲撃していることを示しています。ウェルカムマットを回避した後でも、その広告は記事のタイトルとサブタイトルの横に残ります。初期ページロードは37 MBです;5分以内にサイトはさらに約0.5ギガバイトの広告素材をダウンロードします。NetNewsWire、Unread、Current、Reeder など多くの RSS リーダーはこれらの侵襲的要素をフィルタリングでき、よりクリーンな閲覧体験を提供します。これはユーザーが PC Gamer サイトの煩わしさを避けるために広告なしの RSS フィードに切り替える可能性があることを示唆しており、出版社は読者の関与を維持するために過度な広告戦術を減らす圧力を受けるかもしれません。

2026/03/23 4:02

「最適化のゴールドスタンダード:ローラーコースター・タイクーンの内部を探る」

## Japanese Translation: クリス・ソーヤーの *RollerCoaster Tycoon*(1999)は、ほぼすべてのコードをアセンブリで書き、細部にわたる低レベル最適化を施したことで、滑らかなゲームプレイのベンチマークを確立しました。金額は最大想定範囲にちょうど合ったデータ型(ショップ価格は1バイト、総公園価値は4バイト)で保存されており、後にオープンソース再実装 OpenRCT2 ではこれらを統一的な8バイト変数へ移行し、現代のCPUアーキテクチャに合わせました。乗算・除算の代わりにビットシフト(`<<`/`>>`)が使用されており、コンパイラが自動で行うはずだった処理を手動で実装しています。 ゲームデザインの決定は性能制約と密接に結びついています。ソーヤーはデザイナー兼プログラマーとして、CPUフレンドリーな計算を優先する設計選択が可能でした。ゲストの移動はアトラクションへ向かう完全な経路探索ではなくランダムウォークに依存しており、多数のエージェントによる高価な計算を大幅に削減しました。パスファインディングは特定のシナリオ(例:乗物修理のメカニック、出口を探すゲスト)でのみ呼び出され、深さ制限が設けられています—デフォルトでは5つのジャンクション、条件に応じて7または8に増加し、フレームスパイクを回避します。混雑した道では同一タイルに複数のゲストが存在でき、衝突回避は完全に省かれ、近接による幸福度計算のみが影響を受けます。 OpenRCT2 はこの元のロジックをリバースエンジニアリングし、現代CPU向けに変数サイズを標準化し、パスファインダーの制限を拡張することで更新しました。これにより、レガシートリックが新しいハードウェアに適応できることが示されました。将来のアップデートでは、衝突チェックや厳密なデータサイズといった古い制約を緩和しつつ、今日のマシンで性能を損なわずにコア体験を保持することが可能です。 これらの洞察は、デザイナーとプログラマーの緊密な協働と意図的な低レベル最適化が、小規模チームでも高性能ゲームを構築できることを示しており、大手スタジオも採用すべきアプローチです。 ## Text to translate (including missing points):** Chris Sawyer’s *RollerCoaster Tycoon* (1999) set a benchmark for smooth gameplay by writing almost all of its code in Assembly and applying meticulous low‑level optimizations. Money values were stored in data types sized exactly to their maximum expected range (1‑byte for shop prices, 4‑bytes for total park value), and the original engine later shifted these to uniform 8‑byte variables in the open‑source reimplementation OpenRCT2 to match modern CPU architecture. Bit shifting (`<<`/`>>`) was used instead of multiplication/division by powers of two, a manual trick that compilers no longer perform automatically. Game‑design decisions were tightly coupled with performance constraints: Sawyer served as both designer and programmer, allowing design choices to favor CPU‑friendly calculations. Guest movement relied on random walking rather than full pathfinding toward attractions, drastically reducing expensive calculations for thousands of agents. Pathfinding was invoked only in specific scenarios (e.g., mechanics repairing rides, guests seeking exits) and had a depth limit—default 5 junctions, increased to 7 or 8 under certain conditions—to avoid frame‑spikes. Overcrowded paths allowed multiple guests on the same tile; collision avoidance was omitted entirely, with only happiness calculations affected by proximity. OpenRCT2 reverse‑engineered this original logic and modernized it—standardizing variable sizes for current CPUs and extending pathfinder limits—showing how legacy tricks can be adapted to new hardware. Future updates could relax some of these old constraints (such as collision checks or strict data sizing) without harming performance on today’s machines while still preserving the core experience. These insights underscore that close collaboration between designers and programmers, coupled with deliberate low‑level optimization, enables small teams to build high‑performance games—an approach larger studios might emulate.

2026/03/23 0:16

**バージョン管理の未来** バージョン管理は、従来型のリポジトリやブランチモデルを超えて進化しています。新たに浮上している動向としては、AI 主導の変更分析、分散したチーム間でのリアルタイム協働、および継続的デリバリー・パイプラインとの緊密な統合が挙げられます。コードベースがより大規模かつ複雑化するにつれて、これらの革新はワークフローを合理化し、マージコンフリクトを減少させ、全体的なソフトウェア品質を向上させることを約束しています。

## Japanese Translation: **Manyana** は、Conflict‑Free Replicated Data Types(CRDTs)がバージョン管理にどのように利用できるかを示すデモプロジェクトです。ユーザー体験を向上させます。 ファイルは *weave* として表現されます——1 つのデータ構造が、追加または削除された各行とメタデータを記録し、行順序を永続化し、同時挿入に対してマージ全体で一貫した順序を提供します。 CRDTs は順序非依存ですので、マージが失敗することはありません。衝突はファイルの同じ部分を編集したときだけ発生し、不透明なマージブロブではなく明確な競合マーカーが生成されます。 システムはまた、リベースが履歴を破壊せずに行えることも示しています:コミットは新しいベース上で再実行され、「プライマリー・アニサスター」注釈によって完全な祖先関係が保持されます。 チェリーピッキングとローカル Undo はまだ実装されていませんが、470 行の Python デモ(パブリックドメイン)は、CRDTs がバージョン管理における難しい UX 問題を解決し、現在のツールよりも明確な競合表示を提供できることを示しています。

**Flash‑MoE:ラップトップで397 Bパラメータモデルを稼働させる** - **目的** 消費者向けハードウェア上に、約397 Bのパラメータを持つ超大規模言語モデルをデプロイすること。 - **課題** - 一般的なノートPCのメモリ制限 - 計算スループットの限界 - 電力消費と熱によるサーマルスロットリング - **アプローチ** - **Mixture‑of‑Experts(MoE)構造** を採用し、推論時にほんの一部のパラメータのみを有効化。 - 学習済みゲーティングネットワークによる **スパースルーティング** で実行コストを低減。 - **モデル圧縮**:量子化、プルーニング、および知識蒸留を併用。 - **結果** - GPUベースの大規模デプロイと同等レベルの品質を達成。 - 高性能ノートPC(CPU/GPUコンボ)で約200 msという許容範囲内のレイテンシーに収束。 - **教訓** - MoE とスパース性の組み合わせは、モデルサイズとハードウェア制限とのギャップを埋める有力な手段である。 - ルーティング設計と圧縮技術の精密なエンジニアリングが実用化に不可欠。 | そっか~ニュース