bitsandbytes 是一个面向大语言模型(LLM)的量化工具,主要用途是在显存有限时降低模型的内存占用。按资料说明,8 位量化可减少约 50% 内存,4 位量化可减少约 75%,精度损失在 1% 以内(资料另提到 8 位约 <0.5%、4 位约 1–2%)。
安装方式: pip install bitsandbytes transformers accelerate 如涉及微调,还需安装 peft 和 datasets。
主要能力:
- 8 位量化加载:通过 BitsAndBytesConfig(load_in_8bit=True) 配合 AutoModelForCausalLM.from_pretrained 与 device_map="auto" 加载模型。资料示例中 Llama-2-7b 由 14GB 降至 7GB。
- 4 位量化加载:使用 load_in_4bit=True,可配置 bnb_4bit_compute_dtype=torch.float16、bnb_4bit_quant_type="nf4"、bnb_4bit_use_double_quant=True。资料示例中 Llama-2-7b 由 14GB 降至 3.5GB。
- 显存估算与选型:提供 FP16/INT8/INT4 的显存估算公式,以及按 GPU 显存与模型规模选择 4 位或 8 位的建议表。
- QLoRA 微调:先用 4 位量化加载基础模型,再用 prepare_model_for_kbit_training 和 PEFT 的 LoraConfig 添加 LoRA 适配器,最后用 Transformers Trainer 训练,仅保存约 20MB 的 LoRA 适配器。
- 8 位优化器:可用 optim="paged_adamw_8bit" 或 bnb.optim.AdamW8bit 降低优化器状态内存约 75%。
典型使用流程:估算显存需求 → 选择 4 位或 8 位 → 配置 BitsAndBytesConfig → 加载模型并用示例推理验证,同时打印 torch.cuda.memory_allocated() 检查显存。
适用场景:GPU 显存有限、需要装入更大模型、仅做推理、使用 HuggingFace Transformers、可接受 0–2% 精度下降、在消费级 GPU 上做 QLoRA 微调。
资料建议的替代方案:生产环境服务可用 GPTQ/AWQ(推理更快);CPU 推理可用 GGUF(llama.cpp);H100 可用 FP8;精度关键且显存不受限时用全精度。
硬件要求:NVIDIA GPU,计算能力 7.0+(Turing、Ampere、Hopper);CUDA 11.1+(建议 12.0+);PyTorch 2.0+。主要支持 NVIDIA GPU,AMD ROCm 与 Intel GPU 为实验性支持。
限制与常见问题:可能出现 CUDA 加载错误、加载缓慢、精度低于预期、4 位仍 OOM。资料给出对应做法:安装匹配 CUDA 版本、用 max_memory 与 CPU/磁盘 offload、改用 8 位或 NF4 加双重量化、启用 offload_folder 与 offload_state_dict。更详细的 QLoRA、量化格式与内存优化内容见资料提及的 references 文档。