LLaMA Factory:大语言模型微调的终极开源工具
LLM(大语言模型)微调一直都是技术难点,不仅因为微调需要大量的计算资源,而且微调的方法也很多。尝试每种方法的效果往往需要安装大量的第三方库和依赖,甚至要接入一些框架,可能在还没开始微调就已经因为环境配置而放弃了。
今天我们分享一个开源项目可以快速进行 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 文档:
- StarWhisper: 天文大模型 StarWhisper,基于 ChatGLM2-6B 和 Qwen-14B 在天文数据上微调而得。
- DISC-LawLLM: 中文法律领域大模型 DISC-LawLLM,基于 Baichuan-13B 微调而得,具有法律推理和知识检索能力。
- Sunsimiao: 孙思邈中文医疗大模型 Sumsimiao,基于 Baichuan-7B 和 ChatGLM-6B 在中文医疗数据上微调而得。
- CareGPT: 医疗大模型项目 CareGPT,基于 LLaMA2-7B 和 Baichuan-13B 在中文医疗数据上微调而得。


