大模型RAG技术:从入门到实践
使用PEFT库进行QLORA模型的高效微调
使用PEFT库进行QLORA模型的高效微调
量化低秩适配器(QLORA)作为LoRA的扩展版本,通过引入量化技术来提高参数效率。QLORA的核心是在Transformer架构的每一层中注入可调整的低秩矩阵,充当“适配器”作用。本文将详细探讨如何利用PEFT库对ChatGLM3-6B模型进行QLORA高效微调。
目录
- QLORA微调ChatGLM3-6B模型
1.1 安装相关库
1.2 使用ChatGLM3-6B
1.3 模型GPU显存占用
1.4 准备数据集
1.5 加载数据集
1.6 数据处理
1.7 数据集处理
1.8 加载量化模型-4bit
1.9 预处理量化模型
1.10 配置LoRA适配器
1.11 训练超参数配置
1.12 开始训练
1.13 保存LoRA模型
1.14 模型推理
1.15 合并模型
1.16 使用微调后的模型 - 迁移学习
2.1 LLM训练的两个阶段
2.2 大模型微调 - 使用PEFT库中的QLORA
- 结论
1. QLORA微调ChatGLM3-6B模型
1.1 安装相关库
在开始微调之前,首先需安装必要的Python库。这些库包括datasets
、pandas
、transformers
、peft
、accelerate
、bitsandbytes
、autoawq
和optimum
。它们为数据处理、模型加载、量化处理等提供了强大的支持。
pip install datasets==2.17.0 pandas transformers==4.37.2 peft==0.8.0 accelerate==0.27.0 bitsandbytes autoawq optimum
1.2 使用ChatGLM3-6B
我们将使用ChatGLM3-6B作为基础模型。通过加载预训练模型,我们可以直接进行对话生成。
from transformers import AutoTokenizer, AutoModel
model_id = "/root/work/chatglm3-6b"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModel.from_pretrained(model_id, trust_remote_code=True, device='cuda')
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=history)
print(response)
1.3 模型GPU显存占用
启动模型后,我们需要评估其显存占用情况。默认情况下,模型以半精度(float16)加载,其权重需要大约13GB显存。
memory_bytes = model.get_memory_footprint()
memory_gb = memory_bytes / (1024 ** 3) # 转换为GB
print(f"{memory_gb :.2f}GB")
1.4 准备数据集
数据集的准备是微调的关键步骤。我们需要构建一个指令集来训练模型,使其具备理解并遵循用户指令的能力。
[
{
"instruction": "用户指令(必填)",
"input": "用户输入(选填)",
"output": "模型回答(必填)",
}
]
1.5 加载数据集
我们使用datasets
库来加载处理好的训练数据集。
from datasets import load_dataset # 导入 load_dataset 函数
dataset = load_dataset("json", data_files="./train_data.json")
print(dataset) # 打印加载的数据集对象
1.6 数据处理
在数据处理阶段,我们需要将原始文本数据编码为模型可读的格式。这涉及将输入文本编码为input_ids
,将输出文本编码为labels
。
from transformers import AutoTokenizer # 导入 AutoTokenizer 类
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
1.7 数据集处理
我们定义一个数据收集器,用于处理和填充批量数据。可以使用transformers
中的DataCollatorForSeq2Seq
数据收集器,或自定义实现一个。
from transformers import DataCollatorForSeq2Seq
data_collator = DataCollatorForSeq2Seq(
tokenizer,
model=model,
label_pad_token_id=-100,
pad_to_multiple_of=None,
padding=True
)
2. 迁移学习
迁移学习是一种机器学习方法,利用已在一个任务上学到的知识,来提高另一个相关任务的学习效果。
2.1 LLM训练的两个阶段
- 预训练阶段:在大量无标签数据上训练,学习语言的统计规律。
- 微调阶段:在特定任务的数据上进行进一步训练,对权重进行微调以适应特定任务。
2.2 大模型微调
大模型微调指的是通过输入特定领域的数据集,让模型学习该领域的知识,从而更好地完成特定领域的任务。
3. 使用PEFT库中的QLORA
PEFT库中的QLORA为模型微调提供了高效的工具。通过结合量化和低秩适配器技术,QLORA显著减少了存储和计算资源的使用。
4. 结论
本文详细介绍了如何使用PEFT库对ChatGLM3-6B模型进行QLORA微调的全过程。通过结合量化技术和低秩矩阵,我们不仅提高了参数效率,还有效降低了显存占用。希望本文能为您在大模型微调中提供有价值的参考。
FAQ
-
问:什么是QLORA?
- 答:QLORA是LoRA的扩展版本,通过引入量化技术来提高参数效率。
-
问:QLORA的核心思想是什么?
- 答:在Transformer架构的每一层中注入可调整的低秩矩阵,充当“适配器”作用。
-
问:如何评估模型的GPU显存占用?
- 答:可以使用
model.get_memory_footprint()
方法来获取显存占用情况。
- 答:可以使用
-
问:迁移学习的核心思想是什么?
- 答:利用在一个任务上学到的知识,来帮助提高另一个相关任务的学习效果。
-
问:PEFT库如何帮助进行QLORA微调?
- 答:PEFT库提供了接口和工具,帮助轻松实现量化和低秩适配器的结合。