rontolisp:quantized-rows
(rontolisp:quantized-rows matrix rows)
量子化行列(rontolisp:quantize)から、行インデックスの
リスト rows が指す行を集めて、同じフォーマットの新しい階数 2 の行列を作ります。
結果の第 i 行は matrix の第 (nth i rows) 行です。Q8_0 行列の 1 行はちょうど
34 バイトのブロック cols / 32 個ぶんなので、この収集はブロックをそのまま移動
します。1 行につき 1 回の配列コピーで、逆量子化も再量子化もせず、結果のバイト列は
元のバイト列そのものです。この型にとっての subseq と
linalg:take-rows を兼ねます。連続した範囲は連番の
インデックスで表します。
元の行列は階数 1(1 行の行列)でも構いません。結果は常に階数 2 なので、
(rontolisp:quantized-rows m '()) は行が 0 個の行列です。範囲外のインデックスは
エラーになり、整数のリスト以外もエラーになります。
これが、量子化したまま重み行列を分割する方法です。たとえばヘッドごとに
query | gate が交互に並ぶ q_proj の分割に使います。逆量子化してから量子化し直す
方法も Q8_0 なら厳密ですが、WASM 向けにもコンパイルされるプログラムはその 2 つを
名前として書けません。
インタプリタと JVM のみ。WASM バックエンドでは呼び出し時にエラーを通知するので、 リーダの Q8_0 分岐はどこでもコンパイルでき、到達したときだけ拒否されます。