- C++/CUDA ベースの LLM 推論エンジンで、GPU メモリストリーミングと NVMe 直接 I/O により、**Llama 70B モデルを RTX 3090(24GB VRAM)**で実行可能
- 3 段階適応キャッシュ構造を使用し、VRAM・固定 RAM・NVMe/mmap を自動分割、mmap 比で最大 83 倍の高速化を達成
- gpu-nvme-direct バックエンドは CPU を完全に介さず、NVMe から GPU へ直接データを転送し、PCIe 帯域幅を最大限活用
- Layer skip と self-speculative decoding 機能により不要な計算を減らし、品質低下なしに処理速度を向上
- コンシューマー向けハードウェアで超大型モデルを効率的に動作させ、高性能 LLM 推論のアクセシビリティ拡大の可能性を示す
NTransformer 概要
- 高効率な C++/CUDA LLM 推論エンジンで、RTX 3090(24GB VRAM)上でLlama 70B モデルを実行
- GPU メモリを通じてモデルレイヤーをストリーミングし、必要に応じてNVMe 直接 I/Oを使って CPU を完全にバイパス
- CUDA Toolkit 以外の外部依存関係なし、PyTorch や cuBLAS は不要
- GGUF モデルフォーマットをサポートし、Q4_0、Q8_0、Q4_K_M、Q5_K、Q6_K、F16、F32 の量子化形式を利用可能
性能とキャッシュ構造
- 3 段階適応キャッシュ(3-Tier Adaptive Caching)
- VRAM 常駐レイヤー(I/O なし)
- 固定 RAM(H2D 転送専用)
- NVMe/mmap フォールバック
- RTX 3090 + 48GB RAM 環境でmmap 比 83 倍の高速化
- **PCIe Gen3 x8 帯域幅(約 6.5 GB/s)**がボトルネックとして作用
- Q4_K_M 量子化では VRAM に 10 層多くのレイヤー(36 vs 26)を配置でき、転送量を削減
- Layer skip(コサイン類似度ベース)により 80 層中 20 層を省略し、品質低下を最小化
主な機能
- SLEP ストリーミング: NVMe 読み取り、PCIe DMA、GPU 計算をダブルバッファで重畳処理
- gpu-nvme-direct バックエンド: NVMe データを GPU からアクセス可能な固定メモリへ直接読み込み
- Self-speculative decoding: VRAM 常駐レイヤーをドラフトモデルとして活用し、追加モデル不要
- 自動データパス選択: VRAM 常駐 > 固定 RAM H2D > mmap 固定 > CPU memcpy
- Llama アーキテクチャ対応: RoPE、GQA、SwiGLU、RMSNorm、KV キャッシュを含む
システム要件
- Linux(Ubuntu、kernel 6.17+)、CUDA Toolkit 13.1、gcc/g++ 14、CMake 3.24+
- Compute Capability 8.0+ GPU(RTX 3090 でテスト済み)
- NVMe 直接 I/O を使用する場合は、別 PCIe スロット上の NVMe SSD と gpu-nvme-direct ライブラリが必要
NVMe 直接ストリーミング
- モデルが VRAM に収まらない場合、NVMe → GPU 直接パスで CPU を完全に排除
- データフロー: NVMe SSD → DMA → 固定ステージングメモリ → PCIe H2D → GPU バッファ → 計算
- NVMe を VFIO にバインドしてユーザー空間から直接アクセス
- 各レイヤー(70B Q6_K 基準で約 670MB)は、約 202ms 以内に 670 個の NVMe コマンドで読み込まれる
- NVMe 読み取り、H2D DMA、GPU 計算をダブルバッファパイプラインで並列処理
システム設定とリスク警告
- 自動設定スクリプト(
setup_system.sh)がGRUB、NVIDIA DKMS、CUDA ヘッダー、VFIO、NVMe バインドを順次構成
- IOMMU 無効化、カーネルモジュールのパッチ適用、NVMe の VFIO バインドなどの高リスク作業を含む
- 設定を誤ると起動失敗、NVMe データ損失、システム不安定化の可能性あり
- ブートドライブは絶対に使用禁止、専用の別 NVMe デバイスが必要
- すべての変更についてバックアップおよび復元スクリプトを提供
アーキテクチャとコード構造
src/ ディレクトリ内の主な構成
core/: テンソル、メモリ割り当て、GPU デバイス管理
cuda/: GEMV、RMSNorm、RoPE、SwiGLU、softmax カーネル
memory/: NVMe および mmap ベースの SLEP ストリーミングエンジン
model/: Transformer 構成、GGUF ローダー、attention、FFN、normalization
inference/: トークナイザー、サンプラー、エンジン
scripts/: システム設定、NVMe バインドおよび復元スクリプトを含む
開発段階ロードマップ
- 第 1 段階: Llama 8B Q8_0、カスタム CUDA カーネル、48.9 tok/s(完了)
- 第 2 段階: SLEP ストリーミング、単一 GPU で 70B 実行、33 倍高速化(完了)
- 第 3 段階: Q4_K_M/Q5_K 対応、Layer skip、self-speculative decoding、F16 KV キャッシュ(完了)
- 第 4 段階: NVMe Direct バックエンド、GPU 主導 NVMe 読み取り 3.35 GB/s(完了)
- 第 5 段階: 推論最適化および公開 C API(予定)
ライセンス
1件のコメント
Hacker Newsのコメント
CPUをバイパスしてNVMeからGPUへ直接転送する方式は本当に賢いと思う
ローカルで大規模モデルを動かすときのボトルネックは常にメモリ階層だったが、これはNVMeを拡張VRAMのようにDMAで直接扱うようなものだ
Apple Mシリーズの**ユニファイドメモリ(unified memory)アプローチと比べるとどうなのか気になる。M4 Maxなら70Bモデル全体をメモリに載せられるが、スループットは3090より低い
NVMeアプローチを使った3090とM4 Maxのネイティブ性能をバッチ推論(batch inference)**基準で比較したベンチマークがあれば面白そうだ
GPUdirectを使えば、ストレージデバイスへ直接DMA転送できる
もしm.2ストレージが実際にはDRAMだったらどうだろうと考えた。GPUからモデルをスピルするときは永続性が不要なので、システムRAMをCPU用に残しておける
毎秒0.2トークンという速度はチャットには遅いが、バッチ/非同期処理には十分だ
自分は自動コンテンツ生成パイプラインを回していて、複数のLLM呼び出しを同時実行している。画像生成がボトルネックなので、全体の処理時間はどうせ20分ほどかかる
70Bモデルをローカルで動かせるならAPIトークン費用を節約できるので、大きなコスト削減になるはずだ
0.2 tok/sは実験用としてはよいが、インタラクティブに使うには不十分だ
たいていの場合、うまく量子化された8Bや13Bモデルのほうが、より良いレイテンシ-品質のバランスを提供する
本当に興味深い実験だ。自分も先にこういうことを試しておくべきだった
PCIeの理論帯域幅に対して、実際の**スループット(throughput)**がどのくらいなのか気になる。これがレイテンシの問題なのか、帯域幅の問題なのか知りたい
すごいハックではあるが、70Bモデルで0.5 tok/sというのは、同じカードで7Bモデルが30+ tok/s出るのと比べると遅い
NVIDIAの研究によれば、10B以下のモデルでもエージェント作業の40〜70%を処理でき、品質差も急速に縮まっている
この分野は今後も実験する価値が大きい
長期的にはモデル最適化、つまりモデルの一部を省略しても性能に影響しない部分を見つける研究が鍵になる気がする。結局モデルも一種の非可逆圧縮(lossy compression)構造だからだ。こうした方向性はAIの民主化にも役立つ
本当に素晴らしいプロジェクトだ。こういうアイデアを思いつくには、どんなシステム/ハードウェアの背景知識が必要なのか気になる
自分はハードウェアがかなり抽象化された環境で働いているので、こういうアプローチを考えるのが難しい。単なる創造性だけでなく、システムレベルの理解が必要そうだ
PS2でLLMを動かそうとしてRAM 32MB、VRAM 4MBの制約にぶつかり、レイヤーストリーミング方式を考案した。PS2はVRAMが32ビットアドレスを直接処理できたので非常に高速で、それをPCでも再現しようとした
自分も似たことを試している。VRAMの半分以下で1Tモデルを動かす実験中だ
SGLangのルーティングレイヤーを修正して、Gen5 NVMeからGPUメモリへJIT予測ベースのexpert swapを実装できそうだ。NVIDIA DynamoとNIXLプリミティブを活用している
すでに試した人がいるのか気になる
素晴らしいプロジェクトだ。一般向けGPUでのDKMSパッチ手順をもう少し詳しく知りたい。自分も試してみたい
関連リンク: RTX4090 P2P Unlock, vGPU Unlock