Hugging Face 4-bit Quantization and QLoRA Release
TL;DR
Hugging Face released integration of 4‑bit quantization (bitsandbytes) and the QLoRA fine‑tuning technique, allowing most Transformer models to run and be adapted on a single consumer‑grade GPU with minimal memory overhead.
4‑bit Quantization Overview
- 4‑bit quantization compresses model weights to 4 bits while keeping computation in higher precision (typically bfloat16 or float16).
- The
bitsandbyteslibrary provides two 4‑bit formats: NF4 (Normalized Float‑4, the default) and FP4 (raw 4‑bit floating point). NF4 is recommended for better accuracy. - Double quantization (
bnb_4bit_use_double_quant=True) adds a second quantization step, saving ~0.4 bits per parameter. - Quantized weights are stored in 4‑bit, but matrix multiplications are performed in 16‑ or 32‑bit, so no special GPU hardware is required—only CUDA ≥ 11.2.
QLoRA: Efficient Fine‑Tuning of Quantized Models
- QLoRA freezes a 4‑bit quantized pretrained model and injects Low‑Rank Adapters (LoRA) as the only trainable parameters.
- During training, gradients flow through the frozen 4‑bit model into the LoRA layers, which are updated in 16‑bit bfloat16.
- Memory usage is reduced enough to fine‑tune a 65 B‑parameter model on a single 48 GB GPU while matching full 16‑bit performance.
- The paper introduces NormalFloat‑4 (NF4), double quantization, and paged optimizers to keep memory spikes low.
- The resulting Guanaco model family reaches 99.3 % of ChatGPT’s Vicuna benchmark score after 24 h of fine‑tuning on one GPU.
Supported Models and Modalities
- Any model that can be loaded with
accelerate’sdevice_mapargument can be quantized in 4‑bit. - Supported architectures (as of the release) include LLaMA, OPT, GPT‑Neo, GPT‑NeoX, BLOOM, CodeGen, Vision models (e.g., BLIP‑2, ViT), and many others (full list in the blog post).
- The approach works for text, vision, and multimodal models.
Quick Start Guide
pip install -U bitsandbytes
pip install -U git+https://github.com/huggingface/transformers.git
pip install -U git+https://github.com/huggingface/peft.git
pip install -U git+https://github.com/huggingface/accelerate.git
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import torch
config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4", # NF4 quantization
bnb_4bit_use_double_quant=True, # nested quantization
bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(
"facebook/opt-350m",
quantization_config=config,
device_map="auto"
)
- Use
load_in_4bit=True(or theBitsAndBytesConfigshown) to load a model. - Avoid manual device placement after loading; the
device_maphandles it. - Adjust
bnb_4bit_compute_dtypefor faster training (e.g.,torch.bfloat16).
Training with QLoRA
- Install the PEFT library and use LoRA adapters on top of the frozen 4‑bit model.
- Example notebooks provided by Hugging Face demonstrate fine‑tuning GPT‑Neo‑X (20 B) on a free Google Colab instance.
- The
SFTTrainerfrom the TRL library was used for benchmarking; scripts are available in the linked GitHub gist.
Benchmarks and Memory Impact
| Model | FP16 Size | GPU (VRAM) | Quantization | Compute Dtype | Gradient Checkpointing | Seq Len | OOM? |
|---|---|---|---|---|---|---|---|
| LLaMA‑7B | 14 GB | 1 × T4 (16 GB) | 4‑bit NF4 + bfloat16 | bfloat16 | No | 512 | ✅ No OOM |
| LLaMA‑7B | 14 GB | 1 × T4 (16 GB) | 4‑bit NF4 + bfloat16 | bfloat16 | Yes | 1024 | ✅ No OOM |
| LLaMA‑13B | 27 GB | 1 × T4 (16 GB) | 4‑bit NF4 + fp16 | fp16 | Yes | 512 | ✅ No OOM |
| LLaMA‑13B | 27 GB | 1 × T4 (16 GB) | 4‑bit NF4 + fp16 | fp16 | Yes + Nested Quant | 1024 | ✅ No OOM |
- The table shows that 4‑bit NF4 with double quantization and optional gradient checkpointing prevents out‑of‑memory (OOM) failures that occur with 8‑bit or FP16 baselines.
Common Questions
- Hardware requirements – Only CUDA‑compatible GPUs are needed; no CPU support for 4‑bit inference.
- Model support – Any architecture compatible with
accelerate’sdevice_mapcan be quantized. - Training – Pure 4‑bit training is not supported; fine‑tuning must use PEFT methods such as LoRA, as demonstrated in the QLoRA paper.
- Use cases – Enables RLHF pipelines where a single 4‑bit base model can host multiple adapters (reward model, policy, etc.) on modest hardware.
Resources
- Paper: QLoRA (arXiv 2305.14314)
- Inference notebook: Google Colab demo
- Fine‑tuning notebook: Google Colab fine‑tuning demo
- Code: QLoRA GitHub repo
- Playground: Try the Guanaco 33B model at the Hugging Face Space linked in the blog.
Implications
- Democratizes access to large language models by reducing hardware requirements for both inference and adapter fine‑tuning.
- Opens the door for research groups without large GPU clusters to experiment with 30‑B‑plus models.
- Provides a practical pathway for deploying powerful chatbots on consumer devices or low‑cost cloud instances.
Acknowledgements: The release credits contributions from the University of Washington team, Pedro Cuenca (review), Olivier Dehaene, and Omar Sanseviero for integration support.