跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

LLaMA Factory:大语言模型微调的终极开源工具

LLaMA Factory 是一个统一的开源框架,集成了多种高效微调技术如 LoRA、QLoRA、DoRA 等,支持 100 多个大模型的指令监督微调、奖励模型训练及推理部署。 LLM 微调的技术背景,包括优化型和计算型方法,并提供了 LLaMA Factory 的部署安装步骤、WebUI 界面操作指南以及核心架构解析。通过可视化配置和无需编写代码的方式,用户可快速完成模型微调流程,显著降低显存占用与学习成本,适用于天文、法律、医疗等多个垂直领域的模型定制。文章还补充了数据集格式示例及常见问题最佳实践,帮助开发者更高效地利用该工具进行大模型开发。

内存管理发布于 2025/2/6更新于 2026/10/8104 浏览
LLaMA Factory:大语言模型微调的终极开源工具

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 在中文医疗数据上微调而得。
  • MachineMindset:MBTI 性格大模型项目,根据数据集与训练方式让任意 LLM 拥有 16 个不同的性格类型。
  • CBT-LLM:一个基于认知行为治疗的心理健康问题分类的中文大语言模型。
  • 如果你也想尽快推出自己的大模型,这个框架肯定是你学习成本最小的方式。

    LLaMA Factory 是什么

    LLaMA-Factory 是一个统一的框架,集成了一套先进的高效训练方法。它允许用户通过内置的 Web UI 灵活定制 100 多个 LLMs 的微调,而无需编写代码。

    项目具有以下的特色:

    • 多种模型: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,可以选择自己常用的 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

    启动 LLaMA Factory 的 WebUI 页面,执行命令如下:

    CUDA_VISIBLE_DEVICES=0 python src/train_web.py
    

    启动后的界面分为上下两部分,上半部分是模型训练的基本配置,有如下参数:

    • 模型名称:可以使用常用的模型,包括 ChatGLM,BaiChuan,QWen,LLaMA 等,我们根据下载的模型选择 Baichuan2-13B-Chat。
    • 模型路径:输入框填写我们之前下载的 Baichuan 模型的地址。
    • 微调方法:有三种选项。
      • full:将整个模型都进行微调。
      • freeze:将模型的大部分参数冻结,只对部分参数进行微调。
      • lora:将模型的部分参数冻结,只对部分参数进行微调,但只在特定的层上进行微调。
    • 模型断点:在未开始微调前为空,微调一次后可以点击刷新断点按钮,会得到之前微调过的断点。
    • 高级设置和模型设置:可以不用管,使用默认值即可。

    下半部分是一个页签窗口,分为 Train、Evaluate、Chat、Export 四个页签,微调先看 Train 界面,有如下参数:

    • 训练阶段:选择训练阶段,分为预训练(Pre-Training)、指令监督微调(Supervised Fine-Tuning)、奖励模型训练(Reward Modeling)、PPO、DPO 五种,这里我们选择指令监督微调(Supervised Fine-Tuning)。
      • Pre-Training:在该阶段,模型会在一个大型数据集上进行预训练,学习基本的语义和概念。
      • Supervised Fine-Tuning:在该阶段,模型会在一个带标签的数据集上进行微调,以提高对特定任务的准确性。
      • Reward Modeling:在该阶段,模型会学习如何从环境中获得奖励,以便在未来做出更好的决策。
      • PPO Training:在该阶段,模型会使用策略梯度方法进行训练,以提高在环境中的表现。
      • DPO Training:在该阶段,模型会使用深度强化学习方法进行训练,以提高在环境中的表现。
    • 数据路径:指训练数据集文件所在的路径,这里的路径指的是 LLaMA Factory 目录下的文件夹路径,默认是 data 目录。
    • 数据集:这里可以选择数据路径中的数据集文件,这里我们选择 self_cognition 数据集,这个数据集是用来调教 LLM 回答诸如'你是谁'、'你由谁制造'这类问题的,里面的数据比较少只有 80 条左右。在微调前我们需要先修改这个文件中的内容,将里面的占位符替换成我们的 AI 机器人名称和公司名称。

    数据集格式示例: 为了便于理解,以下是标准的 JSON 格式数据集示例,包含 instruction(指令)、input(输入)和 output(输出)字段:

    [
      {
        "instruction": "请介绍一下你自己",
        "input": "",
        "output": "我是由 XX 公司开发的 AI 助手,旨在提供智能问答服务。"
      },
      {
        "instruction": "你的制造商是谁?",
        "input": "",
        "output": "我的制造商是 XX 公司。"
      }
    ]
    

    选择了数据集后,可以点击右边的预览数据集按钮来查看数据集的前面几行的内容。

    • 学习率:学习率越大,模型的学习速度越快,但是学习率太大的话,可能会导致模型在寻找最优解时跳过最优解,学习率太小的话,模型学习速度会很慢,所以这个参数需要根据实际情况进行调整,这里我们使用默认值 5e-5。
    • 训练轮数:训练轮数越多,模型的学习效果越好,但是训练轮数太多的话,模型的训练时间会很长,因为我们的训练数据比较少,所以要适当增加训练轮数,这里将值设置为 30。
    • 最大样本数:每个数据集最多使用的样本数,因为我们的数据量很少只有 80 条,所以用默认值就可以了。
    • 计算类型:这里的 fp16 和 bf16 是指数字的数据表示格式,主要用于深度学习训练和推理过程中,以节省内存和加速计算,这里我们选择 bf16。
    • 学习率调节器:有以下选项可以选择,这里我们选择默认值 cosine。
      • linear(线性):随着训练的进行,学习率将以线性方式减少。
      • cosine(余弦):这是根据余弦函数来减少学习率的。在训练开始时,学习率较高,然后逐渐降低并在训练结束时达到最低值。
      • cosine_with_restarts(带重启的余弦):和余弦策略类似,但是在一段时间后会重新启动学习率,并多次这样做。
      • polynomial(多项式):学习率会根据一个多项式函数来减少,可以设定多项式的次数。
      • constant(常数):学习率始终保持不变。
      • constant_with_warmup(带预热的常数):开始时,学习率会慢慢上升到一个固定值,然后保持这个值。
      • inverse_sqrt(反平方根):学习率会随着训练的进行按照反平方根的方式减少。
      • reduce_lr_on_plateau(在平台上减少学习率):当模型的进展停滞时(例如,验证误差不再下降),学习率会自动减少。
    • 梯度累积和最大梯度范数:这两个参数通常可以一起使用,以保证在微调大型语言模型时,能够有效地处理大规模数据,同时保证模型训练的稳定性。梯度累积允许在有限的硬件资源上处理更大的数据集,而最大梯度范数则可以防止梯度爆炸,保证模型训练的稳定性,这里我们使用默认值即可。
    • 断点名称:默认是用时间戳作为断点名称,可以自己修改。
    • 其他参数:使用默认值即可。

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

    进入 Chat 页签对微调模型进行试用。首先点击页面上的刷新断点按钮,然后选择我们最近微调的断点名称,再点击加载模型按钮,等待加载完成后就可以进行对话了,输入微调数据集中的问题,然后来看看微调后的 LLM 的回答吧。

    LLaMA-Factory 结构

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

    • 模型加载器:准备了各种架构用于微调,支持超过 100 个 LLMs。
    • 数据处理器:通过一个设计良好的管道处理来自不同任务的数据,支持超过 50 个数据集。
    • 训练器:统一了高效微调方法,使这些模型适应不同的任务和数据集,提供了四种训练方法。
    • LLaMA Board:为上述模块提供了友好的可视化界面,使用户能够以无需编写代码的方式配置和启动单个 LLM 微调过程,并实时监控训练状态。

    总结

    在人工智能领域,大型语言模型 (LLM) 微调(Fine-Tuning)是当下最热门的话题之一。总体来说 LLaMA Factory 是一个非常优质的工具,在 LLM 微调中帮助用户节省了大量的精力。

    这些模型拥有惊人的语言理解和生成能力,但要微调和部署它们以适应特定任务,往往需要大量计算资源和专业知识,代码调试还得有深厚的技术功底。LLaMA Factory 通过可视化的操作界面和高度集成的后端逻辑,极大地降低了这一门槛,使得个人开发者和中小团队也能轻松上手大模型微调。

    项目信息

    • 项目名称:LLaMA Factory
    • GitHub 链接:https://github.com/hiyouga/LLaMA-Factory
    • Star 数:20K+

    常见问题与最佳实践

    在实际使用中,为了确保微调效果稳定,建议遵循以下最佳实践:

    1. 数据质量优先:确保训练数据的准确性和多样性。清洗掉重复、错误或不相关的数据,高质量的指令数据能显著提升模型的表现。
    2. 显存管理:如果显存不足,优先尝试 QLoRA 模式,并结合 4bit 量化。同时关闭不必要的后台进程,释放系统资源。
    3. 超参数调整:学习率和训练轮数是关键参数。如果发现 Loss 震荡,可以尝试减小学习率或增加 Warmup 比例;如果 Loss 下降缓慢,可适当增加训练轮数或检查数据分布。
    4. 评估指标:除了观察 Loss 曲线,还应关注验证集上的评估指标(如 Perplexity, Accuracy),避免过拟合。
    5. 版本兼容性:定期更新 LLaMA Factory 到最新版本,以获取最新的模型支持和算法优化。注意 Python 环境和依赖包的版本匹配。

    目录

    1. LLaMA Factory:大语言模型微调的终极开源工具
    2. 关于 LLM 微调
    3. 优化型技术
    4. 计算型技术
    5. LLaMA Factory 是什么
    6. 部署安装
    7. 克隆仓库
    8. 创建虚拟环境
    9. 激活虚拟环境
    10. 安装依赖
    11. 方法一:开启 git lfs 后直接 git clone 仓库
    12. 方法二:先下载仓库基本信息,不下载大文件,然后再通过 huggingface 上的文件链接下载大文件
    13. 使用 LLaMA Factory
    14. LLaMA-Factory 结构
    15. 总结
    16. 项目信息
    17. 常见问题与最佳实践

    更多推荐文章

    查看全部
    • 企业微信外部群机器人主动推送消息实现指南
    • 使用 OpenClaw 搭建私人微信 AI 助理
    • MySQL 基本查询详解:增删查改核心语法实战
    • 大模型 Agent(智能体)核心架构与实战解析
    • AI 大模型学习路线:从理论基础到应用实践
    • AI+直播营销:引流短视频策划及AIGC应用方法
    • DFT Scan & ATPG 中的 OCC 架构设计
    • Spring 常用配置与高级话题
    • 基于 SpringBoot+Vue 的网上摄影工作室系统设计与实现
    • DeepSeek 完整使用手册:功能、技巧与 API 集成指南
    • FPGA 与 IC 职业前景对比及选择指南
    • 前缀和算法实战:连续数组与矩阵区域和
    • 前端请求后端 404/405/500 状态码排查与解决指南
    • 基于 Rust 与 GLM-5 的高性能 AI 翻译 CLI 工具:从环境搭建到核心实现
    • Linux 进程地址空间与虚拟内存机制解析
    • TikTok 数据抓取教程:Python 工具快速入门
    • C++ 素数筛法:埃氏筛与线性筛原理及实现
    • Windows 配置 Java 环境:JDK21、Maven3.9.12 及 IDEA2025
    • C++11 核心新特性实战:Lambda、移动语义与模板
    • AI 模型调优实战:网格搜索与最佳实践

    相关免费在线工具

    • 加密/解密文本

      使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

    • RSA密钥对生成器

      生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

    • Mermaid 预览与可视化编辑

      基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

    • 随机西班牙地址生成器

      随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

    • Gemini 图片去水印

      基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

    • curl 转代码

      解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online