Bitsandbytes 文档

集成

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验

开始使用

集成

bitsandbytes 广泛集成到 Hugging Face 和更广泛的 PyTorch 生态系统中的许多库中。本指南简要概述了这些集成以及如何将 bitsandbytes 与它们一起使用。有关更多详细信息,您应参考每个库的链接文档。

Transformers

在 bitsandbytes Transformers 集成指南中了解更多信息。

使用 Transformers,加载任何 4 位或 8 位模型并动态对其进行量化非常容易。要配置量化参数,请在BitsAndBytesConfig类中指定它们。

例如,要将模型加载并量化为 4 位,并使用 bfloat16 数据类型进行计算

如果您的硬件支持,bfloat16 是理想的compute_dtype。虽然默认的compute_dtype,float32,确保向后兼容性(由于广泛的硬件支持)和数值稳定性,但它很大并且会减慢计算速度。相反,float16 更小且更快,但会导致数值不稳定。bfloat16 结合了这两者的优点;它提供了 float32 的数值稳定性和 16 位数据类型的减少内存占用和速度。检查您的硬件是否支持 bfloat16,并使用BitsAndBytesConfig中的bnb_4bit_compute_dtype参数进行配置!

from transformers import AutoModelForCausalLM, BitsAndBytesConfig

quantization_config = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.bfloat16)
model_4bit = AutoModelForCausalLM.from_pretrained(
    "bigscience/bloom-1b7",
    device_map=device_map,
    quantization_config=quantization_config,
)

8 位优化器

您可以通过将任何 8 位或分页优化器传递给初始化时的Trainer类来与 Transformers 一起使用它们。所有 bitsandbytes 优化器都支持在TrainingArgumentsoptim参数中传递正确的字符串。例如,要加载PagedAdamW32bit优化器

from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(
    ...,
    optim="paged_adamw_32bit",
)
trainer = Trainer(model, training_args, ...)
trainer.train()

PEFT

在 bitsandbytes PEFT 集成指南中了解更多信息。

PEFT 基于 bitsandbytes Transformers 集成,并通过几个步骤对其进行了扩展以进行训练。让我们准备上一节中用于训练的 4 位模型。

调用~peft.prepare_model_for_kbit_training方法来准备模型进行训练。这仅适用于 Transformers 模型!

from peft import prepare_model_for_kbit_training

model_4bit = prepare_model_for_kbit_training(model_4bit)

设置一个~peft.LoraConfig来使用 QLoRA

from peft import LoraConfig

config = LoraConfig(
    r=16,
    lora_alpha=8,
    target_modules="all-linear",
    lora_dropout=0.05
    bias="none",
    task_type="CAUSAL_LM"
)

现在在您的模型和配置上调用~peft.get_peft_model函数以创建一个可训练的PeftModel

from peft import get_peft_model

model = get_peft_model(model_4bit, config)

Accelerate

在 bitsandbytes Accelerate 集成指南中了解更多信息。

bitsandbytes 也易于从 Accelerate 中使用,您可以通过传递具有所需设置的BnbQuantizationConfig来量化任何 PyTorch 模型,然后调用load_and_quantize_model函数对其进行量化。

from accelerate import init_empty_weights
from accelerate.utils import BnbQuantizationConfig, load_and_quantize_model
from mingpt.model import GPT

model_config = GPT.get_default_config()
model_config.model_type = 'gpt2-xl'
model_config.vocab_size = 50257
model_config.block_size = 1024

with init_empty_weights():
    empty_model = GPT(model_config)

bnb_quantization_config = BnbQuantizationConfig(
  load_in_4bit=True,
  bnb_4bit_compute_dtype=torch.bfloat16,  # optional
  bnb_4bit_use_double_quant=True,         # optional
  bnb_4bit_quant_type="nf4"               # optional
)

quantized_model = load_and_quantize_model(
  empty_model,
  weights_location=weights_location,
  bnb_quantization_config=bnb_quantization_config,
  device_map = "auto"
)

PyTorch Lightning 和 Lightning Fabric

bitsandbytes 可从以下途径获取

  • PyTorch Lightning,一个面向专业 AI 研究人员和机器学习工程师的深度学习框架,它提供了最大的灵活性和可扩展性,同时保证了性能。
  • Lightning Fabric,一种快速且轻量级的方式,用于在不增加样板代码的情况下扩展 PyTorch 模型。

在 bitsandbytes PyTorch Lightning 集成 指南 中了解更多信息。

Lit-GPT

bitsandbytes 集成到 Lit-GPT 中,后者是一个可修改的、最先进的开源大型语言模型实现。Lit-GPT 基于 Lightning Fabric,可用于训练、微调和推理期间的量化。

在 bitsandbytes Lit-GPT 集成 指南 中了解更多信息。

博文

要详细了解 bitsandbytes 的一些集成,请查看以下博文

< > GitHub 更新