前言
大语言模型(LLMs)对自然语言处理(NLP)的影响是非常深远的,不仅提高了任务效率,还催生出新能力,推动了模型架构和训练方法的创新。尽管如此强大,但LLMs也有局限,有时需要针对特定任务进行特别优化。
通过对LLMs进行微调来大幅提升模型的性能,同时降低训练成本,获得更贴近实际应用的上下文结果。
1 LLM微调
LLM微调就是对预训练的大型语言模型进行针对性的再训练,使其更适应特定领域的任务。这一过程能大幅提高模型的适用性,同时减少数据和计算资源的消耗。
微调的主要步骤包括:
-
选择模型:挑选与任务需求相匹配的预训练模型。
-
收集数据:准备一个与任务相关的、结构化的数据集。
-
数据预处理:对数据集进行清洗、划分,并确保其与模型兼容。
-
执行微调:在特定数据集上调整模型,使其更符合任务需求。
-
任务适应:调整模型参数,使其更好地理解和处理特定任务。
LLM微调适用于需要精准理解和流畅表达的NLP任务,如情感分析、命名实体识别等,能充分发挥预训练模型的潜力,适应专业领域的需求。
2 微调方法
LLM主要有两种方法:
-
全微调:通过训练模型响应特定指令来提升其在多任务上的表现,需要更新所有模型权重,对资源要求较高。
-
参数高效微调(PEFT):只更新部分模型参数,减少资源消耗,避免遗忘已学知识,适合多任务处理。LoRA和QLoRA是PEFT中常用的有效技术。
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 安装所需库
安装以下库以进行实验:
!pip install -q -U bitsandbytes transformers peft accelerate datasets scipy einops evaluate trl rouge_score
这些库的主要功能包括:
-
Bitsandbytes:优化CUDA函数,加速模型运行。
-
transformers:提供预训练模型和训练工具。
-
peft:支持参数高效微调。
-
accelerate:简化多设备训练代码。
-
datasets:方便访问多种数据集。
-
einops:简化张量操作。
接下来,导入所需库:
from datasets import load_dataset
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
BitsAndBytesConfig,
HfArgumentParser,
AutoTokenizer,
TrainingArguments,
Trainer,
GenerationConfig
)
from tqdm import tqdm
from trl import SFTTrainer
import torch
import time
import pandas as pd
import numpy as np
from huggingface_hub import interpreter_login
interpreter_login()
本文不使用Weights and Biases跟踪训练指标,如需使用,请自行设置环境变量:
import os
# 禁用Weights and Biases
os.environ['WANDB_DISABLED']="true"
4.3 加载数据集
使用HuggingFace的DialogSum数据集来微调模型,这个数据集包含一万多个对话及其摘要和主题。你也可以用其他数据集来尝试。
加载数据集的代码如下:
huggingface_dataset_name = "neil-code/dialogsum-test"
dataset = load_dataset(huggingface_dataset_name)
加载数据集后,我们就可以查看数据集,了解其中包含的内容:
数据集中每条记录包括:
-
对话文本
-
对话摘要
-
对话主题
-
唯一ID
4.4 设置Bitsandbytes配置
在加载模型之前,需要设置一个配置类来指定量化的方式。这里使用BitsAndBytesConfig,以4位格式加载模型,这样可以显著减少内存使用,但会牺牲一些准确性。
import torch
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 零样本推理测试
用一些样本输入来测试刚才加载的模型性能。
from transformers import set_seed
set_seed(42) # 确保结果可复现
# 选取测试集中的一个样本
prompt = dataset['test'][10]['dialogue']
summary = dataset['test'][10]['summary']
# 构造输入格式
formatted_prompt = f"Instruct: Summarize the following conversation.\n{prompt}\nOutput:\n"
# 生成摘要
res = gen(original_model, formatted_prompt, 100)
output = res[0].split('Output:\n')[1]
# 显示结果
print("-" * 100)
print(f'INPUT PROMPT:\n{formatted_prompt}')
print("-" * 100)
print(f'BASELINE HUMAN SUMMARY:\n{summary}')
print("-" * 100)
print(f'MODEL GENERATION - ZERO SHOT:\n{output}')
测试结果显示,尽管模型在对话摘要任务上仍有提升空间,但其已能从文本中提取关键信息,表明微调能进一步提升性能。
最后的最后
感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。
因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】

大模型知识脑图
为了成为更好的 AI大模型 开发者,这里为大家提供了总的路线图。它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
经典书籍阅读
阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
面试资料
我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
