わずか3.2GBのRAMしか搭載していないノートPC上で、2840億パラメータの言語モデルを動作させることに成功しました。使用したのは、純粋なC99とNVMeドライブのみです。その秘訣は、160GBものチェックポイント全体をメモリにロードするのではなく、モデルのエキスパート(expert)の重みをストリーミングすることでした。これにより、最大規模の混合エキスパート(MoE)モデルであっても、コンシューマー向けハードウェアに詰め込めることが証明されました。

なぜ重要なのか

大規模言語モデル(LLM)は、コード生成や研究支援などに活用されていますが、その巨大なサイズゆえに、高価なマルチGPUサーバーを使用するか、品質を損なうような大幅な量子化を余儀なくされるのが一般的です。284BパラメータのMoEモデルが数GBのRAMで動作することを示したことは、趣味の開発者、小規模なスタートアップ、予算の限られた研究者が、精度を犠牲にすることなく最先端のモデルを試せる道を開くものです。

モデルとハードウェアのボトルネック

DeepSeek-V4-Flashは、トランスフォーマーの各レイヤーに256のエキスパートを配置し、合計284Bのパラメータを保持しています。生のチェックポイントはディスク上で約160GBを占め、これは一般的なノートPCの3.2GBというRAM容量を遥かに凌駕します。従来の推論パイプラインはチェックポイント全体をメモリにマッピングしようとするため、すぐにRAMの予算を使い果たしてクラッシュしてしまいます。

エキスパートの重みのストリーミング:核心となるアイデア

MoEアーキテクチャでは、各トークンに対してエキスパートのごく一部のみがアクティブになります。DeepSeek-V4-Flashでは、ルーターが各レイヤーの256個のエキスパートの中から6個を選択します。計算プロセスで休止中のエキスパートに触れることはないため、推論エンジンはそれらのロードをスキップできます。

実装では、チェックポイントをストリーミングソースとして扱います。ルーターが現在のトークンに必要なエキスパートを決定すると、エンジンはNVMeドライブからそれらの重みブロックを、RAM上のLRU(Least Recently Used)キャッシュに引き込みます。キャッシュが十分に大きければ、同じエキスパートが連続するトークン間で再利用され、キャッシュヒットが発生します。キャッシュが小さすぎると、エンジンはディスクからの読み取り頻度が高くなります。その結果、フル精度(full-precision)の重みを維持し、GPUアクセラレーションを必要とせずに、ノートPCの制限内に収まる3.23GBというピークメモリ使用量を実現しました。

実装から得られた苦い教訓

1. 流暢な出力は正しさの証明ではない バグのあるカーネルでも、特にモデルの言語パターンが数値的なエラーを隠蔽してしまう場合、もっともらしい文章を出力してしまうことがあります。私は14の重要な演算すべてを最新のPyTorchのリファレンスと比較検証し、数値的な差異が極めて小さな許容範囲内に収まっていることを確認しました。このステップを怠れば、微妙なドリフトを見逃していたでしょう。

2. 共通の失敗モードがテストを欺くことがある メモリ破損のバグにより、ルーティングの選択肢が少数のエキスパートに集中してしまい、キャッシュヒット率が52%から95%に跳ね上がり、劇的な高速化が起きているかのような錯覚を与えたことがありました。テストスイートが同じバグを持つコードの2つのバージョンを比較していたため、問題を見逃してしまったのです。解決策は、メインの実装とロジックを一切共有しない独立したリファレンスパスを追加することです。そうすれば、共通の欠陥が気づかれずにパスしてしまうことはありません。

3. 最適化する前に計測せよ メモリコピーには1msかかると想定して、その最適化に時間を費やしました。しかしプロファイリングの結果、実際にはその操作に3.6ms、つまり推論時間の22%を費やしていることが判明しました。教訓:パフォーマンスが重要なセクションにおいて、直感に頼ってはなりません。正確な計測こそが唯一の信頼できるガイドです。

4. 熱条件がスループットに劇的な影響を与える 「熱がこもった」状態のノートPCでベンチマークを実行したところ、冷えた状態のPCよりも実行時間が最大3倍遅くなりました。温度の上昇によってNVMeドライブのスループットが低下し、CPUの速度も落ち、結果が歪められたのです。パフォーマンス数値を公開する際は、常にシステムの熱状態を記録してください。

数値の概要

  • ディスク上のモデルサイズ: ~160 GB
  • ピークRAM使用量: 3.23 GB
  • トークンあたりのエキスパート数: 6 (256個中)
  • キャッシュヒット率: RAM容量により変動。3.2 GBでは変動あり。
  • 量子化なし: フル精度の重みをストリーミングするため、モデルの品質を維持。

RAMの予算が約3.21GBを下回ると、キャッシュが全く溜まらず、エンジンがすべてのトークンでストリーミングを行うため、パフォーマンスが急激に低下します。

ソースコードは github.com/ronak-create/deepseek-v4-in-c で公開されています。実験の再現や拡張を希望する方向けに、t.me/GyaanSetuAi にコミュニティのディスカッションチャンネルがあります。

まとめ

MoEモデルが実際に使用するエキスパートのみをストリーミングすることで、284BパラメータのLLMを、量子化やGPUアクセラレーションなしで、一般的なノートPC上で動作させることが可能になります。この実験は、巧妙なデータ移動、厳格な検証、そして規律ある測定によって、多くの人が不変だと考えているハードウェアの制約を回避できることを示しています。