量化模型配置信息 quantization-BitsAndBytesConfig
import bitsandbytes as bnb
from transformers import BitsAndBytesConfig
from transformers import GenerationConfig
from peft import (
prepare_model_for_int8_training,
LoraConfig,
get_peft_model,
get_peft_model_state_dict,
prepare_model_for_kbit_training
)
from peft import PeftModel
from transformers import AutoTokenizer, AutoConfig, AutoModelForCausalLM,
在使用PEFT参数高效微调库时有许多config信息,现在做一个梳理:
- bitsandbytes:bitsandbytes 是一个集成了 Transformers 的量化库。通过此集成,您可以将模型量化为 8 位或 4 位,并通过配置 BitsAndBytesConfig 类来启用许多其他选项。
- BitsAndBytesConfig 用于设置你想要量化的模型的配置信息
import torch
from transformers import BitsAndBytesConfig
config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype=torch.bfloat16,
)
- 在配置好 BitsAndBytesConfig后,将此配置传给 from_pretrained 方法,将此配置应用在模型上
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("mistralai/Mistral-7B-v0.1", quantization_config=config)
- 接下来,调用 prepare_model_for_kbit_training() 函数来预处理用于训练的量化模型。
from peft import prepare_model_for_kbit_training
model = prepare_model_for_kbit_training(model)
- 如果想使用Lora来微调模型的话,先做Lora的配置
from peft import LoraConfig
config = LoraConfig(
r=16,
lora_alpha=8,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
- 最后使用Lora的get_peft_model方法,加载集成了Lora的模型
from peft import get_peft_model
model = get_peft_model(model, config)