(rontolisp) docs
← rontolisp パッケージの関数

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 分岐はどこでもコンパイルでき、到達したときだけ拒否されます。