llama factory LoRA微调qwen大模型 | 新手炼丹纪录(1)
往期回顾
llama factory LoRA微调qwen大模型 | 新手炼丹纪录(1)-CSDN博客
大模型使用llama.cpp转换gguf格式并量化 | 新手炼丹纪录(2)-CSDN博客
ollama本地部署qwen微调大模型 | 新手炼丹纪录(3)-CSDN博客
之前用本地机器微调qwen大模型,结果由于显存不够或者其他设置问题,总是无法正常训练,莫名其妙报错。只能去实验一些参数很小的模型,qwen2:0.5b、gemma:2b之类的,实在不够看。
今天实验使用了算力平台AutoDL算力云租赁盘算资源来跑微调以及量化,实验了qwen1.5:7b,效果还可以。末了微调、转化、量化完后将得到gguf模型下载到本地ollama部署。
本次炼丹纪录大抵分为三个部门: LoRA微调qwen大模型过程、llama.cpp转换格式并量化以及Ollama部署微调模型。接下来我将分三期具体报告全过程,本次主要纪录使用llama factory提供的webui,使用lora方法来对qwen1.5:7b模型进行微调。
https://i-blog.csdnimg.cn/direct/7e8228646abf456cb0f252001f453e2e.png
一、前期准备
1、算力租赁
一样平常家用电脑或者条记本没有足够的显存、内存来进行模型微调,因此我们需要租借第三方提供的算力资源,本次我使用的是AutoDL算力云。
首先我们来确认想要微调的模型需要多少资源才气跑起来,下面是llama factory官方的保举图:
https://i-blog.csdnimg.cn/direct/f9f547076c714c49ae9c5d10888bb3e8.png
对于我们的7b模型进行LoRA微调大概是需要16GB的显存。
其次我们还需要留意需要依赖的Python环境、库版本,尤其是CUDA的版本,因为我们要使用显卡加速微调速度,如下:
https://i-blog.csdnimg.cn/direct/1870a4bf227042e8869602f972cd958f.pnghttps://i-blog.csdnimg.cn/direct/edf73b58a7e1416088d82fd4ba801160.png
下面根据我们的需求来设置算力资源:
https://i-blog.csdnimg.cn/direct/331cbfe4ccf849f0b4c0c41ed410ce46.png
这里我选择了1GPU,24GB左右的显存。如果微调的参数更多可以选择显存更高,GPU数更多的。然后我们来设置基础的Python微调环境:
https://i-blog.csdnimg.cn/direct/d111118e550a4d6fb08db4f09d89ac44.png
https://i-blog.csdnimg.cn/direct/9a2aa1f3156841be8ab15a107586828f.png
点击立刻创建,我们就得到了一台高算力盘算机:
https://i-blog.csdnimg.cn/direct/14c5a0c18bad4752b04c78b4cc5573fb.png
2、微调环境搭建
点击JupyterLab进入,打开终端
https://i-blog.csdnimg.cn/direct/ae00b660cbd04cf1a8ac0a6deface06a.png
https://i-blog.csdnimg.cn/direct/b7699d6f292e452f8ee8daad77599ff1.png
输入下面指令进行学术资源加速
source /etc/network_turbo 再输入命令克隆llama factory项目源码:
git clone https://github.com/hiyouga/LLaMA-Factory.git 完成后如下:
https://i-blog.csdnimg.cn/direct/88a0e0362f774d78a54370d737a1c567.png
由于AutoDL在创建资源实例的时候帮我们预装好了许多需要的第三方库,包罗conda,因此我们只需要直接使用。
新建假造环境,安装其他需要的第三方库,防止污染环境:
conda create -n llama_factory python=3.10 中心需要确认的直接无脑输入y确认就行。然后初始化conda(留意:每次新建终端的时候也要重新初始化conda,否则会报conda命令无法找到的错误)
source /root/miniconda3/etc/profile.d/conda.sh 激活创建的假造环境
conda activate llama_factory 出现以下的提示表示创建、激活乐成:
https://i-blog.csdnimg.cn/direct/7edf7696e9c1473e9a3105ffe816715e.png
下面安装依赖的其他第三方库。进入项目地点的目录,输入以下代码安装依赖:
cd LLaMA-Factory
pip install -r requirements.txt
pip install -e . #下载llama factory命令 再多安装一个modelscope,modelscope也叫魔塔社区(类似huggingface),在这个平台上我们可以找到许多大模型的源码,包罗ollama、qwen和gemma等,也包罗许多训练的数据集,我们下载的是它的python库,可以方便的帮我们下载各种文件:
pip install modelscope -U https://i-blog.csdnimg.cn/direct/de0d20611aac4dc5bcc36aa93f1cb0c0.png
一切依赖下载完毕以后,我们就可以启动llama factory的前端微调界面了(留意:要在/LLaMA-Factory的项目路径下),否则会找不到llamafactory-cli的指令,如下:
CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui https://i-blog.csdnimg.cn/direct/022666ef681144848b4ee0659593cdb6.png
特别留意这里“7860”的端口,后面需要用到。
但是由于项目是启动在长途服务器上的,因此我们想要访问到微调界面还需要设置代理:
返回AutoDL,点击自定义服务
https://i-blog.csdnimg.cn/direct/85ed1433f3ad44eca3df09eab29da543.png
https://i-blog.csdnimg.cn/direct/536fccec669540a084f1b5eec3c7560b.png
根据本地盘算机环境,下载对应的SSH隧道工具,下载完后直接解压即可,解压后双击执行exe文件:
https://i-blog.csdnimg.cn/direct/651ded2fd7ff4579be2e4bcb785400b7.png
https://i-blog.csdnimg.cn/direct/386f6afa912d4c48b65735fbd45c2c5c.png
点击开始代理,从给出的网址访问,我们就可以在本地直接长途操控微调了:
https://i-blog.csdnimg.cn/direct/ffa89d2a989c40088e4cd2e1f7407d78.png
进入到微调页面就是如许的:
https://i-blog.csdnimg.cn/direct/821f2482644f46a9a298fb4651859bfb.png
到这里前期准备就可以了,下面我们就可以开始微调我们自己的大模型了。
二、微调模型
1、熟悉界面
进入到微调界面我们可以看到许多的参数,但是许多实在我们也用不着不用改,下面我来主要先容一下界面以及一些常用的参数。
模型权重文件设置
https://i-blog.csdnimg.cn/direct/514163b66f4c41d9ba85a9c3aa62d241.png
训练参数设置
https://i-blog.csdnimg.cn/direct/efc2b994431446e4b4e5f6717d262f05.png
评估参数设置
https://i-blog.csdnimg.cn/direct/6d0bed93cba44a74b135ae34b81fc739.png
模型对话设置
https://i-blog.csdnimg.cn/direct/4ea8329e30dc41d6bf7a67087b8cddf0.png
导出模型设置
https://i-blog.csdnimg.cn/direct/4a816da6359d45cd9b6b23fc1266ba29.png
2、下载大模型
这里我们使用前面提到的modelscope第三方库帮助我下载模型文件。新建py文件,定名为download.py,输入以下代码:
from modelscope import snapshot_download
model_path="qwen/Qwen1.5-7B-Chat"#选择想要微调的大模型,这里我选择qwen
cache_path="/root/autodl-tmp" #云平台建议下载到这个目录,是数据盘,可以扩增
snapshot_download(model_path, cache_dir=cache_path) model_path可以更换为huggingface或者modelscope上的模型目录。在终端中运行该文件即可下载:
python download.py https://i-blog.csdnimg.cn/direct/8fa0a71608bc43509cdb88700db6d955.png
下载完成后我们可以在autodl-tmp/qwen/Qwen1___5-7B-Chat文件夹下(绝对路径为/root/autodl-tmp/qwen/Qwen1___5-7B-Chat)找到我们的模型,如下:
https://i-blog.csdnimg.cn/direct/767f30e168874d47acbb6415538d00ed.png
3、准备微调数据集
项目中使用到的数据集一样平常都存放在工程下的data文件夹中(绝对路径:/root/LLaMA-Factory/data),如下:
https://i-blog.csdnimg.cn/direct/713e42499c344c0195d0264fa38dc4c5.png
在llama factory中我们对于数据集的格式也是有要求的,我们可以在data文件夹下的README_zh.md中可以看到,分别是alpaca和sharegpt格式,我在这使用的是alpaca的微调数据格式:
https://i-blog.csdnimg.cn/direct/dced08ca2c4347a88072d1b5f385fedf.png
我们来细致看一下alpaca数据格式的要求:
https://i-blog.csdnimg.cn/direct/029215d0d4164ed6a2ad27a5ecfc1f97.png
在这里我主要使用两个数据集,一个是项目自带的identity.json数据集,另一个是我从modelscope上下载的脑经急转弯数据集。
identity.json数据集如下,我们可以修改此中{{name}}以及{{author}}的值让他可以或许成我们自己的大模型。我对它做如下修改:
https://i-blog.csdnimg.cn/direct/c09c5bab673c41b99fefac1e4fb750c6.png
https://i-blog.csdnimg.cn/direct/e2a69d4f543c4523a629846908ed78aa.png
另一个脑经急转弯数据集如下,主要是一些问题等,方便我们测试它的微调结果是否学习到了这些问题。点击下载我们可以将数据集下载到我们本地。
https://i-blog.csdnimg.cn/direct/b032d025f97848b89f10a2ece525d23c.png
点击上传可以将我们下载的数据集传到服务器上,这里我将它定名成了jokes.json。https://i-blog.csdnimg.cn/direct/d4a5f897e19b4a50a69da645d760ebc3.png
切记:当我们自己上传数据集以后要去dataset_info.json文件中注册数据集,要不然再前端页面无法选择该数据集。
我们可以看到这里注册了许多项目提供测试的数据集,此中就包罗了我们的一个数据集identity.json,但是我们的jokes.json还没有注册进去。我们仿照它的格式写入我们的jokes.json,如下:
https://i-blog.csdnimg.cn/direct/06dedc2b2f304a94999644c283230698.png
https://i-blog.csdnimg.cn/direct/9ee37bb2cbbc4274a3f3082babffc0cc.png
如今我们就可以在前端页面中选择我们上传的数据集了:
https://i-blog.csdnimg.cn/direct/f70a9cc7421a4d75b988b1176f7f8652.png
点击Preview dataset可以预览到我们选择的数据集。
https://i-blog.csdnimg.cn/direct/7f04b802aa2149a38fe3db4989ff8e4f.png
4、开始微调
回到我们的前端微调界面,设置参数如下:
https://i-blog.csdnimg.cn/direct/858c02d267904baf9c24d178ec9b6f51.png
留意这里模型的下载路径我设置为了模型的绝对路径,从/root开始。
留意这里我们的epochs设置为了30,一样平常epochs设置在20~50左右。对于参数较少的模型,我们可以设置一个较小的epochs;而对于参数多的模型则需要较大的epochs来让模型充分习得我们的数据集。(留意:对于一个模型设置过多的epochs大概会导致模型过拟合,结果产生的效果并不好。)
https://i-blog.csdnimg.cn/direct/50918db0ab624f9ea43f9cf341559f5e.png
点击start开始训练我们就可以等候lora权重文件的生成。
训练中的界面:
https://i-blog.csdnimg.cn/direct/1d72313764cc477b8f2b7a7fd3c1a724.png
训练完后的界面:
https://i-blog.csdnimg.cn/direct/fec810aa0e1d452b9e1e4c4bd3ed5853.png
根据Output dir我们可以找到训练后的lora权重文件、训练日记以及loss图表等训练过程内容。
在saves文件夹中,保存了我们每一次训练后的结果:
https://i-blog.csdnimg.cn/direct/c8830c92a86843cb8c37d515e3889e2f.pnghttps://i-blog.csdnimg.cn/direct/bb2de355b93a446a82b6e171c155f0af.png
打开train_results.json我们可以看到,我们的train_loss为0.44已经接近0了。
https://i-blog.csdnimg.cn/direct/da75f50f86374dd78f20c25628a4d6d7.png
5、模型评估
当我们训练完模型得到lora权重以后,可以对模型权重和lora权重合并进行测试。我们回到前端微调界面,点击“Evaluate&Predict”,选择模型权重,训练得到的lora权重以及数据集,点击start开始评估:
https://i-blog.csdnimg.cn/direct/cbbe8d19174f418fb896e4d87d6bfb47.png
评估竣事后,我们可以看到具体的评分:
https://i-blog.csdnimg.cn/direct/15430faee3b746aa945b48e57a65e352.png
当然我们也可以进入到保存的评估文件夹中查察,同样在saves文件夹中可以找到:
https://i-blog.csdnimg.cn/direct/f16327f10846490598dda3b3bd33ba47.png
6、模型测试
当模型评估完以后我们也可以手动对微调完的模型进行测试,回到前端微调界面,点击“chat”,设置好权重文件后,加载模型,我们就可以测试lora权重合并后的模型效果:
https://i-blog.csdnimg.cn/direct/e64a088ea45e4e7f9e8b5b4456ca7a85.png
我们输入语句进行测试,可以看到identity.json中的数据已经习得:
https://i-blog.csdnimg.cn/direct/a92ed457dec3431a82da7af2836cbebc.png
https://i-blog.csdnimg.cn/direct/a140f0ca7b63487fa31994034236309d.png
再次,我们询问它有关jokes.json中的问题,可以看到回答的也是很精准:
https://i-blog.csdnimg.cn/direct/9c8a41f62b5b4aa7a767168cfc902272.png
https://i-blog.csdnimg.cn/direct/75b5884a6e694fd5afea3819beab6cdf.png
那么就证明我们的微调基本上是乐成了。如果此时你照旧对结果不满意,可以回到第二步重新准备微调数据集,再次微调;如果已经满意那就进入末了一步——模型导出。
7、模型导出
在/autodl-tmp中新建一个exports文件中(绝对路径:/root/autodl-tmp/exports)用于存储我们导出的合并模型:
https://i-blog.csdnimg.cn/direct/f59188f8c6c94b43a5463691834b73c6.png
回到前端微调界面,点击“Export”,设置参数后,点击导出:
https://i-blog.csdnimg.cn/direct/eb7997a6fbf6428f9a909883c706ee7c.png
乐成导出:
https://i-blog.csdnimg.cn/direct/c504fd06cbcc43f79afeeb572c06d9ed.png
在exports文件夹下我们可以查察导出后的合并模型:
https://i-blog.csdnimg.cn/direct/2202d9daa24d43fab543e433e988e32b.png
三、竣事
到这里我们就完成了模型的微调,如果还有疑惑可以在下面评论,让各人一起解决,下一篇我们要将模型使用llama.cpp转化为gguf格式并量化导出到本地。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]