这目录
一、前言
BitFit微调
,全称是 bias-term fine-tuning
,其高效微调只去微调带有 bias
的参数,其余参数全部固定 。
对于中小型训练数据,在预训练的BERT
模型上应用BitFit
与微调整个模型具有竞争力(有时甚至更好)。对于较大的数据,该方法与其他稀疏微调方法相比具有竞争力。
BitFit具有三个关键属性:
- 匹配完全微调模型的结果。
- 使任务能够到达流中,这样就不需要同时访问所有数据集。
- 仅对模型参数的一小部分进行微调。
二、BitFit实战
模型——Qwen/Qwen2.5-0.5B-Instruct
数据集——lyuricky/alpaca_data_zh_51k
这里的分词模型和预训练模型是同一个模型
依赖:
pip install transformers
pip install datasets
导包
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM, DataCollatorForSeq2Seq, TrainingArguments, Trainer
1、模型与数据集准备
我们先把数据集和模型下载到本地
# 下载数据集
dataset_file = load_dataset("lyuricky/alpaca_data_zh_51k", split="train", cache_dir="./data/alpaca_data")
# 下载分词模型
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct")
# Save the tokenizer to a local directory
tokenizer.save_pretrained("./local_tokenizer_model")
#下载与训练模型
model = AutoModelForCausalLM.from_pretrained(
pretrained_model_name_or_path="Qwen/Qwen2.5-0.5B-Instruct",
torch_dtype="auto",
low_cpu_mem_usage=True,
cache_dir="./local_model_cache" # 指定本地缓存目录
)
2、加载分词模型处理数据
#加载分词模型
tokenizer_model = AutoTokenizer.from_pretrained("../local_tokenizer_model")
# 加载数据集
ds = load_dataset("../data/alpaca_data", split="train[:10%]")
print(ds[0])
# 处理数据
"""
并将其转换成适合用于模型训练的输入格式。具体来说,
它将原始的输入数据(如用户指令、用户输入、助手输出等)转换为模型所需的格式,
包括 input_ids、attention_mask 和 labels。
"""
def process_func(example, tokenizer=tokenizer_model):
MAX_LENGTH = 256
input_ids, attention_mask, labels = [], [], []
instruction = tokenizer("\n".join(["Human: " + example["instruction"], example["input"]]).strip() +