首页 > 教程攻略 > ai资讯 >还不会本地网页上微调Llama3?用Docker一键部署咱国产的LLAMAFACTORY试试

还不会本地网页上微调Llama3?用Docker一键部署咱国产的LLAMAFACTORY试试

来源:互联网 时间:2026-08-02 13:37:10

大型语言模型的微调,一直是AI圈子里热度不减的话题。无论你是想定制一个能聊法律、看病、甚至懂星座的专属模型,还是想把Llama 3这样的通用模型变成行业专家,微调都是绕不开的一步。但过去这事儿门槛实在不低——光是把代码和环境跑通,就能劝退一大半人。

图片来自DALL.E

好在,北航的五位和北大的一位技术专家发表了一篇论文,带来了一个名为LLAMAFACTORY的新框架。这个框架把微调这件事儿大大简化了——你不需要写一行代码,就能通过一个漂亮的网页界面,调整上百种模型的参数。写这篇文章时,它在GitHub上还只有13,000颗星,不到一个月就涨到了17,000。这个增速本身就说明了一件事:大家对“可视化微调”的渴望,比想象中要强烈得多。

论文标题:LlamaFactory:100多种语言模型的统一高效微调
论文地址:https://arxiv.org/pdf/2403.13372.pdf

很多读者在把Llama 3部署到本地后,都来问微调怎么搞。今天我们就用Docker,把这个默默支撑了国内不少模型背后的框架一键跑起来。

微调这事儿其实没那么玄乎。说白了,就是把原来没有的领域数据喂给大模型,让它学会新知识。你只需要配好环境、改改参数,剩下的事机器自己跑就行——和“把大象放进冰箱”是一个道理:打开冰箱门,把大象塞进去,关门。当然,具体到操作上,LLAMAFACTORY把这三个步骤变成了可视化的按键。

什么是LLAMAFACTORY (PART 01)

LLAMAFACTORY是一个统一的高效微调框架,集成了当下最尖端的优化技术。它支持100多种模型,包括LLaMA、GPT等热门架构,并且提供了一个叫LLAMABOARD的Web界面。你不需要写任何代码,就能在浏览器里完成从加载模型、选择数据集到调参训练的全流程。

在Docker里部署完跑起来,界面就像下面这样——支持本地加载模型和数据集,非常直观。

微调大型语言模型时,精度和GPU显存之间的矛盾,一直是开发者最头疼的问题。大模型动辄几十亿甚至上百亿参数,每个参数用32位浮点数(4字节)存储,轻轻松松就能撑爆显卡显存。为了在有限显存下跑起来,常用的办法是改用16位(FP16)或8位(INT8)低精度存储,牺牲一些精度换空间。但这种简单粗暴的量化方案,很容易让模型性能大打折扣。

此外,反向传播时还要存中间激活值——输入序列越长,缓存占用的显存就越吓人。这成了另一个瓶颈。

正因为这些困难,近几年涌现了LoRA、LoRA+、DoRA、GaLore等一系列高效优化技术。它们在不降低或只微小降低精度的前提下,极大缓解了显存压力,给LLM微调开辟了新路径。

LLAMAFACTORY把这些技术统一整合在一起,开发者不用深究每个算法细节,就能自由调用和组合优化策略。同时,它还支持分布式数据并行、张量并行等训练加速手段,进一步拓展了微调的计算边界。

高效微调 (PART 02)

优化型技术

微调大模型的计算代价不菲,于是出现了两大类高效微调技术:优化型和计算型。

先说优化型。冻结微调(Freeze-tuning)是经典做法——把大部分参数冻住,只微调解码器的少数几层。训练成本是降低了,但效果往往也会打折。

梯度低秩投影(GaLore)则把梯度投影到低维空间,实现全参数学习的效果,但内存占用大幅下降。大模型本身冗余较多,投影后损失不大,所以效果不错。

低秩适配(LoRA)是目前最受关注的方法之一。它不改变预训练模型的原始权重,而是在需要微调的层上引入一对很小的可训练矩阵(低秩矩阵)。前向计算时,原始权重和低秩矩阵相乘得到修改后的权重;反向传播时,只更新这两个小矩阵的梯度。好处是——不用存新的权重就能完成微调,显存需求极低。对于大模型来说,权重参数占显存的大头,LoRA让训练只需要少量额外显存就能开展。

当LoRA结合量化技术(QLoRA),优势就更突出了。量化把原本占用4字节或2字节的权重压缩到1字节甚至更低(int8/int4),存储进一步降低。经过量化,每个参数的内存占用可以从18字节降到0.6字节,效率惊人。

实验数据显示,LoRA和QLoRA在中小模型上表现最出色,能以极小的内存开销达到和全量微调相当的水平。如果加上量化,内存占用还能进一步降低。

还有一种叫分解权重低秩适配(DoRA)的方法,在LoRA基础上做了改进。DoRA把预训练权重矩阵拆成两个部分:量级分量和方向分量。它只对方向分量应用LoRA,量级分量保持不变。这么做的逻辑是:方向分量可能包含了更多任务相关的知识,而量级分量主要控制输出数值范围。只对方向部分做低秩微调,往往能获得更好的效果。在相同内存开销下,DoRA通常比LoRA性能更高,但计算量也多了些(需要先做分解)。所以具体选LoRA还是DoRA,得看场景。

LoRA、QLoRA、DoRA这些优化型方法,是高效微调的核心武器。LLAMAFACTORY对它们做了统一的模块化实现,用户不需要写代码,直接在LLAMABOARD界面勾选就行。

计算型技术

计算型方面,混合精度训练和激活重计算是最常见的两种。前者用低精度(如FP16)存激活值和权重;后者通过重新计算激活值来省掉存储,降低内存占用。

闪电注意力(Flash Attention)是一个硬件友好的注意力计算新算法,大幅提升了性能。S2注意力(S2 Attention)则针对长文本场景优化了内存开销。

量化技术(如LLM.int8和QLoRA)把权重和激活值压缩到低精度表示,能省下大量显存。不过量化后的模型只能使用基于适配器的微调方法(如LoRA)。

Unsloth则针对LoRA层的反向传播做了专门优化,减少了梯度计算所需的浮点运算数,加速了LoRA训练。

LLAMAFACTORY把这些技术都整合在了一起,自动识别模型结构,决定开启哪些优化手段。用户只需要选择期望的内存占用和性能要求即可。不过分布式训练需要在命令行下操作。

国内不少大模型都是用这个框架微调的。以下是作者GitHub README中列出的一些代表性项目:

  • 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:基于认知行为治疗的心理健康问题分类中文大语言模型。

如果你想尽快推出自己的大模型,这个框架绝对是学习成本最低的方式。

LLAMAFACTORY架构 (PART 03)

LLAMAFACTORY由三大核心模块组成:模型装载器(Model Loader)、数据处理器(Data Worker)和训练器(Trainer)。

模型装载器支持100多种LLM架构,能自动识别层类型并附加适配器(如LoRA和DoRA)。数据处理器统一了50多种数据集格式,支持远程读取、本地读取、流式读取等灵活方式。作者把大家日常的痛点都考虑到了——微调完成后马上就能测试,不用折腾。更重要的是,它还内置了众多聊天模板,有助于模型培养指令跟随能力。

训练器统一了多种高效微调方法的实现,支持生成式预训练、监督微调(SFT)、人类反馈强化学习(RLHF)和直接偏好优化(DPO)等训练范式。更巧妙的是,LLAMAFACTORY引入了模型共享RLHF——只需一个预训练模型就能完成整个RLHF训练流程,大幅降低了对硬件的需求。

在可扩展性方面,LLAMAFACTORY能与DeepSpeed等分布式训练库无缝集成,支持模型并行和数据并行等加速策略。

评估结果

在语言建模和文本生成任务上的评估表明,LLAMAFACTORY既高效又有效。效率测试中,使用QLoRA能将内存占用降到最低,而LoRA拥有最高的训练吞吐量。泛化任务上,LoRA和QLoRA的ROUGE分数与全参数微调相当,某些情况下甚至更胜一筹。部分结果如下所示。

向LLAMAFACTORY的六位科研人员和开发者致敬!他们提供了一个强大且灵活的工具,让大家能以最小的代价微调顶尖的LLM模型。无论你想训练自定义语言模型,还是将现有模型用于特定任务,LLAMABOARD界面都让这个过程变得极其简单。

一键部署LLAMAFACTORY (PART 04)

有兴趣的读者可以直接访问项目地址:https://github.com/hiyouga/LLaMA-Factory,按照Docker一键部署。建议Docker空间至少预留60GB以上,否则可能装不上。

本地加载模型、加载数据集、设置参数,然后开始微调——整个过程就像下面这样直观。

这里给出一组参数建议:

批次大小(Batch Size):尽可能小,以减少每次迭代消耗的显存。如果显存只有8GB,可以尝试4或8,具体还要看模型大小和复杂度。

梯度累积步数(Gradient Accumulation Steps):如果批次减小,可以通过增加梯度累积步数来保证有效批次大小。建议设置为4或更高,补偿小批次带来的影响。

学习率(Learning Rate):这是需要实验调整的关键超参数。常见起始值为1e-3或5e-5。

训练轮数(Epochs):显存大小不直接影响轮数,但要确保模型在单个批次中能正常运行后再逐步增加。

半精度训练(Mixed Precision Training):如果你的模型和训练库支持,使用FP16可以显著减少显存占用。截图中的fp16设置是正确的。

学习率调度器(Learning Rate Scheduler):cosine调度器会在训练过程中逐渐减小学习率,是常用选择。

调整这些参数往往需要多次实验。建议在Docker容器内使用nvidia-smi命令每隔5秒监控一次显存使用情况。如果出现显存溢出错误,需要进一步减小批次大小或梯度累积步数。

注意:本地训练时最好打开性能监视器,监测GPU内存——很多模型都会把GPU吃满。