BitsAndBytesConfig (Cuantizare 4-bit NF4 & 8-bit) în Hugging Face Hub & Transformers

Comprimă greutățile modelului în timp real pe 4 biți (format NormalFloat4), permițând rularea și antrenarea QLoRA a modelelor de 7B-14B pe o singură placă video obișnuită.

Sintaxă & invocare Python
import torch
from transformers import BitsAndBytesConfig, AutoModelForCausalLM

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type='nf4',
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True
)
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=bnb_config)

Descriere & Utilizare

Un model de 8 miliarde de parametri (precum Llama 3.1 8B) are nevoie de ~16 GB VRAM în format FP16, depășind capacitatea multor plăci video consumer sau a instanțelor gratuite Google Colab T4.

Biblioteca bitsandbytes integrată prin BitsAndBytesConfig permite încărcarea modelului pe 4 biți (reducând memoria necesară la doar ~5.5 GB VRAM!).

Secretul păstrării calității constă în trei opțiuni: bnb_4bit_quant_type='nf4' (NormalFloat4 – un tip de date optimizat informațional pentru distribuția gaussiană a greutăților neuronale), bnb_4bit_use_double_quant=True (cuantizează și constantele de cuantizare, economisind încă ~0.4 biți per parametru) și bnb_4bit_compute_dtype=torch.bfloat16 (face înmulțirile matriciale rapide în 16 biți).

Cum să o reții ușor

💡 Ca arhivarea unei colecții de filme 4K în format HEVC de înaltă eficiență: fișierele ocupă un sfert din spațiul de pe hard disk (4-bit), iar când apeși Play sunt dezarhivate din mers pe ecran (`compute_dtype=bfloat16`) la o calitate aproape identică.

Opțiuni și parametri tehnici

  • Interceptează încărcarea straturilor torch.nn.Linear și le înlocuiește cu straturi Linear4bit.
  • Stochează greutățile înghețate în VRAM pe 4 biți.
  • În timpul pasului de inferență (forward pass), de-cuantizează blocul curent în bfloat16 pentru calculul CUDA.

Exemple practice și cazuri de utilizare

  • Cuantizare simplă pe 8 biți (aproape zero pierdere de precizie): bnb_8bit = BitsAndBytesConfig(load_in_8bit=True)
  • Bază pentru antrenare QLoRA: model = AutoModelForCausalLM.from_pretrained('meta-llama/Llama-3.1-8B', quantization_config=bnb_config, device_map='auto')

Sfaturi de configurare & capcane

Nu uita să setezi bnb_4bit_compute_dtype=torch.bfloat16 (sau float16). Dacă îl omiți, calculele se vor face implicit în float32, iar viteza de generare va fi de 2-3 ori mai mică!

Comenzi și ghiduri înrudite