大家好,欢迎来到 code秘密花园,我是花园老师(ConardLi)。
最近,我陆续在B站和公众号发布了 LLaMA Factory 的系列微调教程:
- 第一期内容:LLaMA Factory 微调教程(一):入门和基础使用第二期内容:LLaMA Factory 微调教程(二):构建高质量数据集第三期内容:LLaMA Factory 微调教程(三):微调参数设置,显存估算和优化第四期内容:LLaMA Factory 微调教程(四):微调过程观测,微调后模型部署
这个系列受到了很多同学的关注和支持,期间有大量的同学在不断催更😅,真的抱歉啦。
这个系列的制作周期其实非常久,第一个原因是我所有的教程都是业余时间在制作的,基本上都是工作日晚上 10 点后,以及周末的时间。
另外就是在开始做这期教程之前,我就发现网上现在其实有很多关于模型微调的教程,也有很多围绕 LLaMA Factory
来讲解的,但是大部分只是从工具使用的表象进行讲解,你即便阅读完可能也只是学会了 Hello World
,所以我并不想再做一份同质化的内容。
整个教程经过了我精心的打磨,并且期间我多次和 LLaMA Factory
作者进行沟通,教程最终版本也经过了 LLaMA Factory
作者进行 Review
,所以这个系列并不是简单的讲解工具的使用,而是真正的把我个人的大模型微调的经验分享给大家,希望大家学习后能够真正跟随教程进行复刻,并且把模型微调的经验应用到自己的工作和业务中。
这份教程全文共 3W+ 字,用一个微调 Web 安全领域专家模型的例子进行串联,讲解了关于模型微调的基础理论、LLaMA Factory 微调工具的使用、微调过程中各种参数的配置经验、微调过程效果观察的经验、到最终微调后的模型的导出和部署。
之前的几期发出后,有同学反馈虽然每一期的内容都很精品,但是整体感觉内容比较分散,再加上更新的间隔比较长,所以不太好作为一整个系列教程来进行学习,所以我把完整的教程内容进行了重新整理和剪辑,并且对一部分比较割裂和缺失的内容进行了补充了完善,整体划分出了 36 个章节,目前完整版本已经在 B 站发布:
如果对你有所帮助,希望得到一个免费的三连,这对我真的很重要!
下面是 36 个章节的简单介绍(完整文字版本请看开头的文章内容):
【1-1】开始 - 本期课程目标
希望学习完本教程后,你能够掌握以下内容:
【1-2】开始 - 微调后效果演示
在本教程中,微调模型案例的目标是使其在 Web 安全领域具备专家级推理能力,用于企业私有部署以解决机密数据泄露风险及满血模型高成本问题。经过实际测试,微调后模型在 Web 安全领域(含数据集外问题)回答更丰富、推理能力更强,能整合知识体系并跨知识点关联推理,同时保留非 Web 安全领域的知识迁移能力,但非专业领域推理稳定性需更多数据集支持。
【1-3】开始 - 微调基础知识回顾
回顾模型微调的前置知识:需微调因通用模型在特定领域表现有限,微调可实现专业化、任务适配、数据安全且成本低;任务分监督微调(指令、对话等)、知识蒸馏、强化学习;流程为选预训练模型→准备数据集→测试→调参→训练→优化→部署;数据集格式无明确要求,主流有Alpaca和ShareGPT;用途分训练集(学规律)、验证集(防过拟合)、测试集(验水平);关键参数有训练轮数、学习率、批量大小,需调参。
【2-1】LLaMA Factory - 简介
LLaMA Factory
是一个简单高效的大语言模型训练与微调平台,用户无需编码即可在本地完成上百种预训练模型微调。它具备全场景微调能力,支持超 100 个主流模型(如Qwen、LLaMA等),集成 LoRA、GaLore 等多种微调技术及低比特量化微调,适配不同算力场景,还支持用户自定义数据集并兼容多社区资源,搭配 FlashAttention-2
等加速技巧;提供零代码 Web UI 界面,可实时监控训练进度与模型性能;工程化部署方面,支持模型一键合并、集成多种推理引擎,适配单机多卡等不同硬件环境,实现资源高效利用。
【2-2】LLaMA Factory - 对比 Unsloth
LLaMA Factory
是全面的大语言模型训练与微调平台,支持超百种模型、多种微调技术及零代码 Web UI 操作,适合通用场景、企业级应用及零代码用户;而 Unsloth
是专注加速 LLM 微调的开源工具,微调速度快2-5倍、内存占用减少50%-80%,支持Llama等主流模型及动态4-bit量化,通过 Colab Notebook
实现免本地资源的低代码微调,更适合资源受限场景下的快速迭代,且 LLaMA Factory
文档中将 Unsloth
作为加速手段,其框架功能比Unsloth更丰富。
【2-3】LLaMA Factory - 安装和基础使用
安装 LLaMA Factory
时,建议用 Conda 虚拟环境避免 Python 依赖冲突:先从官网下载Conda安装,验证安装后创建名为 lf、Python 3.10 的虚拟环境并激活,进入代码目录执行pip install -e ".[torch,metrics]"
安装依赖,最后用llamafactory-cli version
验证,确认安装在虚拟环境目录下。
安装依赖后,通过llamafactory-cli webui
启动 WebUI ,界面含五大模块:通用设置(语言、模型、微调方法等)、微调训练(阶段、数据集、参数等)、模型评估(配置评估数据集)、在线推理(测试模型)、模型导出(指定参数导出)。
【3-1】微调通用设置 - 选择模型
在 LLaMA Factory
中选基础模型微调时,输入关键词(如DeepSeek、Qwen3)可获取主流开源模型,其名称按分类有不同后缀:功能类(-Base基础/-Instruct指令/-Distill蒸馏等)、多模态类(-VL视觉语言/-Video视频等)、技术类(-Int8量化/-MoE混合专家等)、版本类(-v0.1)、领域类(-Chinese中文优化)。选后系统自动从Hugging Face拉取(加环境变量可从国内社区下),点击Chat Tab加载模型测试,也可指定本地路径(需先卸载原模型)。
【3-2】微调通用设置 - 微调方法
在 LLaMA Factory
中可选择三种微调方法:全参数微调(更新所有参数,性能最佳但耗资源,适用于资源充足场景)、参数冻结微调(冻结部分参数仅更新顶层,效率高防过拟合,适用于小数据集或任务相似场景)、LoRA微调(注入低秩矩阵不修改原参数,参数效率高、内存占用少,支持多任务适配器组合,适用于资源有限或多任务快速迭代场景),其中LoRA因高效适配性成为主流,能在降低计算量和过拟合风险的同时,灵活支持多任务学习与轻量化部署。
【3-3】微调通用设置 - 模型量化
模型量化是通过降低权重和激活值精度来压缩大模型体积、加快推理速度的技术,类似无损音乐转MP3的压缩逻辑,能在牺牲部分精度的前提下显著降低个人或小公司的本地部署成本。常用精度单位包括 FP(浮点,如FP32/16,精度高但占空间)、BF(脑浮点,如BF16,平衡精度与效率)、INT(整数,如INT8/4,体积小但精度损失较多),量化时需通过确定缩放系数、计算存储整数值并在推理时还原实现,如 QLoRA
便是将4位量化与LoRA结合的微调加速方案。
【3-4】微调通用设置 - 对话模版
对话模版是大语言模型与用户交互的“翻译器”,因不同模型有特定输入格式要求,它通过统一接口解决底层格式差异,确保模型训练与推理格式一致(正确识别输入、确定生成位置),管理多轮对话上下文(区分说话者、组织历史信息),还能处理系统提示、工具调用等特殊功能,以 Qwen
模板为例,会将用户输入按特定格式转换后供模型处理并生成内容。
【3-5】微调通用设置 - 加速方式
当前有三种加速方式。Unsloth较常用,默认采用动态4位量化,在 LLaMA Factory
选4 bit量化及Unsloth加速,微调表现与直接用Unsloth类似。要求不高可选默认的Flash Attention加速,硬件受限可选Unsloth + 4位量化 ,Liger Kernel
方式后续介绍。
【4-1】微调数据集准备 - 格式要求
数据集是微调关键,约80%时间应花在其准备处理上,需结合业务场景从采集到标注各环节精心构建,还应合理划分及增强数据。不同微调阶段格式有别,本次 LLaMA Factory
的指令监督微调(SFT)主要支持 Alpaca 与 ShareGPT 格式。
【4-2】微调数据集准备 - 数据集配置文件
LLaMA Factory
数据集配置含数据路径与数据集名称。路径默认项目下 data
目录,dataset_info.json
存关键配置,结构为 JSON,以数据集名做顶层键。支持在线平台(如 Hugging Face Hub 等)、本地文件(相对或绝对路径)、脚本生成(指定脚本名)三种数据源加载方式。可多维度配置数据格式,含基本格式化、列映射、角色标签设置,还支持多模态数据字段映射。特殊训练任务配置有排序/对比学习(ranking
字段)与工具调用(tools
字段) 。
【4-3】微调数据集准备 - 数据集处理过程
LLaMA Factory
借 dataset_info.json
兼容多样数据集格式。以自定义数据集说明,原始为Alpaca格式,经 dataset_info.json
配置路径后进入微调。先转标准格式,按Qwen等对话模版格式化,分词得token IDs ,再标签分配,用 -100 标记用户输入,助手回复用实际token ID ,仅助手回复算损失。最终数据以 {"input_ids":[token IDs],"attention_mask":[全1],"labels":[ -100与实际token ID混合]}
传至训练循环,经前向传播、损失计算、反向传播训练模型。
【4-4】微调数据集准备 - 数据集的构造思路
数据集质量决定微调成败,常见问题有数据量小易过拟合、泛化弱,噪声数据多需清洗,样本偏差大使模型在真实场景失效,任务相关性低,数据多样性不足。本地微调用 Easy Dataset(EDS)
构造数据集,从《白帽子讲Web安全》及精选Web安全最新论文提取数据,借满血版大模型(DeepSeek R1 0528)蒸馏及提取推理过程(COT)完善知识与训练推理能力,用GA思路增强多样性,最后请Web安全专家审核确保质量。
【4-5】微调数据集准备 - 使用 EDS 构造数据集
Easy Dataset
(EDS
)用于创建大语言模型数据集,兼容特定 LLM API
。先完成部署安装,创建以微调领域命名项目,在项目配置中设置模型、任务、提示词。接着处理文献并生成 GA
对,Review领域树与分块质量,提取并Review问题,生成答案后进行数据蒸馏,再按标准人工Review数据集。最后导出数据集在 dataset_info.json
定义或生成 LLaMA Factory
配置,在 LLaMA Factory
粘贴路径预览,能加载则配置成功。
【5-1】调整微调参数 - 入门理解
模型微调中的各类参数如同给模型 “补课” 前制定的教学计划与策略,决定教学方式、强度及方向,超参数选择不当会致模型性能不佳。常有同学问微调参数如何设置效果最佳,实则无标准答案,参数设置与所选模型、微调数据集及硬件配置相关。接下来将结合个人经验,讲解关键参数作用、影响及实际微调时的调整思路,未提及参数保持默认值。
【5-2】调整微调参数 - 学习率
学习率(Learning Rate)决定模型训练时参数调整幅度,取值一般在(0, 1) 之间,可类比为控制复习 “深度” 。学习率大(如0.1)参数调整幅度大,进步可能快但易偏离;学习率小(如0.0001)调整幅度小,过程稳定但进步慢。常见取值在5e - 5(0.00005)和4e - 5(0.00004)之间,小数据集不适合大学习率,全参数微调为避免破坏原始知识,学习率比 Lora
小一个数量级。
【5-3】调整微调参数 - 训练轮数
训练轮数(Number of Epochs)中,Epoch
指模型完整遍历一次训练数据集的次数,类似从头到尾复习一本教材的次数。轮数少,对内容不熟悉,模型效果可能不佳;轮数多易过拟合,即 “学傻”,遇到新问题不会解答。一般3轮即可,训练时若 LOSS
未趋于平缓可加大轮数,若提前收敛则减小轮数或提前结束,避免 LOSS
过低(趋近于零)及轮数超10,以防过拟合。通常数据集越小,需越多 Epoch
;数据集越大,需越少 Epoch
,LOSS
控制在 0.5 - 1.5
之间。
【5-4】调整微调参数 - 批量大小
批量大小(Batch Size)是模型训练每次更新参数所用样本数,平衡复习速度与专注度。大则训练快但耗显存易过拟合,小则专注但慢且训练不稳。它由单CPU批处理大小(Per Device Train Batch Size)和梯度累计步数(Gradient Accumulation Steps)决定,大 Batch Size 配大学习率,小则反之。小参数模型或小数据集微调,单GPU批处理大小可从1或2开始,调大梯度累计步数提效,此次批处理大小1、梯度累计步数8 。
【5-5】调整微调参数 - 截断长度
截断长度(Max Length)
决定模型处理文本时的最大 token
数,影响上下文捕获及显存消耗,每增1倍显存近似线性增长。合理设置很必要,过小影响训练效果,理想是设为数据集中单条最大 token
数,也可算P99、P95值或剔除过长数据。本次取值4096 ,多种工具可算 token
数,不同模型算法有别,LLaMA - Factory
提供相关脚本及运行命令,本地微调数据集 99.83% 数据 < 4000 token
,性能足够也可设为 5000 。
【5-6】调整微调参数 - LoRA 秩
LoRA(低秩适应)
里的 秩(Rank)
决定模型微调参数更新的“表达能力” ,借低秩矩阵分解调控可训练参数规模与灵活度。秩小更新 “保守”,秩大捕捉特征能力强但耗资源。秩低如4,像用固定模板学习,稳定省显存但应对复杂问题弱;秩高如64,思路多能处理复杂任务,不过易过拟合且费显存。日常微调建议8 - 16起步,对7B模型,秩从8到64约增2GB显存,本次取值 8。
【5-7】调整微调参数 - 验证集比例
验证集比例,是从原始训练数据划分出用于评估模型性能子集的占比(0 - 1 小数),不参与训练,监控泛化防过拟合。设它不影响训练,却能借LOSS曲线助观察微调效果。经验:小数据(<1000样本)取 0.1 - 0.2
且样本数 ≥100
,大数据( >10000
样本)取 0.05 - 0.1
且样本数 ≥1000
,复杂任务提比例,简单任务降比例。本次取值 0.15(431条数据)。
【6-1】启动微调任务 - 训练过程
完成配置后,设定最终微调的 Lora
适配器输出目录,点击预览命令可获取 llamafactory-cli train
参数。此次微调以 Qwen2.5-7B-Instruct
为基座模型, sft
为训练阶段,采用 lora
微调类型 ,涵盖学习率5e - 5、训练3轮等多项参数。点击开始训练,可在终端及 LLaMA Board
查看进度与损失曲线,总训练步数456步,由数据量、批次大小、梯度累积及训练轮数等计算得出。
【6-2】启动微调任务 - 显存消耗估算
本次微调用两张48G显存卡,可借nvidia - smi查GPU和显存占用。模型微调(Lora
)时,显存占用主要源于基础模型权重、框架开销、LoRA
适配器、激活值。基础模型权重依模型参数与精度算,此次Qwen2.5 - 7B - Instruct
模型,BF16精度,约14GB。框架开销难精算,估1GB。LoRA
适配器与LoRA
秩相关,估0.5GB。激活值与单GPU批量及截断长度正相关,每1K Token约增2.5GB。依此次配置,估算总显存占用25.5GB ,还可借助特定智能体估算。
【6-3】启动微调任务 - 显存优化技巧:liger_kernel
显存计算中,模型权重、Lora
适配器、框架消耗在无量化时难优化,激活值部分可借助 liger_kernel
优化。Liger Kernel
重写 Transformer
关键操作并融合内核,减少内存占用。实验显示,开启 liger_kernel
后,显存增长速率从每1K Token增加2.5G降至0.6G ,降幅76%。LLaMA Factory
默认启用 flash attention
,开启 liger_kernel
与之不冲突。
【6-4】启动微调任务 - 分布式显存优化:DeepSpeed
显存消耗通常基于单卡计算,但实际常需多卡分布式训练。如特定微调任务,预估显存30.5G,两张24GB卡理论可行,却会爆显存,因多卡非真正内存平摊。启用微软研发的 DeepSpeed
库的 Stage3
可实现显存平摊。DeepSpeed
借ZeRO技术分片模型状态、混合精度训练及并行策略降低单卡显存占用。LLaMA Factory
有四个 DeepSpeed Stage
选项,Stage3
是极致分工,虽有通信开销致显存略超预估,但能让大模型在有限显卡训练。
【7-1】微调过程观察 - LOSS(损失值)
微调时,可通过右下角LOSS曲线观测过程。LOSS即损失函数,是量化模型预测与真实目标误差的可微函数,输出为标量。其本质是模型犯错程度评分,通过对比预测与正确答案得出,差值越大评分越高。微调旨在最小化LOSS,算法依LOSS值调整模型参数。关注LOSS变化趋势,若稳定下降,表明模型学习有效;若不降反升或波动大,则学习可能出错。但LOSS曲线好看,不代表最终训练效果一定好,仅说明训练过程正常。
【7-2】微调过程观察 - SwanLab
在 LLaMA Board
只能查看简单LOSS,若想获取更多维度指标,可借助 SwanLab
等可视化工具。SwanLab
是开源的训练跟踪与可视化工具,支持云端与离线使用,具备超参数记录等多种功能,助力开发者管理实验。在 LLaMA Factory
有专属Tab,使用前需在官网注册账号,在本地环境通过 swanlab login
及粘贴API Key完成登录,配置成功后启动微调任务可查看监控地址,进而查看详细日志与硬件消耗情况。
【7-3】微调过程观察 - 几种常见的 LOSS 曲线
常见的 LOSS 曲线特征各异,原因也不同。Loss 持续不降,可能因学习率过小致参数更新不足,或数据无规律、噪声大;Loss 持续下降但不收敛,多是训练轮数太小;Loss 震荡波动,常因学习率过大使优化路径震荡,或批量大小过小致梯度噪声大;Loss 先降后停/趋于稳定,可能是学习率衰减过低、已收敛到局部最优或过拟合;Loss 下降后反弹/上升,可能由于学习率突变、数据异常或模型结构问题;理想形态是 Loss 逐步下降并趋于平缓,但这不代表模型最终效果就好。
【7-4】微调过程观察 - Train LOSS 与 Eval LOSS
设定微调参数中的验证集比例,会生成Eval LOSS曲线。Train LOSS下降但Eval LOSS上升,可能过拟合,源于数据集质量差;两者均高位,可能欠拟合,需调大学习率等;Train高Eval低,或因数据分布差异,要统一分布;Eval降得快,也因数据分布,可调整样本或验证集大小。理想状态是Train与Eval LOSS同步下降,表明模型有效学习且未过拟合。
【8-1】微调后模型使用 - 通过 Lora 适配器加载模型
微调完成后,进入设定的输出目录,其中有模型权重、配置、日志结果及分词器数据等文件。LoRA
微调只训练低秩矩阵,输出仅含 Lora
适配器,要得完整模型需手动合并。想快速验证微调后模型效果,可在 Webui 按要求加载适配器与模型,调大最大生成长度,还能去掉检查点路径对比原始模型结果。
【8-2】微调后模型使用 - 模型合并和导出
微调模型临时测试后,为方便后续使用,需合并原始模型与 Lora
适配器并导出。在相关设置中,将微调输出目录填入检查点路径,重加载模型并设定导出目录(可选择量化等级、上传 Hugging Face
等设置)。导出成功后,进入导出目录能看到合并后的模型文件。之后清空检查点路径,把合并后的模型目录填入模型路径,重加载模型测试,效果与之前一致。
【8-3】微调后模型使用 - 本地调用微调后的模型
本地调用微调后模型,主流方案有Ollama和VLLM。Ollama是轻量级工具,“开箱即用”,支持全平台,硬件门槛低,适合个人开发与测试;VLLM是企业级框架,性能高,适合高并发场景。在 LLaMA Factory
,可用 llamafactory-cli api
结合--infer_backend vllm
参数通过VLLM部署模型为API调用。而通过 Ollama 调用,因LLaMA Factory
默认无模型转GGUF方法,需用 llama.cpp
仓库脚本转换,安装Ollama并注册转换后的GGUF文件即可运行模型。
【8-4】微调后模型使用 - 在 EDS 对比模型微调效果
为方便验证对比模型微调效果,在 Easy Dataset
的 Playground
,利用 VLLM部署服务(不损精度且推理快)测试,在模型配置中添加模型,准确填写接口地址与模型名称即可。以硅基流动的 Qwn2.5-7B-Instruct
为基础模型,与微调后的 Security
模型对比。经多角度对比发现,微调后模型在数据集内特定问题上具推理能力且回答更丰富;在Web安全领域非数据集内问题上泛化能力好;能系统性整合Web安全知识体系;在非Web安全领域也具推理能力,既强化专业能力又保持知识泛化与多领域适应性。
视频教程
以上为每个章节的简单介绍,详细教程请到 B 站观看:
关注《code秘密花园》从此学习 AI 不迷路,code秘密花园 AI 教程完整的学习资料汇总在这个文档:ai.mmh1.top/#/ai-tutori…
如果本期对你有所帮助,希望得到一个免费的三连,感谢大家支持!