Skip to content

bitsandbytes:轻量级CUDA量化与8比特优化器

内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。

1. 什么是 bitsandbytes?

bitsandbytes 是自定义 CUDA 函数的轻量级包装器,特别是 8 比特优化器、矩阵乘法和量化函数。主要特征如下:

特性说明
混合精度分解的 8 比特矩阵乘法支持 LLM.int8() 推理
8 比特优化器Adam、AdamW、RMSProp、LARS、LAMB、Lion(节省 75% 内存)
稳定的嵌入层通过更好的初始化和标准化提高稳定性
8 比特量化分位数、线性和动态量化
快速的分位数估计比其他算法快 100 倍

2. 如何才能使用 bitsandbytes?

量化模型的唯一条件是包含 torch.nn.Linear 层,因此量化对于任何模态都可以实现开箱即用。用户可以直接加载诸如 Whisper、ViT、Blip2 之类的 8 比特或 4 比特(FP4/NF4)模型。

提示:只需模型中包含 nn.Linear 层即可进行量化,适用于文本、视觉、多模态等任意模态。

3. 如何使用 bitsandbytes?

3.1 使用 NF4 量化加载 4 比特模型

python
import torch
from transformers import BitsAndBytesConfig

nf4_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_use_double_quant=True,
    bnb_4bit_compute_dtype=torch.bfloat16
)

model_nf4 = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=nf4_config
)

3.2 使用 FP4 量化加载 4 比特模型

python
import torch
from transformers import BitsAndBytesConfig

quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.bfloat16
)

3.3 关键参数说明

参数说明
load_in_4bit启用 4 比特量化加载
bnb_4bit_quant_type量化类型,可选 "nf4""fp4"
bnb_4bit_use_double_quant是否启用双重量化,进一步压缩
bnb_4bit_compute_dtype计算时的数据类型,推荐 torch.bfloat16

注意:NF4(Normal Float 4)是 bitsandbytes 提出的新型 4 比特量化格式,在保持精度的同时大幅减少显存占用。