Granite-3.3-2b-instruct, int4 (Hessian-aware rounding, one-sided Gram)

int4 weight-quantized ibm-granite/granite-3.3-2b-instruct in lalamo format, runs in lalamo and on-device in uzu.

Every linear is rounded against its own input activation Gram (X^T X), i.e. GPTQ / LDLQ-grade curvature, through lalamo's yaqa_round_blockwise.

This is not true YAQA. The preconditioner is an activation Gram, not a gradient Fisher, and only the input block is used (the output block is identity). The name matters because the recipe is the point: everything below is reproducible from the base model.

Results

MMLU-Pro, canonical TIGER-Lab 5-shot CoT, greedy, paired, full set n=12032, both rows generated through the same engine (lalamo reply_many):

checkpoint MMLU-Pro Δ vs bf16
bf16 (reference) 33.55%
int4, one-sided Gram (this checkpoint) 31.24% −2.31 pt
int4, quant-aware distillation (for contrast) 29.38% −4.17 pt

wikitext held-out PPL (1024 tokens): bf16 5.162 · this 5.457 · int4 min/max PTQ 5.396 · int4 QAD 4.860.

Note the PPL/MMLU inversion: this checkpoint's LM perplexity is slightly worse than naive min/max int4, yet its downstream accuracy is much better (on a paired n=1000 subset: this 33.3 vs min/max PTQ 30.0, bf16 34.0). Perplexity is a poor selector between int4 rounding methods here; the reasoning benchmark separates them.

Recipe

field value
method int4 weight-only, Hessian-aware rounding (LDL, GPTQ-grade)
bits / group size 4 / 64, asymmetric, layout OUTPUT_INPUT
preconditioner per-linear input activation Gram X^T X, one-sided (output block = identity). Not a Fisher.
damping 0.01 * mean(diag(G)) * I
quantized layers all 160 decoder linears (qkv, out, gate/up, down); embeddings and lm_head left unquantized (F32)
calibration wikitext-2-raw-v1 (train), 12288 tokens, accumulated over 24 chunks × 512 tokens
calibration rank full-rank by construction: 12288 calib tokens > 8192, the largest in-dim (down_projection)
RHT / incoherence processing none
base model ibm-granite/granite-3.3-2b-instruct @ 707f574c62054322f6b5b04b6d075f0a8f05e0f0
lalamo 124849b (pkg 0.13.1)

Reproduce

python make_int_checkpoint.py \
  models/granite-3.3-2b-instruct models/granite-3.3-2b-instruct-int4-gram \
  --yaqa --calib-file calib_wikitext.txt --calib-tokens 12288 --chunk-len 512 \
  --bits 4 --group-size 64

make_int_checkpoint.py is a thin driver over lalamo.compressed: it accumulates the per-linear input Gram over the calibration chunks and passes it as the preconditioner to IntSpec.compress. down/out inputs are recovered by re-running each layer's own mlp/mixer with the trailing projection swapped for an identity, so no core lalamo changes are needed.

Caveats

  • Calibration rank is load-bearing. Below full rank (calib tokens < in-dim) the Gram is rank-deficient, rounding in its null space is unconstrained, and the checkpoint collapses (we measured PPL 57487 at 242 calib tokens). Keep calibration tokens above 8192 for this model.
  • Evaluated with the public TIGER-Lab MMLU-Pro protocol, not Mirai's internal reasoning-enabled harness, so the delta vs bf16 is the transferable number, not the absolute score.
Downloads last month
8
Safetensors
Model size
1B params
Tensor type
F32
·
U8
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for mirai-community/granite-3.3-2b-instruct-int4-gram

Quantized
(51)
this model