大模型私人定制:5分钟教你不写一行代码微调构建属于你的大模型(使用llama-factory微调Qwen大模型)

517 阅读12分钟

前言

DeepSeek, QWQ一系列实力强劲大模型的发布标志着我国在人工智能大模型领域进入世界领导者行列。越来越多领域开始关注并使用大模型。各行各业都积极赋能并开发相关专业领域大模型,比如东南大学推出的“法衡-R1”法律大模型,哈工大推出的“华佗”医疗诊断模型都取得了优异表现。那么它们是如何将大模型这个“博学家”变成领域的“专家”呢?这就需要使用我们今天分享的大模型微调技术。这篇文章带你5分钟学会使用llama-factory微调大模型,不写一行代码,一起来看看吧~

一、什么是大模型微调?

1.1 为什么进行大模型微调

训练时为保证大模型的通用能力会使用多类别数据,例如:数学类别,代码类别数据等等来训练。训练后的大模型是一个“博学家”,具备回答所有类别基础问题的能力,但是在面对更深度的专业领域问题时,大模型的表现往往一般。为了让大模型在某个专业领域具备突出能力,需要使用专业领域的数据集,对大模型进行进一步的参数微调(继续训练),提升它在专业领域方面的表现。

1.2 大模型微调原理简介

关于微调的概念大家可参考我的博文大模型瘦身指南。大模型微调分为全参微调和高效微调,全参微调就是将大模型所有层的参数进行微调,优点是可以充分利用已有大模型的特征,缺点是调整全部参数需要消耗大量的计算资源。高效微调旨在最小化微调参数量和计算复杂度提升训练模型在新任务上的表现。即使在计算时间和资源受限的情况下,高效微调技术也能够利用模型的知识快速适应新任务。

高效微调常用的方法是LORA,示意图如下,左边是模型的原始权重,在训练阶段原始模型参数是不变的。右边是被训练的升维和降维矩阵,这两个矩阵的参数量要比原始模型参数小很多。LORA的思想很简单,词向量同时输入原始模型权重和升降维权重,得到的两个结果相加得到最终结果(相当于在原有知识上附加了一层知识表示,可以看成专业领域的知识增量),我们本次微调也使用LORA方法。

LORA.png

二、使用llama-factory进行微调

2.1 llama-factory简介

llama-factory ( github.com/hiyouga/LLa… )是一个国内北航开源的低代码大模型训练框架,专为大语言模型的微调而设计。其主要功能特点包括:

  1. 支持种类丰富的大模型,支持高效且低成本地对100多个模型进行微调
  2. 提供了用户友好的Web界面,用户无需代码就可轻松上手
  3. 丰富的数据集选项,支持多种格式数据集选项并提供范例,用户可以选择自带的数据集或自己生成数据集修改成相应格式进行微调。
  4. 多样算法支持,支持包括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.png

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(别骂了别骂了,没在实验室,只能用手头电脑给大家分享了)。

3.png

4.png

如果你的显示和上面不一样,可以在英伟达官网 developer.nvidia.com/cuda-12-2-0… 中下载cuda的exe安装包,下载之后双击运行一路安装即可(建议安装到C盘)

5.png

2.2.2 安装anaconda管理虚拟环境

anaconda是一个管理多版本python的工具,它允许你在PC上安装多个python版本,避免不同环境间的污染。在Anaconda官网www.anaconda.com/download/su… 下载anaconda安装包,选择安装路径(要记住安装路径),一路点击next, 注意在出现环境变量选项时按下图勾选:

7.png

安装好之后我们打开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

8.png

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命令,出现下图内容表示你已经安装成功

9.png

特别注意: 为保证微调顺利执行,除了检查llama-factory安装成功外,还需要保证成功安装了gpu版本的pytorch, 在llama_factory虚拟环境中执行如下命令:

import torch
print(torch.__version__) # 输出Pytorh版本
print(torch.version.cuda) # 输出pytorch cuda版本,
print(torch.cuda.is_available())  # 输出为True,则安装无误

10.png

有用户反馈直接通过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命令,模型就会被下载到当前目录下,我这边的执行结果如下:

11.png

2.3.2 数据集构建

我们如何构造模型微调的数据集呢?llama-factory给我们展示了很多微调数据集的格式,在llama-factory目录下的data文件夹中

18.png

我们这里以alpca_zh_demo.json文件为例讲解,数据必须保存为json列表格式,列表中每个json对象都应该包含instruction: 指示也就是用户问题, input:用户输入数据, output:大模型输出三部分,如下图,在构造自己数据集的时候,也应该把自己的数据构造为json问答对的格式,同时把构造的数据集放在llama-factory文件夹下的data文件夹中。

19.png

注意: 构造数据集后还要完成数据集注册,具体做法是在llama-factory目录下的data文件夹下,打开dataset_info.json文件,在其中按照下图标注的格式填入你的数据集名称,这样在llama-factory界面选择时才能识别到你的数据集。 20.png 21.png

2.3.3 模型参数设置

在命令行中执行llamafactory-cli webui, 稍等片刻默认浏览器会自动进入llama-factory界面,没自动进入的小伙伴按照命令行中的地址进入,我这里是http://0.0.0.0:7860

13.png

14.png

接下来我们就详细解读llama-factory的每个参数设置:

语言: 微调中文模型,我们选择zh
模型名称: llama-factory支持很多模型,我们选择 Qwen2.5-0.5B-Instruct
模型路径: 从modelscope下载模型的绝对路径,我这里是 E:\LLamaFactory\Qwen2.5-0.5B-Instruct
15.png 微调方法: 选择lora
检查点路径: 你如果以前使用过llama-factory训练模型,训练得到的结果会默认保存下来,我们把这个中间结果叫检查点,检查点路径就是你要不要接着你以前的检查点接着训练,这里我们首次使用llama-factory,空白即可。
16.png 量化等级: 我们这里不需要量化,选择none, 量化表示将模型精度降低从而缩减模型大小(具体解释可见我以前的科普文章:大模型瘦身指南:微调,量化,蒸馏)。
量化方法: 我们不需要量化,这里随便选一个即可
提示模板: 千问模型选择qwen
RopE插值方法: 这个是用来扩展模型上下文长度的,rope会使模型理解输出更长的上下文,我们这次不需要扩展模型上下文长度,选择none
加速方式: 不需要特别加速,我们这里选择auto
17.png

选择Train窗口,设置我们的训练方法

训练方式: Supervised Fine-Tuning有监督微调
数据文件夹: data,也就是存放我们数据集文件的地方
数据集: 构造并注册的数据集,我们这里选择alpaca_zh_demo, 还有预览数据集功能。
22.png 学习率: 可以理解为模型学习的快慢,学习率越大模型收敛越快,但学的比较粗糙,学习率越小模型收敛越慢但学的精细。这里取经验值5e-5
训练轮数: 同样的数据要重复训练几次,我们这里取2
最大梯度范数: 用于梯度裁剪的范数,经验值1.0
最大样本数: 比你的数据集中数据个数大即可,我这里随意填了10000
计算类型: 没有量化,还是选择原始bf16
截断长度: 大模型最多能处理的文本长度,这里是2048
批处理大小: 大模型每次处理的数目,和损失函数有关,这里选2
梯度累积: 大模型依据多少步才调整参数,这里选择8,大模型相当于在8*2=16个例子后才调整参数
验证集比例: 我们人工验证取0
学习率调节器: 这里默认取cosine即可
23.png 还需要设置lora参数

LORA秩: 默认为8即可,表示Lora参数量
LORA缩放系数: 写为16,经验值
其余设置均可保持默认 25.png

2.3.4 模型微调

以上参数设置好之后,我们填入输出模型的目录和配置路径(保存我们上面设置的配置参数),同时llama-factory会自动检测我们gpu的数量并填入:

26.png

点击开始后,llama-factory自动开始训练,训练过程中的日志也会在网站下方打印,右侧的图片也会对损失函数进行展示,方便用户观察训练中损失, 命令行中也会打印当前进度:

27.png 28.png

2.3.5 模型评测

模型训练好之后需要评估我们的模型是否正确,首先需要把我们的模型导出,新建本地目录,我这里是E:\LLamaFactory\Qwen2.5-0.5B-SFT, 选择导出模式,并填入我们训练完成的检查点路径,点击开始导出:

30.png 31.png

刷新浏览器网站,我们切换llama-factory到chat模式,保持检查点路径为空,同时修改模型目录为我们新导出的模型文件目录,我这里是E:\LLamaFactory\Qwen2.5-0.5B-SFT, 点击加载模型:

32.png

加载我们训练好的模型,拖到页面底部,从数据集中挑一个问题进行提问:【识别并解释给定列表中的两个科学理论:细胞理论和日心说。】

29.png

33.png

以下是微调后模型回答:

34.png

将模型路径改为原始模型路径E:\LLamaFactory\Qwen2.5-0.5B-Instruct,测试:

35.png

可以看到该问题微调模型回答与原始模型回答已经有了很大不同,显然微调模型更依照我们的数据集进行回答。以上只是针对这个案例的简单评测,真实评测中需要使用测试集大规模评测,或通过语义相似度检测和专业人员评测多种手段进行精细评测。

三、总结展望

通过以上分享我们成功使用llama-factory在不写一行代码情况下微调了大模型。然而限于篇幅原因,还有很多需要提升的地方:

  1. 数据集构建: 如何从大量文本中构建适合模型训练的数据集
  2. 模型微调参数: 模型微调参数为什么要这么设置?还涉及很多深度学习的专业知识
  3. 模型部署: 目前我们只是微调成功大模型,距离真正使用还需要将其部署在Ollama等大模型 服务中
  4. 微调方法: 除了llama-factory, unsloth也是目前最广泛的微调工具,甚至超越了llama-factory,我们之后也会出unsloth微调qwq和deepseek-r1的分享。

以上的内容笔者都会出分享教程,感兴趣可以关注wx公众号:大模型真好玩,免费的工作实践中大模型开发使用经验和资料分享~