当前位置:AIGC资讯 > AIGC > 正文

【LLM大模型】使用QLoRa微调Llama 2

本篇文章将介绍使用PEFT库和QLoRa方法对Llama 27b预训练模型进行微调。我们将使用自定义数据集来构建情感分析模型。只有可以对数据进行微调我们才可以将这种大模型进行符合我们数据集的定制化。

一些前置的知识

如果熟悉Google Colab、Weights & Biases (W&B)、HF库,可以跳过这一节。

虽然Google Colab(托管的Jupyter笔记本环境)不是真正的先决条件,但我们建议使用它来访问GPU并进行快速实验。如果是付费的用户,则可以使用高级GPU访问,比如A100这样的GPU。

W&B帐户的作用是记录进度和训练指标,这个如果不需要也可以用tensorboard替代,但是我们是演示Google Colab环境所以直接用它。

然后就是需要一个HF帐户。然后转到settings,创建至少具有读权限的API令牌。因为在训练脚本时将使用它下载预训练的Llama 2模型和数据集。

最后就是请求访问Llama 2模型。等待Meta AI和HF的邮件。这可能要1-2天。

准备数据集

指令微调是一种常用技术,用于为特定的下游用例微调基本LLM。训练示例如下:

代码语言:javascript

 Below is an instruction that describes a sentiment analysis task...
 
 ### Instruction:
 Analyze the following comment and classify the tone as...
 
 ### Input:
 I love reading your articles...
 
 ### Response:
 friendly & constructive

我们建议使用json,因为这样比较灵活。比如为每个示例创建一个JSON对象,其中只有一个文本字段。像这样:

代码语言:javascript

 { "text": "Below is an instruction ... ### Instruction: Analyze the... ### Input: I love... ### Response: friendly" },
 { "text": "Below is an instruction ... ### Instruction: ..." }

有很多很多方法可以提取原始数据、处理和创建训练数据集作为json文件。下面是一个简单的脚本:

代码语言:javascript

 with open('train.jsonl', 'a') as outfile:
     for example in raw_data:
         text = '<process_example>'
         # now append entry to the jsonl file.
         outfile.write('{"text": "' + text + '"}')
         outfile.write('\n')

如HF的Datasets库也是一个选择,但是我个人觉得他不好用。

在我们开始训练之前,我们要将文件作为数据集存储库推送到HF。可以直接使用huggingface-cli上传数据集。

训练

Parameter-Efficient Fine-Tuning(PEFT)可以用于在不触及LLM的所有参数的情况下对LLM进行有效的微调。PEFT支持QLoRa方法,通过4位量化对LLM参数的一小部分进行微调。

Transformer Reinforcement Learning (TRL)是一个使用强化学习来训练语言模型的库。TRL也提供的监督微调(SFT)训练器API可以让我们快速的微调模型。

代码语言:javascript

 !pip install -q huggingface_hub
 !pip install -q -U trl transformers accelerate peft
 !pip install -q -U datasets bitsandbytes einops wandb
 
 # Uncomment to install new features that support latest models like Llama 2
 # !pip install git+https://github.com/huggingface/peft.git
 # !pip install git+https://github.com/huggingface/transformers.git
 
 # When prompted, paste the HF access token you created earlier.
 from huggingface_hub import notebook_login
 notebook_login()
 
 from datasets import load_dataset
 import torch
 from transformers import AutoModelForCausalLM, BitsAndBytesConfig, AutoTokenizer, TrainingArguments
 from peft import LoraConfig
 from trl import SFTTrainer
 
 dataset_name = "<your_hf_dataset>"
 dataset = load_dataset(dataset_name, split="train")
 
 base_model_name = "meta-llama/Llama-2-7b-hf"
 
 bnb_config = BitsAndBytesConfig(
     load_in_4bit=True,
     bnb_4bit_quant_type="nf4",
     bnb_4bit_compute_dtype=torch.float16,
 )
 
 device_map = {"": 0}
 
 base_model = AutoModelForCausalLM.from_pretrained(
     base_model_name,
     quantization_config=bnb_config,
     device_map=device_map,
     trust_remote_code=True,
     use_auth_token=True
 )
 base_model.config.use_cache = False
 
 # More info: https://github.com/huggingface/transformers/pull/24906
 base_model.config.pretraining_tp = 1 
 
 peft_config = LoraConfig(
     lora_alpha=16,
     lora_dropout=0.1,
     r=64,
     bias="none",
     task_type="CAUSAL_LM",
 )
 
 tokenizer = AutoTokenizer.from_pretrained(base_model_name, trust_remote_code=True)
 tokenizer.pad_token = tokenizer.eos_token
 
 output_dir = "./results"
 
 training_args = TrainingArguments(
     output_dir=output_dir,
     per_device_train_batch_size=4,
     gradient_accumulation_steps=4,
     learning_rate=2e-4,
     logging_steps=10,
     max_steps=500
 )
 
 max_seq_length = 512
 
 trainer = SFTTrainer(
     model=base_model,
     train_dataset=dataset,
     peft_config=peft_config,
     dataset_text_field="text",
     max_seq_length=max_seq_length,
     tokenizer=tokenizer,
     args=training_args,
 )
 
 trainer.train()
 
 import os
 output_dir = os.path.join(output_dir, "final_checkpoint")
 trainer.model.save_pretrained(output_dir)

上面的脚本就是一个微调的简单代码,这里可以添加命令行参数解析器模块,如HfArgumentParser,这样就不必硬编码这些值

测试

下面时一个简单的加载模型并进行完整性测试的快速方法。

代码语言:javascript

 from peft import AutoPeftModelForCausalLM
 
 model = AutoPeftModelForCausalLM.from_pretrained(output_dir, device_map=device_map, torch_dtype=torch.bfloat16)
 text = "..."
 inputs = tokenizer(text, return_tensors="pt").to(device)
 outputs = model.generate(input_ids=inputs["input_ids"].to("cuda"), attention_mask=inputs["attention_mask"], max_new_tokens=50, pad_token_id=tokenizer.eos_token_id)
 
 print(tokenizer.decode(outputs[0], skip_special_tokens=True))

这样就能够查看我们的结果了。

如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

二、640套LLM大模型报告合集

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

三、LLM大模型系列视频教程

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

LLM大模型学习路线 ↓

阶段1:AI大模型时代的基础理解

目标:了解AI大模型的基本概念、发展历程和核心原理。

内容:

L1.1 人工智能简述与大模型起源 L1.2 大模型与通用人工智能 L1.3 GPT模型的发展历程 L1.4 模型工程 L1.4.1 知识大模型 L1.4.2 生产大模型 L1.4.3 模型工程方法论 L1.4.4 模型工程实践 L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

内容:

L2.1 API接口 L2.1.1 OpenAI API接口 L2.1.2 Python接口接入 L2.1.3 BOT工具类框架 L2.1.4 代码示例 L2.2 Prompt框架 L2.3 流水线工程 L2.4 总结与展望

阶段3:AI大模型应用架构实践

目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

内容:

L3.1 Agent模型框架 L3.2 MetaGPT L3.3 ChatGLM L3.4 LLAMA L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

内容:

L4.1 模型私有化部署概述 L4.2 模型私有化部署的关键技术 L4.3 模型私有化部署的实施步骤 L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

总结

**文章总结**:
本篇文章详细介绍了如何使用PEFT库和QLoRa方法对Llama 2 7b模型进行微调,以创建自定义的情感分析模型。文章主要分为以下几个关键步骤:
1. **前置知识准备**:推荐使用Google Colab进行训练和实验,使用W&B记录进展,并创建HF账户以获取API令牌和Llama 2模型访问权。
2. **准备数据集**:介绍了指令微调技术,建议使用json格式构建数据集,并提供了一个创建jsonl文件的基本脚本。强调了将数据集上传到Hugging Face平台的重要性。
3. **训练模型**:详细介绍了使用PEFT和QLoRa方法对LLM进行微调的步骤,包括安装必要的库、加载预训练模型、配置BitsAndBytes用于量化、设置训练参数等。通过TRL库提供的SFT训练器API进行模型微调,并提供了具体的代码示例。
4. **模型测试**:提供了如何加载训练后的模型并进行简单测试的步骤,验证模型性能。
5. **大模型学习的建议**:最后部分强调了掌握AI工具的重要性,并提供了丰富的LLM大模型学习资源包,包括书籍、行业报告、视频教程等,帮助读者系统性地学习LLM大模型的基础知识到高级应用。
**总结亮点**:
- 详细介绍了通过对大模型Llama 2的微调来定制情感分析模型的全流程。
- 提供了实用的数据集准备和模型训练步骤,包括代码举例,易于复制和实施。
- 强调了在当前AI大模型时代,掌握AI工具和技术的重要性。
- 提供了丰富的学习资源,帮助不同水平的读者入门并系统深入学习LLM大模型。

更新时间 2024-09-17