SuperAPI AI 工具集

quantizing-models-bitsandbytes

智能体与模型

查看项目

更新于 10-21 16:19

技能介绍

用途

bitsandbytes 用于对大语言模型(LLM)进行量化,将模型权重压缩为 8 位或 4 位,从而显著降低显存占用。根据资料,8 位量化可减少约 50% 内存,4 位量化可减少约 75% 内存,精度损失较小(8 位通常低于 0.5%,4 位约 1-2%)。它适用于 GPU 显存有限、需要加载更大模型,或希望以 QLoRA 方式微调大模型的场景。

主要能力

  • 8 位量化:通过 BitsAndBytesConfig(load_in_8bit=True) 加载模型,示例中 Llama 2 7B 内存从 14GB 降至 7GB。可配置 llm_int8_threshold(离群值阈值)和 llm_int8_has_fp16_weight。
  • 4 位量化:通过 BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.float16) 加载,示例中 Llama 2 7B 内存从 14GB 降至 3.5GB。支持 bnb_4bit_quant_type="nf4"(NormalFloat4,推荐)和 bnb_4bit_use_double_quant=True(嵌套量化)。
  • QLoRA 微调:在 4 位量化基座模型上添加 LoRA 适配器进行训练,使大模型可在消费级 GPU 上微调。资料示例中可训练参数约 4.2M,占总参数 6.7B 的 0.06%,保存的 LoRA 适配器约 20MB。
  • 8 位优化器:使用 8 位 Adam/AdamW 将优化器内存降低约 75%。示例中 Llama 2 7B 的标准 AdamW 优化器内存约 56GB,8 位版本约 14GB,节省约 42GB。

使用方式

安装:

pip install bitsandbytes transformers accelerate

QLoRA 微调还需安装:

pip install bitsandbytes transformers peft accelerate datasets

8 位量化加载示例:

from transformers import AutoModelForCausalLM, BitsAndBytesConfig

config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    quantization_config=config,
    device_map="auto"
)

4 位量化加载示例:

config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.float16
)
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    quantization_config=config,
    device_map="auto"
)

QLoRA 微调流程包括:配置 4 位基座模型、使用 prepare_model_for_kbit_training 准备模型、配置 LoraConfig(如 r=16、lora_alpha=32、target_modules 为 q_proj/k_proj/v_proj/o_proj 等)、通过 get_peft_model 添加适配器,再用标准 Trainer 训练。

8 位优化器可在 TrainingArguments 中设置 optim="paged_adamw_8bit",或手动使用 bnb.optim.AdamW8bit。

适用场景

  • GPU 显存有限,需要加载更大模型。
  • 使用 QLoRA 微调大模型(资料称可在单 GPU 上微调 70B)。
  • 仅做推理,希望降低 50-75% 内存。
  • 使用 HuggingFace Transformers 生态。
  • 可接受 0-2% 的精度下降。

资料还给出显存与模型规模的选择参考:8GB 显存可选 3B 模型 4 位;12GB 可选 7B 4 位;16GB 可选 7B 8 位或 4 位;24GB 可选 13B 8 位或 70B 4 位;40GB 以上可选 70B 8 位。

限制与替代方案

  • 资料建议在以下情况考虑替代方案:生产服务可用 GPTQ/AWQ(推理更快);CPU 推理可用 GGUF(llama.cpp);H100 GPU 可用 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 版本、CPU/磁盘 offload、改用 8 位或 NF4 加双重量化等)。
  • 资料强调:不要编造结果、参数或统计;未经验证不要声称训练结果;版本相关细节可能过时,应以所安装版本的官方文档为准;涉及费用、共享 GPU、个人或患者数据等操作前应先询问。

相关技能

资料列出相关技能:awq-quantization(激活感知权重量化,4 位压缩,约 3 倍加速)、gptq(4 位/3 位 GPTQ 分组量化,默认组大小 128)、hqq-quantization(无需校准数据的半二次量化)。