8GB VRAMで35B MoEを動かすcyber-on-strataの仕組みと実測値
30秒でわかる内容解説
GitHubユーザー1314521gjyがStrataエンジンのフォークcyber-on-strataを公開した。22.75GBのCyber-Tiel-Coder-35B-A3Bモデルを8GB VRAMのGPUで動作可能にする。システムRAMに重みを保持し、必要に応じてGPUにページングする方式を採用している。RTX 4080 SUPERでは毎秒57.7から63.5トークンの生成速度を記録した。ローカル環境での推論コストを大幅に抑えられる点が評価されている。
VRAMとシステムRAMの階層化による推論方式
本プロジェクトの核心は両級メモリ構造に集約される。35BクラスのMoE(モデルパラメータを複数の小型ネットワークに分割する仕組み)は総容量22.75GBだが、その89%がルーティング用エキスパート重みである。各トークン生成で実際に使うのは256個中8個に過ぎない。全量をGPUに載せると8GBカードでは溢れる。一方CPUのみだと遅すぎる。このジレンマを解決するため、重みをシステムメモリとGPUメモリで階層化している。
固定されたエキスパート銀行がシステムRAMに18.32 GiBを占める。GPU側の空き容量に応じて動的にキャッシュを割り当てる。計算時にGPUキャッシュに重みがなければ、CPUスレッドプールがその場で演算を行う。RTX 4080 SUPERでの実測では、8GBモードで毎秒57.7から63.5トークン、全キャッシュ常駐モードで毎秒134から136トークンを達成した。
親エンジンのデフォルトはfp16だが、本フォークではint8に設定されており、fp16と逐ビット一致する。長文脈では2.5GBのシステムメモリを消費してVRAMを2.11GB節約できる。ただし10月10日の訂正により、KVをシステムメモリに固定するスイッチはデフォルトでオフに設定された。これによりコンテキストの消失バグが解消されている。
対応CUDAアーキテクチャはsm_75からsm_120までの四世代をマルチビルドでカバーしている。cmakeの引数に75、86、89、120を指定すれば、RTX 20系から50系まで単一バイナリで実行可能になる。
フォークの経緯とメモリ最適化パラメータ
親エンジンのStrataはqwen4expメタデータを基準にモデルを読み込むため、本モデルには対応していなかった。GitHubユーザー1314521gjyがMITライセンスでフォークし、専用ビルドを提供している。起動コマンドにはexpert-profile(専門家の重み配置を事前に定義するファイル)フラグが含まれる。
これを指定しない場合、デフォルト戦略のキャッシュ命中率はわずか2.97%にとどまる。プロファイルファイルを用意することで命中率が78%に跳ね上がる。
推奨システムメモリは32GB以上だ。16GB環境ではエキスパート銀行の容量だけで足りず実行できない。48GBを搭載すればエンジン21GB、ファイルキャッシュ21GB、システム6GBで丁度収まる。
VRAM予約値はカード容量に応じて800から8000 MiBの間で調整する。メモリ使用量を最適化するには、expert-cache(GPU上の専門家重みキャッシュ領域)パラメータをautoに設定し、残りのVRAMを自動的にキャッシュ槽数に変換するのが効果的である。
| グラフィックカード | VRAM予約値 |
|---|---|
| 8 GB | 800–1200 |
| 12 GB | 1500–2500 |
| 16 GB | 2500–4000 |
| 24 GB | 4000–8000 |
| グラフィックカード | VRAM予約値 |
|---|---|
| 8 GB | 800–1200 |
| 12 GB | 1500–2500 |
| 16 GB | 2500–4000 |
| 24 GB | 4000–8000 |
分詞処理はエンジン外で行う。本体にはtokenizer(文章をトークンIDに分割するツール)が含まれておらず、llama-tokenizeで生成したIDを渡す必要がある。起動スクリプトがidからバイト列への変換表を使って逆変換を行う。この設計により推論エンジンのサイズを小型に保ち、メモリフットプリントを圧縮している。
逐ビット検証と速度ボトルネックの実態
正誤検証ではllama.cppとの逐ビット比較が行われた。GDN(Gate Distribution Normalization、ゲート値を正規化する関数)ゲート関数をsigmoidからSiLUへ修正し、MTP(Multi-Token Prediction、未来のトークンを同時に予測する手法)ドラフト配置のオフバイワンエラーを是正した結果、生成6トークン目まで完全に一致した。
7トークン目では数値の微小な揺らぎが生じたが、logit差は0.066で実用上の問題はないと判断されている。全キャッシュ常駐モードでは最初の分岐が15トークン目まで延びている。
推論速度の内訳を見ると、8GBモードではGPUの固定オーバーヘッド7.35ミリ秒とCPUの5.42ミリ秒が加算される。毎トークン約117MBの重みをメモリから読み出すため、60トークスループットで7GB/sの帯域を消費している。MTP投機的デコーディングは受容率0.55から0.58を達成するが、ドラフトヘッドが124から125個のエキスパートスロットを消費するため純効果は負のままである。
予備充填段階は8GBモードで毎秒1736から2203トークン、全常駐モードで毎秒3026から3086トークンを記録している。GPUの処理能力は十分だが、エキスパートのページングとCPU計算が生成フェーズのボトルネックになっている。
KV転送の未定論と次回更新の目標
長文脈におけるKVキャッシュの転送速度コストはまだ定論が得られていない。4096トークンでは86MB、128kトークンでは2.76GBの容量を占めるため、メモリ帯域との兼ね合いが性能に直結する可能性がある。現在提供されているバイナリにはサーバー機能が含まれていない。OpenAI互換エンドポイントの追加予定はあるが、実装は未検証の状態が続いている。
10月9日に公開されたこのフォークは、10月10日にKV配置パラメータのデフォルト値変更を適用して安定化を図った。今後はdocs/cyberディレクトリに記録されている既知の問題リストを解消し、ストリーミング推論のパフォーマンスをさらに最適化する予定である。
次回の更新ではMTP投機的デコーディングのオーバーヘッドを削減し、実用的な正味速度の向上を目指すと記録されている。