前言
DeepSeek, QWQ一系列实力强劲大模型的发布标志着我国在人工智能大模型范畴进入世界向导者行列。越来越多范畴开始关注并利用大模型。各行各业都积极赋能并开发干系专业范畴大模型,比如东南大学推出的“法衡-R1”法律大模型,哈工大推出的“华佗”医疗诊断模型都取得了优异体现。那么它们是如何将大模型这个“博学家”变成范畴的“专家”呢?这就需要利用我们本日分享的大模型微调技术。这篇文章带你5分钟学会利用llama-factory微调大模型,不写一行代码,一起来看看吧~
一、什么是大模型微调?
1.1 为什么进行大模型微调
训练时为包管大模型的通用能力会利用多类别数据,例如:数学类别,代码类别数据等等来训练。训练后的大模型是一个“博学家”,具备回答所有类别基础标题的能力,但是在面对更深度的专业范畴标题时,大模型的体现每每一般。为了让大模型在某个专业范畴具备突出能力,需要利用专业范畴的数据集,对大模型进行进一步的参数微调(继续训练),提升它在专业范畴方面的体现。
1.2 大模型微调原理简介
关于微调的概念大家可参考我的博文大模型瘦身指南。大模型微调分为全参微调和高效微调,全参微调就是将大模型所有层的参数进行微调,优点是可以充分利用已有大模型的特性,缺点是调整全部参数需要消耗大量的盘算资源。高效微调旨在最小化微调参数量和盘算复杂度提升训练模型在新任务上的体现。即使在盘算时间和资源受限的情况下,高效微调技术也能够利用模型的知识快速适应新任务。
高效微调常用的方法是LORA,示意图如下,左边是模型的原始权重,在训练阶段原始模型参数是稳定的。右边是被训练的升维和降维矩阵,这两个矩阵的参数量要比原始模型参数小许多。LORA的头脑很简单,词向量同时输入原始模型权重和升降维权重,得到的两个结果相加得到最终结果(相称于在原有知识上附加了一层知识体现,可以看成专业范畴的知识增量),我们本次微调也利用LORA方法。
二、利用llama-factory进行微调
2.1 llama-factory简介
llama-factory ( https://github.com/hiyouga/LLaMA-Factory )是一个国内北航开源的低代码大模型训练框架,专为大语言模型的微调而设计。其告急功能特点包括:
- 支持种类丰富的大模型,支持高效且低本钱地对100多个模型进行微调
- 提供了用户友好的Web界面,用户无需代码就可轻松上手
- 丰富的数据集选项,支持多种格式数据集选项并提供范例,用户可以选择自带的数据集或自己生成数据集修改成相应格式进行微调。
- 多样算法支持,支持包括LORA,DPO强化方法在内的多种微调方法和优化技术。
llama-factory如此丰富的功能自然而然成为大模型微调的不二选择(还有一种unsloth微调的方法也被大家广泛利用,我之后也会分享Unsloth利用,感兴趣大家关注一下点个赞吧~),下面就让我们利用llama-factory实践微调我们的大模型。
2.2 llama-factory环境搭建
llama-factory利用前需要安装cuda驱动,pytorch, metrics, transformers等众多设置,为避免环境冲突最好安装anaconda工具管理python环境。大家不想挨个下载的话可以关注微信公众号:大模型真好玩, 私信:llamafactory微调,免费下载cuda安装包、anaconda安装包,llama-factory的虚拟环境zip包,只需要将两个安装包安装完毕,并将llama_factory虚拟环境解压在anaconda安装目录中的envs文件夹中即可跳过下面的环境设置步调:
2.2.1 检查gpu和干系驱动
llama-factory 支持利用pytroch gpu版本和cpu版本对大模型进行微调,但cpu版本在大模型微调任务中性能低下,我们不作考虑。
首先检查我们gpu和cuda情况,输入nvidia-smi下令和nvcc -v下令, 出现下图结果体现你的cuda已经设置完成不需要继续安装, 我这里利用的是windows 11系统,cuda是12.2版本,显卡是一张2G显存的NVIDIA MX450(别骂了别骂了,没在实行室,只能用手头电脑给大家分享了)。
如果你的显示和上面不一样,可以在英伟达官网 中下载cuda的exe安装包,下载之后双击运行一起安装即可(建议安装到C盘)
2.2.2 安装anaconda管理虚拟环境
anaconda是一个管理多版本python的工具,它答应你在PC上安装多个python版本,避免不同环境间的污染。在Anaconda官网 下载anaconda安装包,选择安装路径(要记住安装路径),一起点击next, 注意在出现环境变量选项时按下图勾选:
安装好之后我们打开cmd下令行窗口, 执行如下下令指定python版本为3.11,命名为llama_factory的虚拟环境:
- conda create -n llama_factory python=3.11
复制代码 创建完成后利用如下下令激活llama_factory环境,出现如下界面,下令行前由base改为llama_factory说明我们环境切换乐成,以后所有的下令都要在llama_factory环境下操作。
- conda activate llama_factory
复制代码
2.2.3 安装llama-factory
执行如下下令安装llama_factory
- git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
- cd LLaMA-Factory
- pip install -e ".[torch,metrics]"
复制代码 等待llama-factory和torch, metrics等包完成安装后,执行llamafactory-cli version下令,出现下图内容体现你已经安装乐成
特别注意: 为包管微调顺遂执行,除了检查llama-factory安装乐成外,还需要包管乐成安装了gpu版本的pytorch, 在llama_factory虚拟环境中执行如下下令:
- import torch
- print(torch.__version__) # 输出Pytorh版本
- print(torch.version.cuda) # 输出pytorch cuda版本,
- print(torch.cuda.is_available()) # 输出为True,则安装无误
复制代码
有用户反馈直接通过llama_factory安装的pytorch版本是cpu版本的,也就是torch.cuda.is_available()输出为False。这种情况还需要执行如下下令:
- pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
复制代码 windows下还需要安装bitsandbytes库,采用如下下令
- pip install bitsandbytes==0.43.1 --extra-index-url https://download.pytorch.org/whl/cu124
复制代码 以上包全部安装完成后,我们的微调环境就搭建好啦!
2.3 模型微调实战
2.3.1 模型下载
微调模型的第一步当然是要下载模型,受限于显卡资源我这里利用 Qwen2.5 0.5B 模型进行训练(原理一样,训练别的大模型只需要下载别的模型即可)。
我们在modalscope网站上下载模型,首先执行下令pip install modelscope下载modelscope工具,然后执行modelscope download --model Qwen/Qwen2.5-0.5B-Instruct下令,模型就会被下载到当前目录下,我这边的执行结果如下:
2.3.2 数据集构建
我们如何构造模型微调的数据集呢?llama-factory给我们展示了许多微调数据集的格式,在llama-factory目录下的data文件夹中
我们这里以alpca_zh_demo.json文件为例解说,数据必须保存为json列表格式,列表中每个json对象都应该包含instruction: 指示也就是用户标题, input:用户输入数据, output:大模型输出三部分,如下图,在构造自己数据集的时候,也应该把自己的数据构造为json问答对的格式,同时把构造的数据集放在llama-factory文件夹下的data文件夹中。
注意: 构造数据集后还要完成数据集注册,具体做法是在llama-factory目录下的data文件夹下,打开dataset_info.json文件,在其中按照下图标注的格式填入你的数据集名称,如许在llama-factory界面选择时才能识别到你的数据集。
2.3.3 模型参数设置
在下令行中执行llamafactory-cli webui, 稍等片刻默认浏览器会自动进入llama-factory界面,没自动进入的小伙伴按照下令行中的地点进入,我这里是http://0.0.0.0:7860。
接下来我们就具体解读llama-factory的每个参数设置:
语言: 微调中文模型,我们选择zh
模型名称: llama-factory支持许多模型,我们选择 Qwen2.5-0.5B-Instruct
模型路径: 从modelscope下载模型的绝对路径,我这里是 E:\LLamaFactory\Qwen2.5-0.5B-Instruct
微调方法: 选择lora
检查点路径: 你如果从前利用过llama-factory训练模型,训练得到的结果会默认保存下来,我们把这个中间结果叫检查点,检查点路径就是你要不要接着你从前的检查点接着训练,这里我们首次利用llama-factory,空白即可。
量化品级: 我们这里不需要量化,选择none, 量化体现将模型精度低落从而缩减模型大小(具体表明可见我从前的科普文章:大模型瘦身指南:微调,量化,蒸馏)。
量化方法: 我们不需要量化,这里随便选一个即可
提示模板: 千问模型选择qwen
RopE插值方法: 这个是用来扩展模型上下文长度的,rope会使模型理解输出更长的上下文,我们这次不需要扩展模型上下文长度,选择none
加速方式: 不需要特别加速,我们这里选择auto
选择Train窗口,设置我们的训练方法:
训练方式: Supervised Fine-Tuning有监视微调
数据文件夹: data,也就是存放我们数据集文件的地方
数据集: 构造并注册的数据集,我们这里选择alpaca_zh_demo, 还有预览数据集功能。
学习率: 可以理解为模型学习的快慢,学习率越大模型收敛越快,但学的比较粗糙,学习率越小模型收敛越慢但学的精细。这里取履历值5e-5
训练轮数: 同样的数据要重复训练频频,我们这里取2
最大梯度范数: 用于梯度裁剪的范数,履历值1.0
最大样本数: 比你的数据集中数据个数大即可,我这里随意填了10000
盘算类型: 没有量化,还是选择原始bf16
截断长度: 大模型最多能处理的文本长度,这里是2048
批处理大小: 大模型每次处理的数量,和丧失函数有关,这里选2
梯度累积: 大模型依据多少步才调整参数,这里选择8,大模型相称于在8*2=16个例子后才调整参数
验证集比例: 我们人工验证取0
学习率调治器: 这里默认取cosine即可
还需要设置lora参数
LORA秩: 默认为8即可,体现Lora参数量
LORA缩放系数: 写为16,履历值
其余设置均可保持默认
2.3.4 模型微调
以上参数设置好之后,我们填入输出模型的目录和设置路径(保存我们上面设置的设置参数),同时llama-factory会自动检测我们gpu的数量并填入:
点击开始后,llama-factory自动开始训练,训练过程中的日记也会在网站下方打印,右侧的图片也会对丧失函数进行展示,方便用户观察训练中丧失, 下令行中也会打印当进步度:
2.3.5 模型评测
模型训练好之后需要评估我们的模型是否正确,首先需要把我们的模型导出,新建本地目录,我这里是E:\LLamaFactory\Qwen2.5-0.5B-SFT, 选择导出模式,并填入我们训练完成的检查点路径,点击开始导出:
刷新浏览器网站,我们切换llama-factory到chat模式,保持检查点路径为空,同时修改模型目录为我们新导出的模型文件目录,我这里是E:\LLamaFactory\Qwen2.5-0.5B-SFT, 点击加载模型:
加载我们训练好的模型,拖到页面底部,从数据集中挑一个标题进行提问:【识别并表明给定列表中的两个科学理论:细胞理论和日心说。】
以下是微调后模型回答:
将模型路径改为原始模型路径E:\LLamaFactory\Qwen2.5-0.5B-Instruct,测试:
可以看到该标题微调模型回答与原始模型回答已经有了很大不同,显然微调模型更依照我们的数据集进行回答。以上只是针对这个案例的简单评测,真实评测中需要利用测试集大规模评测,或通过语义相似度检测和专业人员评测多种本事进行精细评测。
三、总结预测
通过以上分享我们乐成利用llama-factory在不写一行代码情况下微调了大模型。然而限于篇幅原因,还有许多需要提升的地方:
- 数据集构建: 如何从大量文本中构建恰当模型训练的数据集
- 模型微调参数: 模型微调参数为什么要这么设置?还涉及许多深度学习的专业知识
- 模型部署: 目前我们只是微调乐成大模型,距离真正利用还需要将其部署在Ollama等大模型 服务中
- 微调方法: 除了llama-factory, unsloth也是目前最广泛的微调工具,甚至超越了llama-factory,我们之后也会出unsloth微调qwq和deepseek-r1的分享。
以上的内容笔者都会出分享教程,感兴趣可以关注wx公众号:大模型真好玩,免费的工作实践中大模型开发利用履历和资料分享~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |