链载Ai

标题: 大模型微调,使用QLoRA和自定义数据集微调大模型(上) [打印本页]

作者: 链载Ai    时间: 10 小时前
标题: 大模型微调,使用QLoRA和自定义数据集微调大模型(上)


大语言模型(LLMs)对自然语言处理(NLP)的影响是非常深远的,不仅提高了任务效率,还催生出新能力,推动了模型架构和训练方法的创新。尽管如此强大,但LLMs也有局限,有时需要针对特定任务进行特别优化。

通过对LLMs进行微调来大幅提升模型的性能,同时降低训练成本,获得更贴近实际应用的上下文结果。

1 LLM微调

LLM微调就是对预训练的大型语言模型进行针对性的再训练,使其更适应特定领域的任务。这一过程能大幅提高模型的适用性,同时减少数据和计算资源的消耗。

微调的主要步骤包括:

LLM微调适用于需要精准理解和流畅表达的NLP任务,如情感分析、命名实体识别等,能充分发挥预训练模型的潜力,适应专业领域的需求。

2 微调方法

LLM主要有两种方法:

3 LoRa微调

LoRa是一种微调技术,它不改变大语言模型(LLM)的所有权重,而是通过调整两个小矩阵来近似整个权重矩阵,形成LoRa适配器。这样,原始LLM保持不变,而适配器体积小,通常只有几MB。

在实际使用中,LoRa适配器与原始LLM一起工作,多个适配器可以共享一个LLM,减少了内存需求。

4 QLoRA技术简述

QLoRA是LoRA的内存优化版,通过将适配器权重量化为4位,进一步减少内存和存储需求。虽然精度有所降低,但效果与LoRA相当。

本教程将展示如何用QLoRA在单个GPU上微调LLM,步骤如下:

4.1 准备Jupyter Notebook

这里将用Kaggle笔记本演示,你也可以使用其他Jupyter环境。Kaggle每周提供免费GPU时间,足够我们使用。打开新笔记本,设置好标题,连接到运行环境,并选择GPU P100作为加速器。

此外,用HuggingFace库来下载和训练模型,需要访问令牌,已注册用户可以在设置中获取。

4.2 安装所需库

安装以下库以进行实验:

!pipinstall-q-Ubitsandbytestransformerspeftacceleratedatasetsscipyeinopsevaluatetrlrouge_score

这些库的主要功能包括:

接下来,导入所需库:

fromdatasetsimportload_dataset
fromtransformersimport(
AutoModelForCausalLM,
AutoTokenizer,
BitsAndBytesConfig,
HfArgumentParser,
AutoTokenizer,
TrainingArguments,
Trainer,
GenerationConfig
)
fromtqdmimporttqdm
fromtrlimportSFTTrainer
importtorch
importtime
importpandasaspd
importnumpyasnp
fromhuggingface_hubimportinterpreter_login

interpreter_login()

本文不使用Weights and Biases跟踪训练指标,如需使用,请自行设置环境变量:

importos
#禁用WeightsandBiases
os.environ['WANDB_DISABLED']="true"

4.3 加载数据集

使用HuggingFace的DialogSum数据集来微调模型,这个数据集包含一万多个对话及其摘要和主题。你也可以用其他数据集来尝试。

加载数据集的代码如下:

huggingface_dataset_name="neil-code/dialogsum-test"
dataset=load_dataset(huggingface_dataset_name)

加载数据集后,我们就可以查看数据集,了解其中包含的内容:

数据集样本

数据集中每条记录包括:

4.4 设置Bitsandbytes配置

在加载模型之前,需要设置一个配置类来指定量化的方式。这里使用BitsAndBytesConfig,以4位格式加载模型,这样可以显著减少内存使用,但会牺牲一些准确性。

importtorch

compute_dtype=torch.float16
bnb_config=BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type='nf4',
bnb_4bit_compute_dtype=compute_dtype,
bnb_4bit_use_double_quant=False,
)

4.5 加载预训练模型

微软新开源的Phi-2模型,参数达27亿,性能领先。这里用它进行微调,从HuggingFace以4位量化方式加载。

model_name='microsoft/phi-2'
device_map={"":0}
original_model=AutoModelForCausalLM.from_pretrained(model_name,
device_map=device_map,
quantization_config=bnb_config,
trust_remote_code=True,
use_auth_token=True)

4.6 配置标记器

为了在训练时节省内存,现在来设置标记器。

tokenizer=AutoTokenizer.from_pretrained(model_name,trust_remote_code=True,padding_side="left",add_eos_token=True,add_bos_token=True,use_fast=False)
tokenizer.pad_token=tokenizer.eos_token

4.7 零样本推理测试

用一些样本输入来测试刚才加载的模型性能。

fromtransformersimportset_seed
set_seed(42)#确保结果可复现

#选取测试集中的一个样本
prompt=dataset['test'][10]['dialogue']
summary=dataset['test'][10]['summary']

#构造输入格式
formatted_prompt=f"Instruct:Summarizethefollowingconversation.\n{prompt}\nOutput:\n"

#生成摘要
res=gen(original_model,formatted_prompt,100)
output=res[0].split('Output:\n')[1]

#显示结果
print("-"*100)
print(f'INPUTPROMPT:\n{formatted_prompt}')
print("-"*100)
print(f'BASELINEHUMANSUMMARY:\n{summary}')
print("-"*100)
print(f'MODELGENERATION-ZEROSHOT:\n{output}')

基本模型输出

测试结果显示,尽管模型在对话摘要任务上仍有提升空间,但其已能从文本中提取关键信息,表明微调能进一步提升性能。

推荐书单

《大型语言模型实战指南:应用实践与场景落地》

内容简介 这是一本系统梳理并深入解析大模型的基础理论、算法实现、数据构造流程、模型微调方法、偏好对齐方法的著作,也是一本能手把手教你构建角色扮演、信息抽取、知识问答、AI Agent等各种强大的应用程序的著作。本书得到了零一万物、面壁智能、通义千问、百姓AI、澜舟科技等国内主流大模型团队的负责人的高度评价和鼎力推荐。

具体地,通过本书你能了解或掌握以下知识:1.大型语言模型的基础理论,包括常见的模型架构、领域大型语言模型以及如何评估大模型的性能。2.大模型微调的关键步骤:从数据的收集、清洗到筛选,直至微调训练的技术细节。3.大模型人类偏好对齐方法,从基于人工反馈的强化学习框架到当前主流的对齐方法。4.通过GPTs快速搭建个性化的专属ChatGPT应用。5.通过开源模型在多种场景下搭建大模型应用,包括:表格查询、角色扮演、信息抽取、知识问答、AI Agent等。6.掌握大模型Agent方法以及Agent常用框架。7.基于LangChain框架构建一个AutoGPT应用。本书集大模型理论、实践和场景落地于一体,提供大量经详细注释的代码,方便读者理解和实操。

总之,不管里是想深入研究大模型本身,还是进行大模型相关应用搭建,本书都应该能给你颇具价值的技术启发与思考,让你在大模型的路上快速前行,少走弯路。

购买链接:https://item.jd.com/14255849.html

精彩回顾

5个超级容易上手的AI项目(含代码)

手把手教你用Ollama和Llama3打造Spring Boot AI应用

Llama 3.1 405B,教你白嫖使用最强开源大模型

手把手教你安装最强文生图工具ComfyUI

Phi-3-Vision-128K大模型,AI助力OCR,文档处理更上一层楼

使用Qwen千问大模型和LangChain打造RAG应用








欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5