往期回顾
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模型进行微调。
一、前期准备
1、算力租赁
一般家用电脑或者笔记本没有足够的显存、内存来进行模型微调,因此我们需要租借第三方提供的算力资源,本次我使用的是AutoDL算力云。
首先我们来确认想要微调的模型需要多少资源才能跑起来,下面是llama factory官方的推荐图:
对于我们的7b模型进行LoRA微调大概是需要16GB的显存。
其次我们还需要注意需要依赖的Python环境、库版本,尤其是CUDA的版本,因为我们要使用显卡加快微调速度,如下:
下面根据我们的需求来配置算力资源:
这里我选择了1GPU,24GB左右的显存。如果微调的参数更多可以选择显存更高,GPU数更多的。然后我们来配置基础的Python微调环境:
点击立即创建,我们就得到了一台高算力计算机:
2、微调环境搭建
点击JupyterLab进入,打开终端
输入下面指令进行学术资源加速
source /etc/network_turbo
再输入命令克隆llama factory项目源码:
git clone https://github.com/hiyouga/LLaMA-Factory.git
完成后如下:
由于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
出现以下的提示表示创建、激活成功:
下面安装依赖的其他第三方库。进入项目所在的目录,输入以下代码安装依赖:
cd LLaMA-Factory
pip install -r requirements.txt
pip install -e .[metrics] #下载llama factory命令
再多安装一个modelscope,modelscope也叫魔塔社区(类似huggingface),在这个平台上我们可以找到许多大模型的源码,包括ollama、qwen和gemma等,也包括许多训练的数据集,我们下载的是它的python库,可以方便的帮我们下载各种文件:
pip install modelscope -U
一切依赖下载完毕以后,我们就可以启动llama factory的前端微调界面了(注意:要在/LLaMA-Factory的项目路径下),否则会找不到llamafactory-cli的指令,如下:
CUDA_VISIBLE_DEVICES=0 llamafactory-cli webui
特别注意这里“7860”的端口,后面需要用到。
但是由于项目是启动在远程服务器上的,因此我们想要访问到微调界面还需要配置代理:
返回AutoDL,点击自定义服务
根据本地计算机环境,下载对应的SSH隧道工具,下载完后直接解压即可,解压后双击执行exe文件:
点击开始代理,从给出的网址访问,我们就可以在本地直接远程操控微调了:
进入到微调页面就是这样的:
到这里前期准备就可以了,下面我们就可以开始微调我们自己的大模型了。
二、微调模型
1、认识界面
进入到微调界面我们可以看到许多的参数,但是许多其实我们也用不着不用改,下面我来主要介绍一下界面以及一些常用的参数。
模型权重文件设置
训练参数设置
评估参数设置
模型对话设置
导出模型设置
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
下载完成后我们可以在autodl-tmp/qwen/Qwen1___5-7B-Chat文件夹下(绝对路径为/root/autodl-tmp/qwen/Qwen1___5-7B-Chat)找到我们的模型,如下:
3、准备微调数据集
项目中使用到的数据集一般都存放在工程下的data文件夹中(绝对路径:/root/LLaMA-Factory/data),如下:
在llama factory中我们对于数据集的格式也是有要求的,我们可以在data文件夹下的README_zh.md中可以看到,分别是alpaca和sharegpt格式,我在这使用的是alpaca的微调数据格式:
我们来仔细看一下alpaca数据格式的要求:
在这里我主要使用两个数据集,一个是项目自带的identity.json数据集,另一个是我从modelscope上下载的脑经急转弯数据集。
identity.json数据集如下,我们可以修改其中{{name}}以及{{author}}的值让他能够成我们自己的大模型。我对它做如下修改:
另一个脑经急转弯数据集如下,主要是一些问题等,方便我们测试它的微调结果是否学习到了这些问题。点击下载我们可以将数据集下载到我们本地。
点击上传可以将我们下载的数据集传到服务器上,这里我将它命名成了jokes.json。
切记:当我们自己上传数据集以后要去dataset_info.json文件中注册数据集,要不然再前端页面无法选择该数据集。
我们可以看到这里注册了许多项目提供测试的数据集,其中就包括了我们的一个数据集identity.json,但是我们的jokes.json还没有注册进去。我们仿照它的格式写入我们的jokes.json,如下:
现在我们就可以在前端页面中选择我们上传的数据集了:
点击Preview dataset可以预览到我们选择的数据集。
4、开始微调
回到我们的前端微调界面,配置参数如下:
注意这里模型的下载路径我设置为了模型的绝对路径,从/root开始。
注意这里我们的epochs设置为了30,一般epochs设置在20~50左右。对于参数较少的模型,我们可以设置一个较小的epochs;而对于参数多的模型则需要较大的epochs来让模型充分习得我们的数据集。(注意:对于一个模型设置过多的epochs可能会导致模型过拟合,结果产生的效果并不好。)
点击start开始训练我们就可以等待lora权重文件的生成。
训练中的界面:
训练完后的界面:
根据Output dir我们可以找到训练后的lora权重文件、训练日志以及loss图表等训练过程内容。
在saves文件夹中,保存了我们每一次训练后的结果:
打开train_results.json我们可以看到,我们的train_loss为0.44已经接近0了。
5、模型评估
当我们训练完模型得到lora权重以后,可以对模型权重和lora权重合并进行测试。我们回到前端微调界面,点击“Evaluate&Predict”,选择模型权重,训练得到的lora权重以及数据集,点击start开始评估:
评估结束后,我们可以看到详细的评分:
当然我们也可以进入到保存的评估文件夹中查看,同样在saves文件夹中可以找到:
6、模型测试
当模型评估完以后我们也可以手动对微调完的模型进行测试,回到前端微调界面,点击“chat”,配置好权重文件后,加载模型,我们就可以测试lora权重合并后的模型效果:
我们输入语句进行测试,可以看到identity.json中的数据已经习得:
再次,我们询问它有关jokes.json中的问题,可以看到回答的也是很精准:
那么就证明我们的微调基本上是成功了。如果此时你还是对结果不满意,可以回到第二步重新准备微调数据集,再次微调;如果已经满意那就进入最后一步——模型导出。
7、模型导出
在/autodl-tmp中新建一个exports文件中(绝对路径:/root/autodl-tmp/exports)用于存储我们导出的合并模型:
回到前端微调界面,点击“Export”,设置参数后,点击导出:
成功导出:
在exports文件夹下我们可以查看导出后的合并模型:
三、结束
到这里我们就完成了模型的微调,如果还有疑惑可以在下面评论,让大家一起解决,下一篇我们要将模型使用llama.cpp转化为gguf格式并量化导出到本地。
总结
### 文章总结**标题**: 往期回顾:使用llama factory进行大模型LoRA微调、转换及部署全过程
**主要内容**:
本文详细记录了作者通过租用AutoDL算力云资源,使用llama factory项目对qwen大模型进行LoRA微调,并将其转化为gguf格式后量化的完整过程。文章分为前期准备、微调模型、和结束三个部分。
**前期准备**:
1. **算力租赁**:
- 租用AutoDL算力云的计算资源,选择合适配置的GPU和显存(如1GPU, 24GB显存)。
- 配置依赖的Python环境和库版本,特别是CUDA版本,用于加速模型微调。
2. **微调环境搭建**:
- 使用JupyterLab进入,配置学术资源加速和虚拟环境(conda)。
- 克隆llama factory项目源码,安装必要的第三方库(包括llama factory,modelscope等)。
- 配置并启动前端微调界面,设置代理访问本地计算机进行远程操作。
**微调模型**:
1. **界面认识**:了解微调界面的各项参数设置,包括模型权重、训练参数、评估参数、模型对话和导出设置。
2. **下载大模型**:
- 通过modelscope下载所需的大模型文件(例如qwen1.5:7b)。
3. **准备微调数据集**:
- 参照alcaca或sharegpt格式准备数据集,上传至服务器并在dataset_info.json中注册。
4. **开始微调**:
- 配置相应参数(如epochs数等),开始训练并监控训练和loss过程。
5. **模型评估**:
- 微调完成后,通过“Evaluate&Predict”功能对模型进行评估,查看评分结果。
6. **模型测试**:
- 使用前端“chat”功能测试微调后的模型效果,输入问题查看回答精度。
7. **模型导出**:
- 在前端微调界面中配置导出参数,将微调后的模型导出至指定文件夹。
**结束**:
- 完成上述步骤后,即完成模型的微调、评估和导出,为接下来的模型转换和部署做准备。
文章还包括了对于模型转化、量化以及本地Ollama部署的预告,在下一篇中将详细介绍。