AI大模型微调:使用LLaMA-Factory进行大模型微调(附教程)

引言

在人工智能领域,大模型微调是一个热门话题,尤其是在自然语言处理(NLP)领域。本文将介绍大模型中的instruct、chat和base模型的不同点,探讨常见的微调框架,并分享我所使用的微调框架及其GitHub地址,最后详细介绍我的微调步骤。

1. 大模型类型介绍

1.1 Base模型

Base模型,也称为基座模型,是在大量无标注数据上进行预训练的模型,学习到广泛的语言特征。这些模型具有大规模预训练、泛化能力强和可微调性等特点。

1.2 Chat模型

Chat模型专为处理人机交互而设计,能够理解上下文,维持对话历史,生成连贯且情境相关的响应。这类模型的特点是上下文感知、互动性和创意生成。ChatGPT就是一个典型的chat模型。

1.3 Instruct模型

Instruct模型是为遵循指令或完成特定任务而设计和优化的模型。它们经过指令数据集微调,能够更好地理解和执行用户提供的指令。

2. 常见微调框架

在微调大模型时,有多种框架可供选择。以下是一些常见的微调框架:

  • LoRA:一种基于低阶自适应的大语言模型微调方法,模拟全量微调的效果。
  • PEFT:围绕部分参数进行微调的方法,目前比较常用。
  • RLHF:基于强化学习的微调方法,由OpenAI团队提出。

3. 我所使用的微调框架

我选择使用的微调框架是LLaMA-Factory,这是一个国内北航开源的低代码大模型训练框架,专为大型语言模型(LLMs)的微调而设计。它具有高效且低成本、易于访问和使用、丰富的数据集选项、多样化的算法支持等特点。LLaMA-Factory的GitHub地址是:LLaMA-Factory

4. 微调

我是在百度飞桨上完成此次大模型微调工作的,所使用机器配置为:V100-32G,使用模型为:Meta-Llama-3-8B-Instruct。各位如果使用的GPU是V100-16G,可以选择使用更小一些的模型,比如Qwen2.5-3B-Instruct-GPTQ-Int8。本地部署的话可以根据自己的显卡性能来自我判断,在这里我贴一张图出来(来源于LLaMA-Factory),可以对比参考一下:

在这里插入图片描述

常见的模型获取网站:

  1. 魔塔社区
  2. huggingface(需要科学上网)

一:环境配置

1. 硬件与驱动

首先,需要确定一下显卡驱动和CUDA的是否有安装完成。这个教程网上有非常多,而且很详细,在此不多做深究。如果有同学确实是不会安装,我之后也可以再写一篇。我说使用的是百度飞桨提供的云环境,所以是已经安装好了的,各位同学可以使用这个命令进行一个简单的校验:

nvidia-smi

会出现如下输出,显示GPU的当前状况与一些配置信息

在这里插入图片描述

2. 相关依赖

现在我们需要下载本次微调所使用到的开源项目LLaMA-Factory

  1. 使用git clone进行项目下载:git clone https://github.com/hiyouga/LLaMA-Factory.git
  2. 下载完成后,使用cd命令进入LLaMA-Factory目录下:cd LLaMA-Factory
  3. 安装相关依赖,这一步有两种选择
    • 第一种:如果你使用的是自己的电脑,或者说是在本地环境下,我建议创建一个虚拟环境,避免破坏你原有的开发环境。我推荐使用conda,当然你也可以考虑使用其他的方式,在此不多做讨论。如果需要相关教程我也可以再出一个包括conda在内的各式各样创建虚拟环境的方法。
    • 第二种:如果你是像我一样使用的云端开发环境,比如colab、kaggle、百度飞桨这些,那你可以不去创建虚拟环境。创建虚拟环境的目的在第一条已经说明了,各位同学可以根据自己的实际情况来判断是否需要进行创建。在这大模型中微调操作中我是没有创建虚拟环境的。
    • 此时假设你已经完成了上述两种判断,并且根据自己的情况进行了相应的操作。那么接下来可以使用该命令进行相关环境依赖的安装:pip install -e '.[torch,metrics]' --user–user这个可加可不加,如果你拥有你开发环境的root权限,那就可以考虑不加。但是如果你是像我一样在百度飞桨这种开发平台进行操作的,那还是加上比较好。

执行完上面三步后,再使用如下命令进行一个校验:

  1. 在终端输入 Python ,或直接使用某个代码编译器均可,执行如下命令:
import torch
torch.cuda.current_device()
torch.cuda.get_device_name(0)
torch.__version__

若过程中未出现报错,并且输出结果与我的类似,那么便算通过:

在这里插入图片描述

  1. 在终端输入 llamafactory-cli train -h ,我随意截取了最后一段信息,此过程未报错便算通过:

在这里插入图片描述

至此,基本的开发环境已经搭建完成。

二:模型下载

下载模型方法有很多种,在上面的介绍中也有模型下载网站,各位可以去网站中自取。国内的小伙伴可以使用这个命令进行下载。不过在使用这个命令下载之前,各位还需要请确保 lfs 已经被正确安装:

git lfs install

git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git

这个命令会去 魔塔社区 下载 Meta-Llama-3-8B-Instruct 模型。在这里不给出 huggingface 相关下载方式了,相信你有能力访问它,就有能力去下载。如果你觉着自己的硬件不太行,那么咱可以用这个命令下载一个小一些的模型:

git clone https://www.modelscope.cn/Qwen/Qwen2.5-3B-Instruct-GPTQ-Int8.git

该命令会下载 Qwen2.5-3B-Instruct-GPTQ-Int8 模型,这个比上面那个8B的小多了。 如果用这俩命令无法下载模型,那你可能是因为 lfs 没有正确安装。此时比较好的方法是在网上搜寻相关教程进行安装,如果懒得装,也可以考虑使用下面这两种方法:

  1. 使用命令行下载
    • 先安装ModelScope:在终端输入pip install modelscope
    • 安装完毕后,再在终端输入modelscope download --model Qwen/Qwen2.5-3B-Instruct-GPTQ-Int8安装 QWEN 模型,同理 Llama 模型也可以这么安装。
  2. 使用SDK下载
    • 在终端输入 python 或者打开一个代码编辑页面。运行下面代码
#模型下载
from modelscope import snapshot_download 
model_dir = snapshot_download('Qwen/Qwen2.5-3B-Instruct-GPTQ-Int8')

  1. 直接打开对应网站,手动进行下载(新手记得要下载全)

在这里插入图片描述

下载完后记得检查一下模型下载是否完整,可以进入对应文件目录用du -sh *看看一看:

在这里插入图片描述

三:使用原始模型进行推理

我们先试一试不进行微调,直接用刚刚下载的模型进行推理会是什么结果,在终端输入如下命令。(这个命令比较有讲究,各位最好去LLaMA-Factory仔细读一读):

llamafactory-cli chat \
    --model_name_or_path /home/aistudio/Meta-Llama-3-8B-Instruct \
    --template llama3

所有功能的入口全都是 llamafactory-cli ,然后根据你的不同要求,增减不同的参数,下面是部分命令表格(详细参数和教程可以查阅官方文档):

参数名称功能描述
model_name_or_path指定使用的模型名称或模型文件的路径。
chat启用命令行模式,允许用户通过命令行接口与模型交互。
webui启用Web界面模式,提供图形用户界面以方便用户操作。
finetuning_type选择微调方式,可选值为freeze(冻结参数)、lora(LoRA方法)和full(全参数微调)。
lora_target设置采用LoRA方法的目标模块,如果未指定,则默认作用于所有模块(all)。
dataset指定使用的数据集,多个数据集可以用逗号“,”分隔。
template指定数据集模板,确保所选模板与模型兼容。
output_dir指定输出目录,用于保存训练结果和其他输出文件。

执行上述命令后,经过一系列的模型加载,最终会在终端出现信息(这个是我提问之后的,刚刚启动时只有一个 User):

在这里插入图片描述

如果将命令中的 llamafactory-cli chat改成llamafactory-cli webchat,那么就会有一个基于gradio开发的ChatBot推理页面,也就是所谓的网页版本。不过我使用的是云端开发,所以配置会稍微麻烦一点,在这里用命令行版本进行一个演示。如果你是在本地进行部署,那么可以尝试使用 webchat ,运行完后在终端可以看见对应的链接,点击或者复制再粘贴到浏览器打开即可。一般而言,可以通过 http://localhost:7860/ 进行访问。

四:构建自定义数据集

目前 LLaMA-Factory 支持 Alpaca 格式和 ShareGPT 格式的数据集。 在这次微调训练中,我们使用指令监督微调。 这种json类型的训练数据格式如下:


  {
    "instruction": "用户指令(必填)",
    "input": "用户输入(选填)",
    "output": "模型回答(必填)"
  }


  • instruction:用户进行的一个要求,通常是对系统或模型的直接命令,指示它需要执行的具体任务或动作。
  • input:系统接收到的数据或信息,这是执行指令所需的原材料。输入可以是文本、图像、音频或其他任何形式的数据,具体取决于指令的性质和系统的处理能力。
  • output:系统处理输入后产生的结果。输出是指令执行的直接产物,可以是分析结果、生成的文本、修改后的图像或任何其他形式的响应。

本次教程我们简单对大模型的自我认知进行一个微调,我们可以在 LLaMA-Factory 文件目录下的 data 文件目录中找到 identity.json 文件,这个是系统自带的数据集(已经默认在 LLaMA-Factory/data/dataset_info.json 注册为identity)

接下来我们进行一个文本替换:

  1. 如果是windows用户,那么你需要手动使用编辑器打开 identity.json 文件,然后找到替换其中的NAME 和 AUTHOR 。

  2. 如果是 Linux 用户,那么可以使用 sed 完成快速替换

    • sed -i 's/{{name}}/刚刚微调出来的模型/g' data/identity.json
    • sed -i 's/{{author}}/Yiyabo/g' data/identity.json 替换前:
    {
     "instruction": "Who are you?",
     "input": "",
     "output": "Hello! I am {{name}}, an AI assistant developed by {{author}}. How can I assist you today?"
    }
    
    

    替换后:```
    {
    “instruction”: “Who are you?”,
    “input”: “”,
    “output”: “Hello! I am 刚刚微调出来的模型, an AI assistant developed by Yiyabo. How can I assist you today?”
    }

    
    
    

至此,微调之前的准备工作都已经做完了。

五:开始微调

在构建微调数据集的时候已经说明了,本次是使用指令监督微调,然后为了尽量减少对硬件的要求,咱们用的是Lora。 在终端输入:

 llamafactory-cli train \
    --stage sft \
    --do_train \
    --model_name_or_path /home/aistudio/Meta-Llama-3-8B-Instruct \
    --dataset identity \
    --dataset_dir ./data \
    --template llama3 \
    --finetuning_type lora \
    --output_dir ./saves/LLaMA3-8B/lora/sft \
    --overwrite_cache \
    --overwrite_output_dir \
    --cutoff_len 1024 \
    --preprocessing_num_workers 16 \
    --per_device_train_batch_size 2 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 8 \
    --lr_scheduler_type cosine \
    --logging_steps 50 \
    --warmup_steps 20 \
    --save_steps 100 \
    --eval_steps 50 \
    --evaluation_strategy steps \
    --load_best_model_at_end \
    --learning_rate 5e-5 \
    --num_train_epochs 5.0 \
    --max_samples 1000 \
    --val_size 0.1 \
    --plot_loss \
    --fp16

参数名称功能描述
stage表示当前训练阶段的枚举值,包括 sft(有监督指令微调)、pt、rm、ppo等。在我们的案例中,我们关注的是有监督指令微调阶段,即 sft
do_train指示是否处于训练模式。
dataset指定使用的数据集列表,所有数据集必须在 data_info.json 中注册,多个数据集以逗号“,”分隔。本次微调仅使用了 identity.json 文件。
dataset_dir指定数据集所在的目录路径,本例中为 data ,即项目内嵌的 data 目录。
finetuning_type微调训练的类型,可选枚举值包括 lora(低秩适应)、full(全参数微调)和freeze(冻结参数)。本例中使用的是 lora
output_dir指定训练结果的保存路径。
cutoff_len定义训练数据集的长度截断阈值。
per_device_train_batch_size设置每个设备上的训练批次大小(batch size),最小值为1。如果GPU显存充足,可以适当增加以提高训练效率。
fp16启用半精度混合精度训练,以加速训练过程并减少显存占用。
max_samples定义每个数据集中采样的数据量。
val_size指定从数据集中随机抽取的比例,用作验证集。

特别注意V100无法支持bf16,望周知。

终端输出下面信息即代表微调结束:

在这里插入图片描述

从结果来看,微调是成功的。关键指标如下:

  1. eval_loss = 1.7783:这是评估集上的损失值,表明模型在评估数据上的性能,数值越低越好。

  2. eval_samples_per_second 和 eval_steps_per_second:表明评估的效率。

  3. 日志中未丢失必要字段:task 信息明确,微调的任务类型为因果语言建模。

六:合并Lora进行模型推理

当训练结束后,咱可以进行一下验证,在终端输入:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat \
    --model_name_or_path /home/aistudio/Meta-Llama-3-8B-Instruct \
    --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft  \
    --template llama3 \
    --finetuning_type lora

接下来各位同学可以查看下微调后的效果:

在这里插入图片描述
我在这里整蛊了一下同学,为了避免隐私泄露所以给打了码😂

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

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

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

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

与其焦虑……

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

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

基于此,我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近70次后,终于把整个AI大模型的学习门槛,降到了最低!

在这个版本当中:

第一您不需要具备任何算法和数学的基础
第二不要求准备高配置的电脑
第三不必懂Python等任何编程语言

您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型教程已经给大家整理并打包,现在将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

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

一、LLM大模型经典书籍

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

在这里插入图片描述

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

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

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

在这里插入图片描述

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

在这里插入图片描述

五、AI产品经理大模型教程

在这里插入图片描述

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大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值