LLM.int8() / bitsandbytes int8 (vector-wise with 16-bit outliers)
Fields
quantization/bitsandbytes-int8Notes
GROUP SIZE LEFT NULL 2026-10-04 and this is a genuine per-vector decomposition, not a missing value: LLM.int8() splits each matrix column into outlier columns (magnitude above a 6.0 threshold, kept in FP16) and non-outlier columns quantized per VECTOR at INT8. The unit is the column, which is not a group size - the whole tensor can have a different outlier count in every column. Do not fill 64 here: that is the NF4 blocksize from the 4-bit path and is a different scheme. The important structural point: LLM.int8() is NOT W8A8. It is vector-wise 8-bit weights AND 8-bit activations, but the systematic outlier channels are split out into a second fp16 matrix multiply, so there is no true int8 x int8 tensor-core op running for the whole layer. That decomposition is what makes it work at all; it also makes it slow - it was a memory-saving technique, not a speed technique. Contrast with SmoothQuant, which genuinely reaches hardware W8A8 by moving difficulty into the weights upfront. Group size null: constants are per vector, not per fixed-size weight group. UPGRADE (2026-10-03): activation_scheme and quality_delta now cite the primary paper (arXiv 2208.07339, read directly) rather than relying on a secondary description. The precise wording matters and is now correct: LLM.int8() isolates outlier FEATURE DIMENSIONS into a 16-bit matmul while >99.9% of values remain 8-bit - that is the mixed-precision decomposition that the method is named for. Why it is not a true int8xint8 path: the layer's arithmetic is split between an int8 GEMM and an fp16 GEMM, so no single int8 tensor-core instruction covers the layer. That is the same trap as W4A4-without-hardware: low precision in the DATA does not imply low precision in the ARITHMETIC. The family resemblance worth keeping explicit - LLM.int8()'s mixed-precision decomposition, Atom's mixed-precision block-outliers, SqueezeLLM's dense-and-sparse split, and KVQuant's per-vector dense-and-sparse are four papers independently arriving at 'keep the outliers in higher precision'. QuaRot is the counterargument to that family: rotate them away instead, and retain nothing. NATIVE_SUPPORT CLASSIFIED 2026-10-04: this field is still [] and that is CORRECT, but the empty list used to be ambiguous between three different states and now is not. Reason class on this record: WEIGHT-ONLY, SO STRUCTURALLY ABSENT. The bits field keeps activations in FP16, so execution is dequantize-to-FP16 then an FP16 tensor-core GEMM; there is no INT4-x-INT4 (or sub-8-bit x sub-8-bit) silicon instruction for it to target. This is a statement about the arithmetic, not an absence of investigation. Consequence for a reader: nothing further to verify - no silicon path is possible for this format as defined. The full statement of the three-way distinction, and the worked list of all 72 empty records by class, is in gotcha quant-native-support-empty-means-three-different-things. Rule of thumb for this field everywhere in the repo: if the bits field carries an 'a16', or the scheme is KV-cache-only or a llama.cpp integer storage type, an empty native_support is a DEFINITION and needs no verification; only a W4A4/W8A8/sub-8-bit format with research kernels can have an empty list that is a real finding.