简介

LlamaFactory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LlamaFactory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调,框架特性包括:

  • 模型种类:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Yi、Gemma、Baichuan、ChatGLM、Phi 等等。

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

  • 运算精度:16 比特全参数微调、冻结微调、LoRA 微调和基于 AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 的 2/3/4/5/6/8 比特 QLoRA 微调。

  • 优化算法:GaLore、BAdam、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ 和 PiSSA。

  • 加速算子:FlashAttention-2 和 Unsloth。

  • 推理引擎:Transformers 和 vLLM。

  • 实验监控:LlamaBoard、TensorBoard、Wandb、MLflow、SwanLab 等等。

学习地址:

部署安装:

        本文阐述信息为本地验证机器,系统window10,显卡为rtx3070 8G,内存32g,cpu i7-11代,机器性能比较低,但是作为验证机器最多可以跑小模型,最多也就是训练时间长点。

显卡配置

安装部署

        本机因为运行其他程序,已经安装docker,docker版本27.1.1,直接拉取镜像部署即可,本次部署的llama-factory是目前最新版本0.9.6

  • 运行命令:docker run -d   --name llamafactory   --gpus all   -e TZ=Asia/Shanghai   -p 7860:7860   -v /e/vm/Llama/data:/app/LLaMA-Factory/data   -v /e/vm/Llama/models:/root/.cache/huggingface   -v /e/vm/Llama/output:/app/LLaMA-Factory/output   --workdir /app/LLaMA-Factory   hiyouga/llamafactory:latest   llamafactory-cli webui

启动后的页面如图,访问地址为:默认7860端口

参数配置说明

  • 语言:zh 、en、ru、ko、ja

  • 模型名称:选择你要训练的模型,比如deepseek、qwen等,本次随便选个小模型

  • 模型路径:选择模型名称后,模型路径自动补全

  • 模型下资源:选择modelscope魔塔社区国内使用比较友好,hugging社区国内受限于网络

  • 微调方法:支持多种调优算法,如 Full Parameter Fine-tuning 、 Freeze 、 LoRA 、 Galore 、 BAdam

Full Parameter Fine-tuning:全参微调指的是在训练过程中对于预训练模型的所有权重都进行更新,但其对显存的要求是巨大的;

Freeze:(冻结微调)指的是在训练过程中只对模型的小部分权重进行更新,这样可以降低对显存的要求;

lora:微调: LoRA是目前最流行的高效微调方法(PEFT)。它冻结原始模型,并在模型的特定层(如注意力层)旁边插入两个小矩阵(适配器),训练时只更新这两个小矩阵

  • 检查点路径:训练完以后会有训练文件

  • 量化等级:对模型进行压缩以加速推理过程,而模型量化是其中一种有效的方法。量化技术通过将高精度数据类型存储的参数转换为低精度数据类型存储, 可以在不改变模型参数量和架构的前提下加速推理过程。

  • 量化方法:

BNB:采用分块量化技术,将张量分成小块独立量化,能有效隔离异常值,减少精度损失;

HQQ:通过半二次优化,快速求解最优的量化参数(零点和缩放倍数),无需依赖数据;

EETQ:不是通用的量化算法,而是一个高性能推理库;

  • 对话模板:选项比较多,自行查阅,我这里为了验证选择的默认;

  • RoPE插值方法:让模型处理超出其原始训练长度的文本时,可以采用的几种位置编码缩放策略,none不缩放,linear线性缩放,dynamic动态调整缩放因子,yarn温度缩放高质量长文本的“最优解”;

  • 加速方式:训练加速分为如下几种auto框架会自动检测你的硬件和软件环境,帮你选择当前最优的注意力实现,flash_attn 不牺牲计算精度的前提下大幅减少了显存读写,从而让计算更快,unsloth 更像一个为LLM微调量身定做的加速包。它不仅优化注意力,还对整个训练流程“动手术,liger_kernel 的核心理念是“算子融合”,把多个操作(比如计算损失时的前向和后向)合并成一个

  • Train模块配置训练具体参数

  • 训练阶段

Pre-Training预训练:目标是让模型在海量的无标注文本(如网页、书籍)上学习语言的模式。如果想让模型掌握某个特定领域的知识(如海量法律文书),可以在这个阶段进行持续预训练

Supervised Fine-Tuning 监督微调:目标是让预训练模型学会理解和执行人类的指令。你需要准备大量的“问题-回答”对,让模型学习如何根据问题生成答案

Reward Modeling 奖励模型:准备大量“好回答-差回答”的数据对,让RM学会给好的回答打高分,差的打低分。这个RM本身不直接用于回答用户,而是为后续的强化学习阶段提供“奖励信号”。

Proximal Policy Optimization PPO (强化学习):主模型不断生成回答,RM给出评分,主模型根据评分调整自己以获取更高分数。这个过程能显著提升模型的回答质量,但对算力和技术的要求也最高

DPO (直接偏好优化):为了简化PPO的复杂流程,DPO应运而生。它绕过了训练奖励模型这一步,直接使用“好回答-差回答”的数据对来优化主模型。这使得训练过程更稳定、更高效,是目前非常流行的对齐方法。其变体 ORPO 和 SimPO 则进一步简化了算法。

KTO (Kahneman-Tversky Optimization):这个方法基于行为经济学理论,它的数据要求更简单,只需要对每个回答给出“好”或“坏”的二元标签即可。这在很多实际场景中,比收集成对的对比数据要容易得多

  • 数据路径:训练模型的基础数据物理路径

  • 数据集:训练模型的数据集名

  • 学习率:复习的深度,值太低进步太慢,需要太长时间达到理想效果,值太高容易忘掉已经学习的知识导致训练不稳定

  • 训练轮数:学习轮数,如果数据量小就多训练几轮

  • 最大梯度范数:训练稳定性参数,为梯度的“步幅”设置一个上限,防止训练过程因梯度爆炸而崩溃

  • 随机种子:确保训练结果可复现的关键

  • 最大样本数::限制训练时实际使用的样本数量

  • 计算类型:训练时模型参数和计算采用的数值精度格式,本质上是在训练效果、显存占用和计算速度之间进行权衡

FP32 精度最高,最稳定,但速度慢、显存占用大,FP16 速度较快,显存省,但动态范围小,极易上溢/下溢导致训练不稳定,BF16 (Brain Float)速度较快,显存省,且动态范围与FP32相同,训练非常稳定

  • 截断长度:控制模型一次能“看到”的最大文本长度的关键参数

  • 批处理大小:每个 GPU 处理的样本数量在单块GPU上,单次前向和反向传播(即一次迭代)所处理的样本数量

  • 梯度累积: 可以理解为一种“用时间换空间”的训练策略。它的核心思想是:将一个大批量(Batch)的数据,拆分成多个小批量(Mini-batch)依次喂给模型,分别计算梯度并累加起来,最后再统一更新一次模型参数

  • 验证集比例:自动划分出多大比例作为验证集的参数。验证集不参与模型训练,只用于在训练过程中独立评估模型表现

  • 学习率调节器:控制着学习率在训练过程中的变化方式,决定了模型是“按部就班地学习”,还是“先快后慢地学习”

可配置的参数众多,随着学习的进度可以自行搜索进行配置。

更多推荐