首页 > 教程攻略 > ai资讯 >20K star!搞定 LLM 微调的开源利器

20K star!搞定 LLM 微调的开源利器

来源:互联网 时间:2026-08-03 14:23:35

大型语言模型的微调,说白了就是个“烧钱又烧脑”的活儿。计算资源得够,技术细节还得掰扯清楚,让人还没开始就想打退堂鼓。今天聊的这个开源项目,算是把这条路给铺平了不少——它不仅反赌,还能在微调过程中实时可视化,名字叫 LLaMA Factory。

关于 LLM 微调

微调大型语言模型,代价确实不小。正因如此,高效微调技术才成了刚需。目前主流的技术路线可以分为两类:优化型和计算型。

优化型技术

冻结微调(Freeze-tuning)是种比较直接的办法:大部分参数固定不动,只微调解码器的少数几层。成本降下来了,但模型性能可能也会跟着打折扣。

梯度低秩投影(GaLore)的思路更巧妙——把梯度投影到低维空间,实现全参数学习的效果,但内存占用却大幅降低。这个方法在大模型上表现不错,毕竟大模型本身冗余就多,投影后损失有限。

低秩适配(LoRA)则是当前最火的方案之一。它不碰预训练模型的原始权重,而是在需要调整的层上塞进一对小小的可训练矩阵(也就是低秩矩阵)。前向计算时,原始权重和这个小矩阵一通相乘,得到调整后的权重;反向传播时,只需更新这对小矩阵的梯度就好。好处很明显:不用存新权重就能做微调,把内存省了下来。对大语言模型这种“吃”显存的大户来说,LoRA 只需额外一点点显存就能开干。

如果配合量化(Quantization)技术,LoRA 的优势就更突出了。量化就是把 float32/float16 这种占用空间较大的权重压缩成 int8/int4 等低比特格式,存储需求大降。量化后的 QLoRA 能把参数内存占用从每个参数 18 字节压到不到 1 字节,堪称“极致省内存”的代表。

实验表明,LoRA 和 QLoRA 在较小模型上的效果尤其出彩,只需极小的内存开销,就能达到接近全量微调的性能。一旦加上量化(QLoRA),内存占用还能再降一截。

还有种方法叫分解权重低秩适配(DoRA),它在 LoRA 基础上做了改良。DoRA 把预训练权重矩阵拆成量级分量和方向分量两部分,只对方向分量做低秩适配,量级分量保持原样。这一做法的逻辑在于:方向分量往往承载了更多与任务相关的知识,而量级分量更多是控制输出数值的范围。只对方向部分做调整,效果可能更好。

DoRA 的优点在于,相同内存开销下,往往能跑出更高性能。当然,它也要多花点计算量——得先对权重做分解。所以在不同场景下,LoRA 和 DoRA 各有千秋。

LoRA、QLoRA、DoRA 这些优化型方法大幅拉低了 LLM 微调的内存门槛,是整个高效微调生态中不可或缺的角色。LLaMA Factory 这个框架,把上述技术统一实现了一遍,用户操作起来省心不少。

LLaMA Factory 采用模块化设计,可以灵活地切换各种优化技术。用户甚至不用写代码,直接在界面上勾选所需方法就行。

计算型技术

混合精度训练和激活重计算是两类最常用的“省算力”手段。前者用 FP16 等低精度格式来存激活值和权重;后者通过重新计算激活值来节省存储,从而降低内存占用。

闪电注意力(Flash Attention)是对注意力层的一次革新,它以硬件友好的方式重新排布计算流程,大幅提升性能。S2 注意力(S2 Attention)则专门解决长文本注意力计算时的内存压力。

此外,LLM.int8 和 QLoRA 这类量化技术也能把权重和激活值压到低精度表示,大幅节约内存。不过,量化后的模型只能走基于适配器的微调路线(比如 LoRA)。

Unsloth 则聚焦 LoRA 层的反向传播优化,降低了梯度计算所需的浮点运算数,让 LoRA 训练跑得更快。

LLaMA Factory 把这些技术整合到了一起,能自动识别模型结构来决定该启用哪些优化手段。用户不必纠结技术细节,只需根据自己的内存和性能期望去选择就好。同时,这个框架还支持分布式训练加速等功能——不过分布式训练需要在命令行下操作。国内已有不少大模型用这套技术完成微调,以下是作者 GitHub 仓库中列出的一些案例:

  • StarWhisper:天文大模型,基于 ChatGLM2-6B 和 Qwen-14B 在天文数据上微调而成。

  • DISC-LawLLM:中文法律领域大模型,基于 Baichuan-13B 微调而得,具备法律推理和知识检索能力。

  • Sunsimiao:孙思邈中文医疗大模型,基于 Baichuan-7B 和 ChatGLM-6B 在中文医疗数据上微调而得。

  • CareGPT:医疗大模型项目,基于 LLaMA2-7B 和 Baichuan-13B 在中文医疗数据上微调而得。

  • MachineMindset:MBTI 性格大模型项目,可根据数据集与训练方式让任意 LLM 拥有 16 种不同的性格类型。

  • CBT-LLM:一个基于认知行为治疗的心理健康问题分类中文大语言模型。

如果你想尽快推出自己的大模型,这个框架学起来成本最小。

LLaMA Factory 是什么

LLaMA-Factory 是个统一的框架,集成了多种高效训练方法。用户可以通过内置的 Web UI 对 100 多个 LLM 做定制微调,无需写任何代码。

项目的特色包括:

  • 多种模型

    :LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等等。

  • 集成方法

    :(增量)预训练、(多模态)指令监督微调、奖励模型训练、PPO 训练、DPO 训练和 ORPO 训练。

  • 多种精度

    :32 比特全参数微调、16 比特冻结微调、16 比特 LoRA 微调,以及基于 AQLM/AWQ/GPTQ/LLM.int8 的 2/4/8 比特 QLoRA 微调。

  • 先进算法

    :GaLore、BAdam、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ 和 Agent 微调。

  • 实用技巧

    :FlashAttention-2、Unsloth、RoPE scaling、NEFTune 和 rsLoRA。

  • 实验监控

    :LlamaBoard、TensorBoard、Wandb、MLflow 等等。

  • 极速推理

    :基于 vLLM 的 OpenAI 风格 API、浏览器界面和命令行接口。

与 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,可以根据自己常用的模型选择,比如 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

启动后的界面分为上下两部分:

上半部分是模型训练的基本配置,参数包括:

  • 模型名称

    :可选常用的 ChatGLM、BaiChuan、QWen、LLaMA 等,根据下载的模型选择 Baichuan2-13B-Chat

  • 模型路径

    :填写下载的 Baichuan 模型地址。

  • 微调方法

    有三种:

    • full

      :整个模型都参与微调。

    • freeze

      :大部分参数冻结,只微调部分参数。

    • lora

      :部分参数冻结,只调整特定层。

  • 模型断点

    :未开始微调前为空,微调一次后可点击“刷新断点”获取之前微调过的断点。

  • 高级设置和模型设置

    :用默认值即可。

下半部分是个页签窗口,分为 TrainEvaluateChatExport 四个页签。先看 Train 界面,参数如下:

  • 训练阶段

    :可选预训练(Pre-Training)、指令监督微调(Supervised Fine-Tuning)、奖励模型训练(Reward Modeling)、PPO、DPO 五种。这里选指令监督微调。

    • Pre-Training:在大型数据集上做预训练,学习基础语义和概念。

    • Supervised Fine-Tuning:在带标签的数据集上微调,提升特定任务准确性。

    • Reward Modeling:学习从环境中获得奖励,便于未来决策。

    • PPO Training:用策略梯度方法训练,优化模型在环境中的表现。

    • DPO Training:用深度强化学习方法训练,进一步提升表现。

  • 数据路径

    :数据集文件所在的路径,默认是 data 目录。

  • 数据集

    :选择数据路径中的数据集文件。这里选 self_cognition 数据集——用于调教 LLM 回答“你是谁”、“谁制造了你”这类问题,数据量只有 80 条左右。微调前需要先修改文件内容,把 替换成自己的机器人和公司名称。选好数据集后,可以点“预览数据集”查看前几行内容。

  • 学习率

    :值越大,学习越快,但太大可能跳过最优解;太小又会让学习变慢。这里用默认值 5e-5

  • 训练轮数

    :轮数越多效果越好,但时间也越长。数据少时可以适当增加,这里设为 30

  • 最大样本数

    :每个数据集最多使用的样本数。数据量只有 80 条,用默认值即可。

  • 计算类型

    fp16bf16 是数字的数据表示格式,用于节省内存和加速计算。这里选 bf16

  • 学习率调节器

    :有多个选项:

    • linear(线性):学习率线性下降。

    • cosine(余弦):按余弦函数下降,初始较高,结束时最低。

    • cosine_with_restarts(带重启的余弦):类似余弦但会周期重启。

    • polynomial(多项式):按多项式函数下降,可设定次数。

    • constant(常数):学习率不变。

    • constant_with_warmup(带预热的常数):先慢慢上升到一个固定值,再保持。

    • inverse_sqrt(反平方根):按反平方根方式下降。

    • reduce_lr_on_plateau(在平台上减少):模型进展停滞时自动降低学习率。

  • 梯度累积和最大梯度范数

    :这两个参数通常配合使用,保证优化稳定性。用默认值即可。

  • 断点名称

    :默认用时间戳,也可手动修改。

参数设置完毕后,可以点击“预览命令”查看本次微调的命令。确认无误后,点击“开始”按钮就开始微调。因为数据量少,大概几分钟就能跑完(具体时间视机器配置而定,笔者用的是 A40 48G GPU)。界面右下方还能看到微调过程中的损失函数曲线,损失值越低,模型预测效果通常越好。

进入 Chat 页签,可以试试微调后的模型。先点“刷新断点”,选择最近的断点名称,再点击“加载模型”。加载完成后即可开始对话。输入微调数据集中的问题,看看模型会怎么回答。

LLaMA-Factory 结构

LLaMA-Factory 由三个主要模块组成:模型加载器(Model Loader)、数据处理器(Data Worker)和训练器(Trainer)。

  • 模型加载器为微调准备了多种架构,支持超过 100 个 LLM。

  • 数据处理器通过一个设计良好的管道处理来自不同任务的数据,支持超过 50 个数据集。

  • 训练器统一了高效微调方法,使模型能适应不同任务和数据集,提供了四种训练方法。

  • LLaMA Board 为上述模块提供了友好的可视化界面,用户无需编写代码就能配置和启动 LLM 微调过程,还能实时监控训练状态。

总结

在人工智能领域,大型语言模型的微调无疑是当下最热门的话题之一。这些模型的语言理解和生成能力令人惊叹,但要让它们适应特定任务,微调和部署往往需要大量的计算资源和专业知识,代码调试更是对技术功底的考验。整体来说,LLaMA Factory 是一个非常出色的工具,能帮用户在 LLM 微调中省下大量精力。

项目信息

  • 项目名称:LLaMA Factory

  • GitHub 链接:https://github.com/hiyouga/LLaMA-Factory

  • Star 数:20K