一、LoRA介绍及原理

1.1 模型微调背景

对于增加数据量模型的参数量是公认的提升神经网络性能最直接的方法。目前主流的大模型的参数量已扩展至千亿级别,大模型越来越大的趋势还将愈演愈烈。

这种趋势带来了多方面的算力挑战,想要微调参数量达千亿级别的大语言模型,不仅训练时间长,还需占用大量高性能的内存资源

预训练:从头开始训练一个全新的模型。全新的模型指的是模型参数完全随机,不能处理任何问题。预训练的难度很高,一般的小公司没有实力做预训练。

微调训练(迁移学习):基于之前训练好的模型,来继续学习新的任务。微调的目的往往是让模型具备新的、特定的能力。

微调一般有三种方式:1)全量微调;2)局部微调;3)增量微调;

  • 全量微调对于显存的要求比较高,不常用;
  • 常用的微调方法是局部微调和增量微调;

1.2 LoRA的简介

为了让大模型微调的成本打下来,微软的研究人员开发了低秩自适应( LoRA)技术。LoRA 的精妙之处在于:它相当于在原有大模型的基础上增加了一个可拆卸的插件,模型主体保持不变。LoRA 随插随用,轻巧方便。

对于高效微调出一个定制版的大语言模型来说,LoRA 是最为广泛运用的方法之一,同时也是最有效的方法之一。如果你对开源 LLM 感兴趣,LoRA 是值得学习的基本技术,不容错过。

由于GPU内存的限制,在训练过程中更新整个模型权重成本很高。例如,假设有一个7B参数的语言模型,用一个权重矩阵 W W W 表示。在反向传播期间,模型需要学习一个 Δ W ΔW ΔW 矩阵,旨在更新原始权重,让损失函数值最小。权重更新如下:

W u p d a t e d = W + Δ W W_{updated} = W + ΔW Wupdated=W+ΔW

如果权重矩阵 W W W 包含7B个参数,则权重更新矩阵 Δ W ΔW ΔW 也包含7B个参数,计算矩阵非常耗费计算和内存。

Edward Hu等人提出的LoRALow-Rank Adaptation,低秩自适应)是一种高效的大模型微调技术,通过引入低秩矩阵来减少微调时的参数量,在预训练的模型中,LoRA通过添加两个小矩阵 A A A B B B ,来近似原始大矩阵 Δ W ΔW ΔW,从而减少需要更新的参数数量。

在这里插入图片描述

如上所示, W W W 矩阵的分解意味着我们需要用两个较小的LoRA矩阵 A A A B B B 来表示较大的矩阵。如果 A A A 的行数与 r 相同,B的列数与 r 相同,可以将以上的分解记为 B A BA BA。(BA是矩阵A和B之间的矩阵乘法结果)

这种方法节省了多少内存呢?还需要取决于秩 r,秩 r 是一个超参数。例如,如果有10000行20000列,则需存储200000000个参数。如果我们选择的 A A A B B B,则 A A A 有10000行和8列, B B B 有8行和20000列,比200000000个参数少约830 倍。

当然, A A A B B B 无法捕捉到涵盖的所有信息,但这是LoRA的设计所决定的。在使用 LoRA 时,我们假设模型是一个具有全秩的大矩阵,以收集预训练数据集中的所有知识。当我们微调 LLM 时,不需要更新所有权重,只需要更新比更少的权重来捕捉核心信息,低秩更新就是这么通过矩阵实现的。

具体来说:LoRA通过将全参微调的增量参数矩阵 Δ W ΔW ΔW 表示维两个参数量更小的矩阵 A A A B B B 的低秩矩阵近似实现: W + Δ W = W + B ∗ A W+ΔW=W+B*A W+ΔW=W+BA,其中 B B B A A A 的秩远远小于原始矩阵的秩,从而大大减少了需要更新的参数数量。

LoRA专为减少计算和内存开销而设计,广泛应用于自然语言处理(如GPT、LLaMA等大模型)和其他领域的迁移学习。

1.3 LoRA的原理

在这里插入图片描述
解释上图中的参数:

  • W W W 表示预训练模型的权重矩阵,R表示实数集, W ∈ R d × d W ∈ R^{d × d} WRd×d 表示:预训练的权重矩阵 W W W 是一个 d 行 d列的实数矩阵(R是实数集)
  • A A A 表示 W W W 矩阵分解后的低秩矩阵 m * r,他初始化权重为符合正态分布 N ( 0 , σ 2 ) N(0, σ^2) N(0,σ2),其中 σ 2 σ^2 σ2是标准差,分布宽度由 σ 控制,用于控制初始化的分散程度;
  • B B B 表示 W W W 分解后的低秩矩阵 r * n,他的权重参数则会初始化为零矩阵,这样就可以做到在训练初期低秩矩阵 BA 的乘积也将是零。这意味着在训练初期,模型的权重更新量 ΔW = BA 为零,即模型的输出完全依赖于预训练权重 W
  • X X X 表示输入特征向量,维度为 d
  • r 表示将输入特征向量 X 从维度 d 降维到一个较低的维度 r (r远远小于d),就是低秩矩阵的秩(代表两个小矩阵A和B的中间维度),秩越大代表矩阵信息的含量就越大;
  • h h h 表示输出特征向量,维度为 d,原始模型输出为: h = W X h = WX h=WX,引入低秩调整后: h = W X + B ∗ A X h = WX + B*AX h=WX+BAX,合并权重后: h = ( W + B A ) X h = (W + BA)X h=(W+BA)X

示例:假设预训练权重 W W W 形状为 768×1024

  1. 选择秩 r = 8

  2. B B B 形状: 768×8

  3. A A A 形状:8×1024

  4. Δ W ΔW ΔW(B×A)形状:768×1024(与原矩阵 W W W 相同)

LoRA参数数量: 768×8 + 1024×8 = 14336 远小于原始参数 768×1024 = 786432, LoRA参数总量约占原始参数 的1.83%左右。

目前LoRA微调较流行的框架有两个,一个是基于可视化界面的LLaMA-Factory,另外一个是书生浦语公司的Xtuner

二、LLaMA-Factory介绍

2.1 什么是LLaMA-Factory

LLaMA-Factor官网

LLaMa-Factory是当前热门的大模型微调框架之一,由国内公司开发,支持多种市面上流行的模型,如DeepSeekQwenLAMAGMA等。

该框架集成了丰富的微调方法,包括增量预训练、多模态指令监督微调、奖励机制训练、PPO训练、DPO训练等,并支持不同精度的微调方式,如16比特全参数微调、冻结微调、LoRA微调和QLoRA量化微调。

此外,Lama Factory还支持多模态的微调训练,包括多轮对话、工具调用、图像理解、视频识别、视觉定位和语音理解等。

实验监控方面:支持 LlamaBoard、TensorBoard、Wandb、MLflow、SwanLab 等等。

框架还支持极速推理,集成 vLLMHugging Face 推理环境。Lama Factory 更新频繁,能迅速支持新发布的模型,对于模型的支持力度很高只要有新模型出来就会更新。

2.2 安装LLaMa-Factory的软硬件要求

1. 软硬件依赖

必需项:

在这里插入图片描述
可选项:
在这里插入图片描述

2. 硬件依赖

估算值,GPU显存要求如下:

在这里插入图片描述

QLoRA 一般最低量化到4位,量化到2位模型就乱码了。

三、安装LLaMa-Factory

  1. 创建独立的 LLaMaFactory Conda 环境

    $ conda create -n llamaFactory python==3.10
    
  2. 下载LLaMaFactory

    $ git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
    

    服务器上应该得挂vpn才能下载,或者直接从GitHub上下完传上去。
    在这里插入图片描述

    官方给出的安装命令是:

    $ pip install -e ".[torch,metrics]"
    

    ".[torch, metrics]":表示当前目录(含 setup.py 的根目录)。
    [torch, metrics]:指定安装项目中定义的额外依赖组(称为 extras),setup.py里面配置的。

    我们装基础环境就行 :

    $ pip install -e .
    

    安装截图如下:
    在这里插入图片描述

  3. 启动 LLaMaFactory 可视化界面

    VSCode 连接服务器打开 执行命令 :

    $ llamafactory-cli webui
    # 因为VSCode有端口转发可以打开页面
    

    启动服务时,要在 llamafactory 的根目录启动,如果在其他地方启动后面会找不到根目录下的数据集的,而且 llamafactory 在训练的时候,它还要做一些操作,比如说要保存一些数据参数之类的,训练的权重数据等,它的很多参数的路径也是相对路径,在根目录启动可以避免存在其他的异常错误。
    在这里插入图片描述
    在这里插入图片描述
    把里面的语言换成中文:
    在这里插入图片描述

四、LLaMaFactory进行LoRA微调训练

使用 LLaMaFactory 自带的数据集进行 LoRA 微调训练。

4.1 处理数据集

找到data文件夹中的 identity.json(自我认知训练数据集),把里面的 {{name}}和{{author}},分别换成 张三云百问,张三。

在这里插入图片描述

4.2 配置数据集

dataset_info.json中配置数据集的位置,这里的 file_name 是相对路径,如果配置自己的文件要写自己数据集的路径。

在这里插入图片描述

4.3 LLaMAFactory可视化界面基础配置解析

LLaMAFactory可视化界面的配置界面如下:
在这里插入图片描述

1. 语言

这里选择 zh 中文就行
在这里插入图片描述

2. 模型名称

在这里插入图片描述

  • 下拉框里面找到自己的模型名称就行,LLaMA Factory 对于模型的支持力度很高,基本都有。

  • 为什么去选择一个模型名称呢?因为不同的模型他们用的对话模板是不一样的,系统会自动的根据我们这选择的模型去适配一个对话模板。

3. 模型路径

在这里插入图片描述
这个路径里面支持的是本地模型的文件路径,或者Hugging Face的模型标志符。
- 默认填在上面的是一个相对路径,运行时会从HuggingFace上下载模型。
- 我们把这个路径改成本地服务器的绝对路径:/root/LLM/Qwen/Qwen2.5-0.5B-Instruct
在这里插入图片描述

4. 微调方法

在这里插入图片描述

  • full - 全参数微调:可以最大的模型适应性,可以全面调整模型以适应新任务。通常能达到最佳性能。
  • Freeze - 冻结部分参数微调: 训练速度比全参数微调快,会降低计算资源需求。
  • LoRA(Low-Rank Adaptation) - 低秩适应微调:显著减少了可训练参数数量,降低内存需求,训练速度快,计算效率高。还可以为不同任务保存多个小型适配器,减少了过拟合风险。
  • QLoRA (Quantized Low-Rank Adaptation) - 量化低秩适应微调:训练速度跟 LoRA 差不多,基本保持了 LoRa 的优势,会进一步减少内存使用。

一般选择 LoRAQLoRA,这里我们选择 LoRA

5. 检查点路径

在这里插入图片描述

  • 这个路径指的是,训练过程中保存权重的路径。(第一次训练时没有这个路径)

为什么在这加个检查点路径?

  • 比如说我们的模型正在训练,整体训练的EPOCH 是1000个,如果说我们的模型训练到500个EPOCH 以后的时候,它服务器断电了 GG了,关机了。那我们接下来肯定不希望从头来训练了。我们肯定是要基于这第500个训练结果继续往后训练,我们就可以在这儿就可以把弟500个EPOCH的训练权重给他加进来,这就是检查一下路径的意思,可以继续做训练。如果我们开始没有进行训练的话,这个检查点路径就是空的。

6. 量化等级

在这里插入图片描述

量化等级有:none 不量化,8位量化( INT8)和4位量化( INT4 )QLoRA 它允许在使用低位量化(如4位)的同时,通过 LoRA 方法进行高效的微调。

量化主要是为了模型加速训练用的,这里我们先选不量化。

7. 量化方法

在这里插入图片描述

1、bitsandbytes量化方法

通过混合精度量化(如将部分参数保留为FP16,其余量化到8位或4位),在减少内存占用的同时保持模型精度, 内存效率高,可以显著减少 GPU 内存使用。

优势:

  • 训练友好: 支持“量化感知训练”(如QLoRA方法),允许在微调时动态量化梯度及优化器状态,大幅降低显存需求(在消费级GPU上即可训练大模型)。

  • 灵活部署: 支持8位和4位推理,量化后的模型可直接用于推理,无需额外转换。

  • 精度保留: 混合精度策略减少了量化误差,适合对精度敏感的任务(如对话生成)。

适用于: 需要微调模型或资源有限(如单卡GPU)的场景,同时兼顾训练与推理

2、Hqq量化方法

无需依赖校准数据(即零样本量化),专注于硬件兼容性,通过分块量化(Block-wise Quantization)和优化存储格式,提升推理速度。

优势:

  • 免校准量化:直接对模型权重量化,节省数据准备时间。
  • 低资源部署:量化后模型体积小,适合边缘设备(如手机、嵌入式设备)。
  • 硬件适配:通过分块策略优化内存访问模式,提高计算单元利用率(如GPU/CUDA核心)。

适用于: 快速部署轻量级模型到资源受限的硬件环境,尤其是在无校准数据的边缘侧推理。

3、EETQ(极速推理的引擎级优化)

深度集成硬件加速特性(如 NVIDIA的Tensor Core),通过低精度计算(INT8)和计算图优化(操作融合、Kernel优化),最大化推理吞吐量。

优势:

  • 极致性能: 专为高吞吐、低延迟设计,可处理大规模并发请求。
  • 硬件协同: 充分利用张量核心的并行计算能力,优化内存带宽瓶颈。
  • 动态量化策略: 根据输入动态调整量化参数,平衡精度与速度。

适用于: 云端服务或高性能服务器,需要处理高并发推理请求(如批量生成任务)。

8. 对话模板

我们选的是 Qwen2.5-0.5B-Instruct,因为不同模板的话模板是不一样的,选择模型名称时已经回填好了。
在这里插入图片描述

我们在微调训练的时候,一定是要基于人家当前模型的对话模板来进行训练。

9. RoPE插值方法

旋转位置编码(RoPE)是一种在大语言模型中常用的位置编码方法,通过旋转向量来表示位置信息。RoPE 插值方法主要用于扩展模型的上下文长度。
在这里插入图片描述

10. 加速方式

  1. auto 自动模式会根据你的硬件配置和当前的训练任务自动选择最适合的加速技术。这是最简单的一种方式,不需要用户进行任何额外配置。
  2. FlashAttention2 是一种优化的注意力机制,旨在加速 Transformer 模型的训练。它通过优化内存访问和计算流程来提高训练速度。
  3. Unsloth 是一种特定的优化技术,用于减少训练过程中的计算冗余和内存占用,从而加快训练速度。
    在这里插入图片描述

4.4 LLaMAFactory训练任务配置解析

在这里插入图片描述

1. 训练阶段

在这里插入图片描述

  1. 监督微调 Supervised fine Tuning
    好处:快速适配特定任务(如客服、摘要、翻译)。
    实现:用人工标注的输入-输出对(如问答数据)直接调教模型行为。

  2. 奖励建模(RM) Reward Modeling
    好处:让模型学会「人类偏好标准」,判断回答的好坏。
    实现:用人工标注的「好回答 vs 差回答」对比数据,训练一个评分AI。

  3. 近端策略优化(PPO)Proximal Policy Optimization
    好处:提升回答质量,使输出更符合人类喜好。
    实现:1. 让模型生成多个回答 → 2. 用RM为回答打分 → 3. 通过得分高低动态调整模型生成策略。

  4. 直接偏好优化(DPO)Direct Preference Optimization:
    好处:省去RM训练步骤,直接优化模型偏好。
    实现:用「直接告诉模型哪个回答更好」的对比数据,一步到位调整模型输出倾向。

  5. (KTO)Kahneman-Tversky Optimization
    好处:降低标注成本,无需严格对比数据。
    实现:只标注单一样本的好坏标签,通过「鼓励好回答、抑制坏回答」优化模型。

  6. 预训练(Pre-Training
    好处:建立底层语言理解能力(语法、知识、推理)。
    实现:用海量无标注文本,通过「预测下一个词」让模型自我学习。

真正的微调训练其实是SFT,指令微调(监督微调),其他几种方式是与预训练相关的,这里我们选择STF

2. 数据路径

在这里插入图片描述

这里的data是以LLaMAFactory为根目录下的数据集目录。

3. 数据集

在这里插入图片描述
这里就可以加载data目录下的数据集,选择后还可以预览之前修改的数据集。这里我们选择identity数据集,部分数据如下:

在这里插入图片描述

4. 学习率

在这里插入图片描述

AdamW的学习率通常在 1e-53e-5 之间,于大型语言模型(如 BERT、GPT 等)的微调,常用的学习率范围是 2e-55e-5,从一个相对较小的值开始,如 2e-5

如果训练不稳定或损失波动很大,可以尝试降低学习率,如果训练进展太慢,可以尝试略微增加学习率。

因为 Lora 更新的参数空间更小,梯度噪声更高,需要更大学习率以快速收敛,这里我们用默认的 5e-5 就行。

注意:

  1. 小数据集不要使用大学习率;
  2. 不要担心训练速度慢,稳定性更加重要;
  3. 全参数微调的学习率要比LoRA小一个数量级;

5. 训练轮次(Epochs)

训练轮次即模型完整地遍历一次整个训练数据集的次数,即一个 Epoch 表示模型已经学习了所有训练样本一次;

  • 训练轮数过大容易造成过拟合的情况,就是缺乏了扩散思考问题的能力,只会死记硬背了。
  • 训练轮数太少,可能会欠拟合,也就是没有充分学习;

在这里插入图片描述

我们选择训练轮数(epochs)需综合任务难度、数据规模、模型容量和收敛速度来进行动态调整。

理想状态(2~10个轮次),学习比较充分而且泛化能力好,掌握了基本知识又能基于现有知识对新问题进行分析解答。

训练阶段 推荐轮数 核心逻辑
预训练 1-3轮 大规模数据(千亿级) Token 数据充分覆盖语言模式,过多轮数易引发灾难性遗忘;
监督微调(SFT) 3-10轮 中等数据量(万级样本)下适配任务分布,依赖早停法(验证 Loss 稳定下降时终止)
RLHF (PPO/DPO) 1-5轮 策略优化易陷入局部最优或过拟合,小步幅迭代(epoch=1时需增加 batch 内迭代步数)

补充:轮次的核心影响因素

  1. 数据规模

    数据规模 推荐轮数 说明
    小数据(<1k样本) 1-3轮 避免过拟合,依赖数据增强或正则化
    中等数据(1k-10k) 3-10轮 平衡任务适配与过拟合风险
    大数据(>10k) 2-5轮 单轮即可充分学习,降低计算成本
  2. 任务复杂度

    任务类型 推荐轮数 说明
    简单任务(分类、短文本生成) 3-5轮 低复杂度任务快速收敛
    复杂任务(长文本推理、多轮对话) 5-15轮 需多轮细粒度调优,避免欠拟合
  3. 模型规模

    模型规模 推荐轮数 说明
    小模型(7B以下) 5-8轮 参数少,学习效率高
    大模型(13B+以上) 8-15轮 收敛慢,需更多迭代,但硬件成本显著增加

6. 最大梯度范数

在这里插入图片描述
SFT 微调一般选择:1.0,即 max_grad_norm=1.0 (Hugging Face默认值)

模型规模 最大梯度范数 学习率范围 LoRA Rank 建议 附加优化策略
0.5B 2.0-3.0 1e-4 - 3e-4 4-8 轻量级模型,可激进调整学习率
1.5B 1.5-2.5 8e-5 - 2e-4 8-16 适当增加批量大小以提高效率
3B 1.0-1.8 5e-5 - 1e-4 16-32 需监控梯度方向稀疏性
7B 0.8-1.5 3e-5 - 8e-5 32-64 默认黄金比例(模型稳定性最佳)
14B 0.5-1.0 1e-5 - 3e-5 64-128 推荐开启混合精度 (bf16/fp16)
32B 0.3-0.8 5e-6 - 1e-5 128-256 必选梯度检查点 (gradient_checkpointing)
72B 0.1-0.3 1e-6 - 5e-6 256-512 必须分片优化器 (sharded optimizer)
  1. 最大梯度范数:

    防止梯度爆炸的关键参数,模型越大需越严格限制。

    • 示例:72B 模型需将梯度范数控制在 0.1-0.3。
  2. 学习率范围:

    与模型规模成反比,大模型需更小的学习率。

    • 0.5B 模型可用 1e-4 高学习率快速收敛。
  3. LoRA Rank 建议:

    低秩适应 (LoRA) 的关键超参数,平衡效率与效果。

    • 7B 模型推荐 32-6472B256-512 以保留更多参数信息。
  4. 附加优化策略:

    大模型(14B+)需依赖混合精度、梯度检查点、分片优化器等技术降低显存消耗。

    轻量级模型(0.5B-3B)可通过调整学习率和批量大小灵活优化。

7. 最大样本数量

在这里插入图片描述
主要是用来控制它数据集的大小的,那么这个东西可以控制也可以不控制,但是如果给他改的太少了,比如说改成了100,那就意味着它当前加载数据的时候最多只加了100条。所以这个参数可以不管,用默认的就行了。

8. 计算类型

在这里插入图片描述
混合精度训练是为了提高训练速度并减少内存占用,同时保持模型的精度和稳定性,我们这里的通义千问精度就是 bfloat16,这里不用管。

9. 截断长度

在这里插入图片描述

输入序列分词的最大长度 ,这个就是模型的 maxlength,他会影响显存的大小,要根据数据的这个长短来给一个适当的值。不然的话给多了它是没有任何意义和价值的。

我们这里做的自我认知训练,他的回答都不长所以给个218就足够了。

10. 批处理大小

在这里插入图片描述
这个得根据服务器的GPU显存能力来调整,一般是要运行以后显存占用率到 90% 左右是最好的,这里先给30试一下。

11. 梯度累计

在这里插入图片描述
在用 LoRA 进行指令微调时,梯度累积步数(Gradient Accumulation Steps)指在多个小批次上累计梯度,累计到指定步数后,再统一更新模型参数。

梯度累积步数需要综合显存限制、训练效率和模型稳定性三方面的因素。

  1. 根据显存定基础
    实际批处理大小 (batch_size) 尽量占到最大的显存,能多大就尽量多大(比如单卡24G能跑 batch=16)。
    显存不足时:减小实际 batch_size,同时同步增加梯度累积步数,保持「有效批次大小 = 实际batch_size × 梯度累积步数」不变。

  2. 学习率跟着变
    如果增大有效批次(比如调整后翻倍),可以按比例调大学习率(比如原来用 2e-5,可试 4e-5)。
    小批次+多累积步数时更要降低学习率防震荡。

  3. 任务类型微调
    普通任务:按显存选步数(常用4-8步)
    数据敏感任务(如医疗问答):步数调大些(8-16步),减少梯度噪声,让更新更稳。
    快捷公式:梯度累积步数 = 你需要的总批次大小 ➗ 单卡实际能跑的batch_size

12. 验证集比例

在这里插入图片描述
在的这个问答模型上面,实际上验证集可加可不加,它的意义不是很大。

在生成模型上面,它的意义并不是很大,因为生成模型的不用去担心它过拟合,它很难会出现这种过拟合的这种情况,所以一般情况下不需要用这个验证集去验证模型是否过拟合了。

lama factory上面这个验证集就是测试集。它给验证集的主要目的,就是我们在训练时候可以看到一些验证的评估指标,如果配了这个验证集的话,训练完之后是可以看到人家最后会给你给到一个评估指标的。

在这里插入图片描述

  • 这个地方就算验证评估指标的。

验证集数量可以参考下面去选择:

数据总量 验证集建议 原因
小数据 (<1k条) 15%-20% 避免训练数据过度流失,同时保证验证可靠性
中等数据 (1k-10w条) 5%-10% 平衡评估准确性与训练充分性
大数据 (>10w条) 1%-3% 万级验证样本已足够稳定评估,进一步增加比例对效果提升有限

表格说明

  • 小数据场景:
    验证集占比需较高(15%-20%),因数据总量少,需尽可能保留足够样本评估模型泛化能力。
  • 中等数据场景:
    验证集占比降至5%-10%,兼顾训练数据利用率和评估准确性。
  • 大数据场景:
    验证集占比可低至1%-3%,因万级样本已能稳定反映模型性能,过多验证数据会浪费计算资源。

13. 学习率调节器

在这里插入图片描述

关键结论

  1. 生成任务:优先使用cosine调度器,设置 warmup_ratio=0.05 平衡稳定性避免后期震荡。
  2. 小数据:必须设置最低学习率 min_lr(如cosine_with_min_lr的1e-6)防止参数冻结。
  3. 多任务:reduce_lr_on_plateaupatience=3 可动态应对不同任务节奏。
  4. 预训练:inverse_sqrt 调度器与 Transformer 架构高度匹配。

4.5 LoRA参数详解

在这里插入图片描述

1. LoRA秩(rank)

在这里插入图片描述
默认值是8,它上面解释其实说的很清楚,这个参数控制的是训练的这个lora矩阵的大小,这个值越大,这个矩阵会越大一些。

2.LoRA缩放系数( alpha)

在这里插入图片描述
缩放系数一般设置的是lower秩的二倍,一般设的是这个值的二倍。没有特殊要求情况下,不用去管这个参数。

3.LoRA随机丢弃

在这里插入图片描述
我们这里训练的很简单,选个0。

LoRA的权重随机丢弃概率 (lora_dropout) 控制适配器层在训练时的随机失活强度,直接影响模型的正则化力度和训练稳定性。其选择需要与 任务需求、数据特征 和 模型规模 深度联动。

在这里插入图片描述

4. LoRA+ 学习率比例

在这里插入图片描述
B矩阵:全零初始化通常给到 1.5-3.0,但是我们这个模型很小就不修改了。

4.6 其他配置

在这里插入图片描述

1. 预览命令

在这里插入图片描述
这个就不用管了,其实就是把上面那一堆配置的东西变成命令放到命令行去执行,都有界面了谁还用命令行。

2. 输出目录

保存结果的目录,它会自动创建好啊,一般是根据我们的这个训练的时间来进行创建的

3. 配置路径

这就是我们前面配置的这些参数,它会把这个配置文件保存到这给路径下。

4. 设备数量

在这里插入图片描述
这显示的是当前训练这台服务器上面有几张卡,目前就只了一租张卡。如果你有两张卡,这就显示的是2。如果你有八张卡,这显示的就是8。

如果你的卡数是大于1的,那么你就可以用这个多卡训练。

4.7 开始训练

在这里插入图片描述

然后下面就有日志了:

在这里插入图片描述

在启动时要关注 Total optimization steps 不能小于100,如果小于100得修改其他参数里面的保存间隔。

在这里插入图片描述

1. 查看显存占用情况

先安装 pip install nvitop,有的服务器没有这个所以先安装一下

  • 执行 nvitop 查看显存占用情况
    在这里插入图片描述

这是训练的损失输出情况:

在这里插入图片描述

损失趋势图谱:可以看到在150步-200步之间就达到拟合

在这里插入图片描述

上图中的两条线:original 颜色较浅代表的是原始数据真实的损失折线,smoothed 是他自己做了平滑处理后的损失趋势折线

他的权重默认是每100步保存一次,保存的位置在save目录下:check-point-轮次,他的修改来源于其他参数设置。

在这里插入图片描述

2.停止训练

在这里插入图片描述

点击中断可以停止训练,但是需要检查一下显存是否被释放:

在这里插入图片描述

3. 继续训练

如果在训练的过程中服务器意外宕机或者其他情况意外中断,我们可以选择使用把权重路径复制出来,继续训练。

在这里插入图片描述
然后点击开始,就可以继续训练。

4.8 结果验证

1. 原始Qwen

先切换到 chat,然后填上本地模型的路径,加载模型即可。

我们先用原始的Qwen试一下:

在这里插入图片描述

在这里插入图片描述

2.训练后Qwen

  1. 添加检查点路径,并卸载原始Qwen

在这里插入图片描述
2. 加载模型并验证

在这里插入图片描述
这就训练完成200轮效果就很好。因为数据非常的少!!!

参考:https://juejin.cn/post/7488287265846067212

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐