Présentation

LittleBit propose une compression des grands modèles de langage (LLM) dans le régime sub‑1‑bit, c’est‑à‑dire entre 1.0 et 0.1 bits par poids. La technique factorise chaque matrice dense en deux facteurs de rang faible, binarise ces facteurs et restaure l’information d’amplitude grâce à des échelles apprises. Cette chaîne permet d’atteindre 0.1 bits‑per‑weight tout en conservant l’architecture originale du modèle lors de l’inférence.

Méthode de compression

Le pipeline débute par une décomposition en valeurs singulières (SVD) des poids, générant deux matrices de rang réduit. Ces matrices sont ensuite quantifiées à l’aide d’une fonction SmoothSign, qui transforme les valeurs continues en bits binaires (‑1/1). Un jeu de paramètres scalaires, appris pendant la phase d’entraînement, réinjecte la magnitude perdue lors de la binarisation. Le processus est compatible avec le Quantization‑Aware Training (QAT) et accepte une factorisation résiduelle optionnelle, ce qui améliore la fidélité du modèle compressé.

Initialisation Joint‑ITQ dans LittleBit‑2

LittleBit‑2 introduit une étape d’Internal Latent Rotation avec Joint Iterative Quantization (Joint‑ITQ). Avant le QAT, les facteurs issus de la SVD sont tournés afin d’aligner leurs vecteurs avec les coins de l’hypercube binaire. Cette rotation minimise la distance entre la représentation continue et son équivalent binaire, réduisant ainsi l’erreur d’initialisation. L’option --use_itq active ce mode sans ajouter de coût d’inférence : le modèle déployé reste identique à celui produit par LittleBit.

Implémentation et résultats

Le dépôt supporte les architectures OPT, Llama (1‑3), Phi‑4, Qwen2.5, Qwen3, Gemma 2/3. L’environnement recommandé est Python 3.12, CUDA 12.4.1, PyTorch 2.8.0+cu124 et transformers==4.51.* pour garantir la reproductibilité. Exemple d’entraînement :

CUDA_VISIBLE_DEVICES=0 python -m main \
  --model_id meta-llama/Llama-2-7b-hf \
  --dataset c4_wiki \
  --save_dir ./outputs/Llama-2-7b-LittleBit-2 \
  --num_train_epochs 5.0 \
  --per_device_train_batch_size 4 \
  --lr 4e-05 \
  --warmup_ratio 0.02 \
  --quant_func SmoothSign \
  --quant_mod LittleBitLinear \
  --residual True \
  --eff_bit 1.0 \
  --kv_factor 1.0 \
  --min_split_dim 8 \
  --l2l_loss_scale 10.0 \
  --use_itq True

L’évaluation s’effectue sur des jeux de perplexité (wikitext2, c4) et des tâches zero‑shot (boolq, piqa, hellaswag, winogrande, arc_easy, arc_challenge, openbookqa). Exemple de script :

CUDA_VISIBLE_DEVICES=0 python eval.py \
  --model_id ./outputs/Llama-2-7b-LittleBit-2 \
  --seqlen 2048 \
  --ppl_task wikitext2,c4 \
  --zeroshot_task boolq,piqa,hellaswag,winogrande,arc_easy,arc_challenge,openbookqa

Les expériences publiées montrent que le modèle compressé à 0.1 bits‑per‑weight conserve des scores de perplexité proches de la version pleine précision, tout en réduisant la consommation mémoire d’un facteur supérieur à 10. LittleBit‑2 améliore ces métriques de 2‑3 % grâce à l’alignement latent, sans pénalité d’inférence.