LLaMA Factory:大语言模型微调的开源工具指南
LLaMA Factory 是一个统一的开源框架,集成了多种高效微调方法,支持通过 Web UI 灵活定制百余个 LLM 的微调而无需编写代码。它涵盖优化型技术如 LoRA、QLoRA、DoRA 以及计算型技术如 Flash Attention,显著降低显存占用并提升训练效率。其核心特性、部署安装步骤、Web UI 使用流程、数据准备规范及架构组成,并提供常见问题解决方案,帮助用户快速上手大模型微调任务。

LLaMA Factory 是一个统一的开源框架,集成了多种高效微调方法,支持通过 Web UI 灵活定制百余个 LLM 的微调而无需编写代码。它涵盖优化型技术如 LoRA、QLoRA、DoRA 以及计算型技术如 Flash Attention,显著降低显存占用并提升训练效率。其核心特性、部署安装步骤、Web UI 使用流程、数据准备规范及架构组成,并提供常见问题解决方案,帮助用户快速上手大模型微调任务。

LLM(大语言模型)微调一直是技术落地中的难点,不仅因为微调需要大量的计算资源,而且微调的方法繁多。尝试每种方法的效果往往需要安装大量的第三方库和依赖,甚至要接入复杂的框架,导致许多开发者在环境配置阶段就放弃了。
今天分享一个开源项目——LLaMA Factory,它可以快速进行 LLM 微调。该项目不仅运行效率高,还支持微调过程中的可视化操作,极大地降低了使用门槛。
微调大型语言模型需要付出巨大的计算代价,因此高效微调技术应运而生。这些技术主要可分为两大类:优化型和计算型。
冻结微调 (Freeze-tuning) 这是一种常见的高效微调方法,它将大部分参数固定不变,只微调解码器的少数几层。这种方式可以大幅降低训练成本,但也可能导致模型性能下降。
梯度低秩投影 (GaLore) 将梯度投影到一个低维空间,从而达到全参数学习的效果,但内存使用量大幅降低。这种方法在大模型上表现较好,因为大模型往往存在较多冗余,投影后损失不大。
低秩适配 (LoRA) 非常高效的微调方法,它不会改变预训练模型的原始权重参数。相反,LoRA 在需要微调的层上引入了一对小的可训练矩阵,称为低秩矩阵。在前向过程中,模型会对原始权重张量和 LoRA 低秩矩阵进行相乘运算,得到改变后的权重用于计算。而在反向传播时,只需要计算和更新这对小矩阵的梯度。
这种做法的优势是,可以在不存储新权重的情况下实现模型的微调,从而极大节省内存。对于大型语言模型,权重参数往往占用大部分显存,LoRA 能让训练过程只需少量额外显存即可进行。
当结合量化 (Quantization) 技术时,LoRA 的内存优势就更加明显了。量化是将原本占用较多字节的 float32/float16 类型权重压缩为 int8/int4 等低比特类型表示,从而降低存储需求。量化后的 QLoRA (Quantized LoRA) 能将参数内存占用从每个参数 18 字节降至仅 0.6 字节,是一种极高效的微调方案。
实验表明,LoRA 和 QLoRA 在较小模型上的效果最为出众,能以最小的内存 overhead 获得与全量精调相当的性能。其中当结合量化技术时 (QLoRA),内存占用会进一步降低。
分解权重低秩适配 (DoRA) 在 LoRA 的基础上进行了改进。DoRA 将预训练权重矩阵分解为量级分量和方向分量两部分。它只对方向分量部分应用 LoRA,而量级分量保持不变。
这样做的可能性是,预训练权重中的方向分量可能包含了更多任务相关的知识,而量级分量则更多地控制输出的数值范围。因此,只对方向部分进行低秩微调,可能会获得更好的效果。
DoRA 相比 LoRA 的优势在于,使用相同内存开销时,往往能取得更高的性能。但它也增加了计算量,需要预先对权重进行分解。因此在不同场景下,LoRA 和 DoRA 都有可能是更优选择。
LoRA、QLoRA 和 DoRA 等优化型方法极大降低了 LLM 微调的内存需求,是高效微调中不可或缺的重要技术。LLAMAFACTORY 框架对这些技术进行了很好的统一实现,大大简化了用户的使用流程。
LLAMAFACTORY 采用了模块化设计,可以灵活插入和切换上述各种优化技术。用户无需 coding,只需在 LLAMABOARD 界面上勾选所需方法即可。
混合精度训练和激活重计算是最常见的两种节省计算量的方法。前者使用低精度 (如 FP16) 来存储激活值和权重;后者则通过重新计算激活值来节省存储,从而降低内存占用。
闪电注意力 (Flash Attention) 是一种对注意力层进行优化的新算法,它以硬件友好的方式重新安排计算过程,大幅提高性能。S2 注意力 (S2 Attention) 则致力于解决长文本注意力计算时的内存开销问题。
此外,各种量化技术如 LLM.int8 和 QLoRA,能将权重和激活值压缩至低精度表示,从而节省大量内存。不过量化模型只能使用基于适配器的微调方法 (如 LoRA)。
Unsloth 则是针对 LoRA 层的反向传播进行了优化,降低了梯度计算所需的浮点运算数,加速了 LoRA 训练过程。
LLAMAFACTORY 将上述技术进行了整合,自动识别模型结构来决定启用哪些优化手段。用户无需关心技术细节,只需选择期望的内存占用和性能要求即可。同时,LLAMAFACTORY 还支持分布式训练加速等功能。但分布式训练要在 CLI 上进行。
国内很多大模型都是用这个技术微调的,这些数据来自作者的 Github 的 README 文档:
如果你也想尽快推出自己的大模型,这个框架肯定是你学习成本最小的方式。
LLaMA-Factory 是一个统一的框架,集成了一套先进的高效训练方法。它允许用户通过内置的 Web UI 灵活定制 100 多个 LLMs 的微调,而无需编写代码。
项目具有以下的特色:
与 ChatGLM 官方的 P-Tuning 微调相比,LLaMA Factory 的 LoRA 微调提供了 3.7 倍的加速比,同时在广告文案生成任务上取得了更高的 Rouge 分数。结合 4 比特量化技术,LLaMA Factory 的 QLoRA 微调进一步降低了 GPU 显存消耗。
LLaMA Factory 的部署安装非常简单,只需要按照官方仓库中的步骤执行即可,执行命令如下:
# 克隆仓库
git clone https://github.com/hiyouga/LLaMA-Factory.git
# 创建虚拟环境
conda create -n llama_factory python=3.10
# 激活虚拟环境
conda activate llama_factory
# 安装依赖
cd LLaMA-Factory
pip install -r requirements.txt
接下来是下载 LLM,可以选择自己常用的 LLM,包括 ChatGLM, BaiChuan, QWen, LLaMA 等,这里我们下载 BaiChuan 模型进行演示:
# 方法一:开启 git lfs 后直接 git clone 仓库
git lfs install
git clone https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat
# 方法二:先下载仓库基本信息,不下载大文件,然后再通过 huggingface 上的文件链接下载大文件
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat
cd Baichuan2-13B-Chat
wget "https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat/resolve/main/pytorch_model-00001-of-00003.bin"
方法一的方式会将仓库中的 git 记录一并下载,导致下载下来的文件比较大,建议是采用方法二的方式,速度更快整体文件更小。
启动 LLaMA Factory 的 WebUI 页面,执行命令如下:
CUDA_VISIBLE_DEVICES=0 python src/train_web.py
启动后的界面分为上下两部分,上半部分是模型训练的基本配置,有如下参数:
full:将整个模型都进行微调。freeze:将模型的大部分参数冻结,只对部分参数进行微调。lora:将模型的部分参数冻结,只对部分参数进行微调,但只在特定的层上进行微调。下半部分是一个页签窗口,分为 Train、Evaluate、Chat、Export 四个页签,微调先看 Train 界面,有如下参数:
数据准备说明: LLaMA Factory 支持多种数据集格式,最常见的是 JSONL 格式。每条数据应包含 instruction(指令)、input(输入)和 output(输出)字段。例如:
{"instruction": "你是谁?", "input": "", "output": "我是由某某公司开发的 AI 助手"}
确保所有数据遵循此格式,否则可能导致训练报错。
参数设置完后点击预览命令按钮可以查看本次微调的命令,确认无误后点击开始按钮就开始微调了,因为数据量比较少,大概几分钟微调就完成了 (具体时间还要视机器配置而定,笔者使用的是 A40 48G GPU),在界面的右下方还可以看到微调过程中损失函数曲线,损失函数的值越低,模型的预测效果通常越好。
进入 Chat 页签对微调模型进行试用。首先点击页面上的刷新断点按钮,然后选择我们最近微调的断点名称,再点击加载模型按钮,等待加载完成后就可以进行对话了,输入微调数据集中的问题,然后来看看微调后的 LLM 的回答吧。
LLaMA-Factory 由三个主要模块组成:模型加载器(Model Loader)、数据处理器(Data Worker)和训练器(Trainer)。
在人工智能领域,大型语言模型 (LLM) 微调(Fine-Tuning)是当下最热门的话题之一。总体来说 LLaMA Factory 是一个非常优质的工具,在 LLM 微调中帮助用户节省了大量的精力。
这些模型拥有惊人的语言理解和生成能力,但要微调和部署它们以适应特定任务,往往需要大量计算资源和专业知识,代码调试还得有深厚的技术功底。
通过本指南,您可以快速了解 LLaMA Factory 的核心功能并完成基础微调任务。如需更深入的功能,建议查阅官方文档获取最新配置项。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online