外观
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 比特量化格式,在保持精度的同时大幅减少显存占用。