Devotd Github
新着推論・サービング

marco-lu2508/fllm — Q2_K·Q3_K·IQ4_XS カーネルへのプリフェッチ追加

Rust だけで書かれたローカル LLM 推論エンジン fLLM が、Q2_K·Q3_K·IQ4_XS 量子化フォーマット共通のカーネルにメモリプリフェッチを追加した。

リポジトリ情報marco-lu2508/fllm ↗

Rust だけで書かれたローカル LLM 推論エンジン fLLM が、Q2_K·Q3_K·IQ4_XS 量子化フォーマット共通のカーネルにメモリプリフェッチを追加した。

GitHub の説明: Local LLM inference engine in pure Rust: GGUF, OpenAI/Anthropic/Ollama-compatible API, CUDA (incl. NVFP4), Metal, Vulkan, CPU

スター
★ 0
フォーク
0
言語
Rust
ライセンス
Apache-2.0
原文を見る ↗GitHub で見る ↗

marco-lu2508/fllm は Rust のみで書かれたローカル LLM 推論エンジンである。GGUF モデルを読み込み、OpenAI・Anthropic・Ollama 互換 API を提供する。2026-11-07 のコミット fbf33f5 は、重みを 2〜4 ビット程度にまとめて圧縮保存する量子化フォーマット Q2_K、Q3_K、IQ4_XS が共通で使うカーネル (kernel_extra) にメモリプリフェッチ (prefetch) を追加した。整数演算はそのままで、ブロックをメモリから読み込むタイミングだけが変わる。

このプリフェッチは Q4_K〜Q6_K のカーネルがすでに使っていた方式である。各行 (row) の 4 ブロック分を先にリクエストするが、共有カーネルではそれをハードウェアプリフェッチャに任せていた。行ごとに別々に流れる数ブロックしかない短いメモリストリームであるため、ハードウェアプリフェッチャが先読みを立ち上げられなかったからである。今回は各ブロックの前に同じリクエストを入れ、単一行デコードだけでなく検証パス (verification pass) に使われるカーネルにも適用した。コミットメッセージに記録された測定は、320MB の重み、1 行、リリースビルド、2 スレッドの条件のもとで、2 つのビルドを交互に 3 回ずつ実行した中央値である。Q2_K は 28.3ms から 19.1ms へ 32% 減、IQ4_XS は 15.5ms から 13.4ms へ 13% 減った。Q3_K は 19.1ms から 18.9ms へ変化がなく(実行間のばらつきは 18.3〜21.4ms)、対照群の Q4_K は 10.8ms のまま、Q6_K は 11.0ms から 11.6ms だった。

ただし、この数値はカーネル単位のものである。実際のモデルが無かったため、Q2_K と IQ4_XS はランダムな重みでカーネルのみを測定し、端から端までの性能は確認していない。値が正確に保たれるかを見る cpu_quantized、projection_kernels、the_exact_choice、noise_of_a_verification_pass のテストはすべて通過した。Q3_K が減らなかった理由は、律速がメモリ要求ではなく 3 ビット値と 6 ビットスケールのデコードにあり、そちらが次の課題として残っている。プリフェッチ方式は Q2_K と IQ4_XS で利得が確認された方式だが、モデル全体で同じ幅度が得られるかは判断が早い。