基于LLaMA-Factory的LoRA微调实战与性能剖析​

基于LLaMA-Factory的LoRA微调实战与性能剖析​

目录

一、 实验说明

1.1 问题和需求

1.2 实验配置

二、LLaMA-Factory

2.1 LLaMA-Factory介绍

2.2 前期准备

2.2.1 微调数据集准备

2.2.2 conda环境的安装

2.2.3 模型下载

2.2.4 软硬件依赖

2.3 安装LLaMA-Factory

2.3.1 安装conda环境

2.3.2 下载LLaMA-Factory源码

2.3.2 安装相关依赖

三、 LoRA微调

3.1 添加自定义数据集

3.2 可视化微调

3.3 验证前期准备

3.3.1 加载模型

3.3.2 加载自定义数据集

3.4 参数说明

3.4.1 微调方法

3.4.2 QLoRA和对话模版

3.4.3 微调参数设置

3.4.4 LoRA参数设置

3.5 启动微调

四 、显存消耗预估

五、LOSS曲线

5.1 LOSS曲线

​编辑

5.2 eval_loss

5.3 整个微调流程

六、模型快速评估验证

6.1 挂载LoRA模型节点

6.2 验证模型效果

七、小结

八 、参考文章


一、 实验说明

1.1 问题和需求

        在前面的文章已经提出了模型的生成的内容的客观评估指标和如何得到评估数据。本章将使用LLaMA-Factory来对Qwen2.5-1.5B-Instruct模型进行LoRA微调。将围绕着,微调环境的安装、微调数据集准备划分、如何设置微调参数、如何监控微调过程、如何判断微调效果等方面进行阐述。

        使用到的微调数据集的原始数据集是在魔塔社区的DISC-Law-SFT · 数据集 建议先去看我上一篇博文再看这篇。

        生成式任务模型测评实战【附带源码】_生成任务的评估指标-ZEEKLOG博客

1.2 实验配置

二、LLaMA-Factory

2.1 LLaMA-Factory介绍

LLaMA-Factory/README_zh.md at main · hiyouga/LLaMA-Factory

项目特色

  • 多种模型:LLaMA、LLaVA、Mistral、Mixtral-MoE、Qwen、Qwen2-VL、DeepSeek、Yi、Gemma、ChatGLM、Phi 等等。
  • 集成方法:(增量)预训练、(多模态)指令监督微调、奖励模型训练、PPO 训练、DPO 训练、KTO 训练、ORPO 训练等等。
  • 多种精度:16 比特全参数微调、冻结微调、LoRA 微调和基于 AQLM/AWQ/GPTQ/LLM.int8/HQQ/EETQ 的 2/3/4/5/6/8 比特 QLoRA 微调。
  • 先进算法GaLoreBAdamAPOLLOAdam-miniMuonOFT、DoRA、LongLoRA、LLaMA Pro、Mixture-of-Depths、LoRA+、LoftQ 和 PiSSA。
  • 实用技巧FlashAttention-2UnslothLiger Kernel、RoPE scaling、NEFTune 和 rsLoRA。
  • 广泛任务:多轮对话、工具调用、图像理解、视觉定位、视频识别和语音理解等等。
  • 实验监控:LlamaBoard、TensorBoard、Wandb、MLflow、SwanLab 等等。
  • 极速推理:基于 vLLM 或 SGLang 的 OpenAI 风格 API、浏览器界面和命令行接口。

2.2 前期准备

2.2.1 微调数据集准备

LLaMA-Factory/data/README_zh.md at main · hiyouga/LLaMA-Factory

需要的数据集格式如下:

[
  {
    "instruction": "用户指令(必填)",
    "input": "用户输入(选填)",
    "output": "模型回答(必填)",
    "system": "系统提示词(选填)",
    "history": [
      ["第一轮指令(选填)", "第一轮回答(选填)"],
      ["第二轮指令(选填)", "第二轮回答(选填)"]
    ]
  }
]

通过python代码把csv的内容转化成如下格式的数据集,下面是一个元素。CriminalLaw_train.json为微调数据集,总共有4000个如下格式和相似的关于刑事裁决生成内容的数据元素。

  {

    "instruction": "在法律三段论中,大前提是法条,小前提是案件的事实,结论是法律判决\n经审理查明,2014年10月8日8时30分许,被告人平某某携带汽油、打火机等物至本区新桥镇新站路XXX号新桥镇政府601室党委书记张某某的办公室,在拆迁分房的诉求得不到满足的情况下,采用泼洒自备的汽油,用打火机点燃的方式意图自焚,后张某某、沈某阻止平某某点燃打火机的行为,在此过程中汽油泼洒到了张某某和沈某身上,后平某某被控制住,其××行为未能得逞。2014年10月8日,被告人平某某被公安人员抓获。上述事实,被告人平某某在开庭审理过程中亦无异议,且有证人张某某、沈某、丁某、卢某某的证言及相关辨认笔录,扣押笔录、扣押决定书、扣押清单、接受证据材料清单、随案移送清单及照片,现场勘验检查笔录及现场照片,医院检验情况记录,上海市公安局物证鉴定中心出具的检验报告,关于“明中中心村”配套商品房安置的实施意见、公证书、房屋动迁协议书及情况说明、答复意见,公安机关出具的案发、抓获经过及常住人口基本信息等证据证实,足以认定。\n请根据法律三段论的推理方式,对所提供的案件进行判决推理,并得出合理的判决结果。",

    "input": "['《刑法》第一百一十四条:【放火罪】【决水罪】【爆炸罪】【投放危险物质罪】【以危险方法危害公共安全罪】放火、决水、爆炸以及投放毒害性、放射性、传染病病原体等物质或者以其他危险方法危害公共安全,尚未造成严重后果的,处三年以上十年以下有期徒刑。']",

    "output": "根据《刑法》第一百一十四条的规定,放火罪是指放火、决水、爆炸以及投放毒害性、放射性、传染病病原体等物质或者以其他危险方法危害公共安全,尚未造成严重后果的行为。根据案件事实,被告人平某某携带汽油、打火机等物品,意图自焚并泼洒汽油,但被张某某、沈某阻止,未造成严重后果。因此,被告人平某某的行为符合放火罪的构成要件。\n根据《刑法》第一百一十四条的规定,对于犯有放火罪的被告人,可以处三年以上十年以下有期徒刑。根据案件事实和法律规定,可以认定被告人平某某犯有放火罪,因此,可以判处被告人平某某三年以上十年以下有期徒刑的刑罚。\n需要注意的是,以上仅为一种可能的判决和刑罚,具体的判决结果还需要根据法庭审理的情况、被告人的辩护意见以及其他相关因素进行综合考量。"

  },

2.2.2 conda环境的安装

        为了方便微调自定义的数据集CriminalLaw_train.json,选择使用源码安装LLaMA-Factory。为了防止环境冲突,选择安装conda。可以参考下面的文章进行安装。

手把手教你使用云服务器和部署相关环境!!!_lanyun-tmp-ZEEKLOG博客

2.2.3 模型下载

先使用modelscope下载模型

modelscope download --model Qwen/Qwen2.5-1.5B-Instruct --local_dir /root/model/Qwen2.5-1.5B-Instruct

可以重点检测一下config.json和tokenizer_config.json文件和魔塔社区的有没有下载不一样,避免后续加载模型出错。

2.2.4 软硬件依赖

必需项至少推荐
python3.93.10
torch2.0.02.6.0
torchvision0.15.00.21.0
transformers4.49.04.50.0
datasets2.16.03.2.0
accelerate0.34.01.2.1
peft0.14.00.15.1
trl0.8.60.9.6
可选项至少推荐
CUDA11.612.2
deepspeed0.10.00.16.4
bitsandbytes0.39.00.43.1
vllm0.4.30.8.2
flash-attn2.5.62.7.2

2.3 安装LLaMA-Factory

2.3.1 安装conda环境

conda create -n llamafacotry python=3.10 -y

conda activate llamafacotry

2.3.2 下载LLaMA-Factory源码

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

cd LLaMA-Factory

2.3.2 安装相关依赖

        安装相关依赖pip install -e ".[torch,metrics,vllm]"

        尽量选用anaconda,不要在minconda用,那个环境容易出BUG,用比较新的pytorch,vllm会依赖于pytorch,如果 pytorch版本低的话,安装vllm会把旧版本pytorch卸载,然后安装新的pytorch的,但是没有卸载旧pythorch的相关依赖包,所以容易包冲突,因此最好用新的pytorch

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

llamafactory-cli version # 验证安装是否成功

三、 LoRA微调

3.1 添加自定义数据集

准备数据集可以分为两个步骤:

  • 1)准备数据集文件,json 格式,存放到 data 目录下
  • 2)注册数据集,将 json 文件注册到 data 目录下的 dataset_info.json 文件

        如图所示,先把自定义数据集CriminalLaw_train.json存放到data目录中,然后在dataset_info.json中添加相关格式的信息。不同格式的信息,添加的内容也不一样。

Alpaca 格式

[
  {
    "instruction": "用户指令(必填)",
    "input": "用户输入(选填)",
    "output": "模型回答(必填)",
    "system": "系统提示词(选填)",
    "history": [
      ["第一轮指令(选填)", "第一轮回答(选填)"],
      ["第二轮指令(选填)", "第二轮回答(选填)"]
    ]
  }
]

对于上述格式的数据,dataset_info.json 中的数据集描述应为:

"数据集名称": {
  "file_name": "data.json",
  "columns": {
    "prompt": "instruction",
    "query": "input",
    "response": "output",
    "system": "system",
    "history": "history"
  }
}

LLaMA-Factory/data/README_zh.md at main · hiyouga/LLaMA-Factory

上述网站可以找到不同微调格式的对应数据集描述。对于Alpaca 格式中选填的部分描述也同样是选填。

3.2 可视化微调

在LLaMA-Factory目录下执行下面的命令启动可视化微调面板

llamafactory-cli webui

然后浏览器会自动打开可视化面板

3.3 验证前期准备

3.3.1 加载模型

        如果2.3.2的依赖安装没有错误的话,应该是可以通过vllm来加载本地模型。如图可以使用本地的模型和vllm来加载模型,验证一下模型和vllm有没有错误。

3.3.2 加载自定义数据集

如果在3.1中添加自定义数据集成功的话,就可以找到自己添加的自定义数据集并且可以预览。

PS如果没有找到,说明添加自定义数据集失败,可能是修改dataset_info.json后没有保存。

3.4 参数说明

3.4.1 微调方法

可以参考我之前的博客【史上最全】大模型微调理论知识篇-ZEEKLOG博客

3.4.2 QLoRA和对话模版

量化等级​

启用量化 (QLoRA)。通过降低模型参数的精度来​​大幅节省显存​​。

none

none​: 不量化,需要最多显存。若显存不足,应选择如 int4或 int8

​量化方法​

使用的量化算法。在选择量化等级后,指定具体的技术实现。

bnb

bnb​: 使用 BitsAndBytes库,这是最常用和稳定的量化方法。

​对话模板​

构建提示词时使用的模板。​​必须与模型匹配​​,否则模型无法正确理解输入。

qwen

qwen​: 适用于​​通义千问模型

​RoPE 插值方法​

RoPE插值时使用的方法。用于​​扩展模型的上下文处理长度​​的高阶技术。

none

none​: 不使用。仅在需要处理长于模型原始训练长度的文本时(如从2K扩展到8K),才选择如 linear等方法。

​加速方式​

使用的加速方法。选择训练优化库以提升速度和支持更大模型。

auto

auto​: 由框架自动选择最佳配置。也可手动指定 unsloth进行更深入的多卡或显存优化。

模型LoRA微调的过程中,选择量化叫做QLoRA,能够很好的降低模型微调过程中的资源。

如果模型LoRA微调结束后,在选择量化一个新的模型,这叫传统量化。一般来说,QLoRA的效果好于传统量化。

这里我们就选择None,不进行QLoRA处理

格式结构二进制示例实际存储值误差备注
FP321位符号 + 8位指数 + 23位尾数0 10000000 100100100001111110110103.1415925414≈0.0000001完整浮点数表示,精度极高
FP161位符号 + 5位指数 + 10位尾数0 10000 10010010003.140625≈0.0009676半精度浮点数,尾数减少到10位,精度降低
BF161位符号 + 8位指数 + 7位尾数0 10000000 10010013.125≈0.0165926保留FP32的指数范围,但尾数精度大幅降低
INT88位整数(无符号)11001000 (200)3.14 (使用Scale=0.0157)理想情况下可控制在1%内需通过量化并使用Scale还原,范围有限
INT44位整数(有符号)0011 (3)3.426 (使用Scale=1.142)≈+8.9%极低精度,误差极大,仅适用于粗略表示

3.4.3 微调参数设置

微调参数设置可以类比成给学生补课的教学计划安排。

参数

设定值

含义与说明

​学习率​

5e-5

​训练中最关键的参数之一​​。控制模型参数每次更新的步长。值过大可能导致训练不稳定,过小则收敛缓慢。5e-5是微调任务中一个常见且合理的初始值。

​训练轮数​

3.0

整个训练数据集会被模型完整地“学习”多少遍。3.0 轮意味着模型会看训练数据3遍。

​最大梯度范数​

1.0

​梯度裁剪​​的阈值。用于防止训练中梯度(指导参数更新的方向)过大,避免训练过程不稳定或“崩溃”。

​最大样本数​

100000

从数据集中随机抽取的最大样本数量。用于快速实验或控制训练规模,避免使用全部数据。

​计算类型​

bf16

使用 ​​混合精度训练​​。bfloat16是一种浮点数格式,能在保持模型训练稳定性的同时,显著节省显存并加快训练速度。

​截断长度​

2048

将训练文本统一截断或填充到的最大长度(Token数)。超出部分会被丢弃。设置越大,所需显存越多。

​批处理大小​

1

​每个GPU一次处理多少条样本​​。值越大,训练越稳定、越快,但对显存要求极高。当显存不足时,此值常设为1。

​梯度累积​

1024

​一种在显存不足时模拟更大批处理大小的技术​​。模型会连续处理1024个批次的样本后,再计算平均梯度并更新一次参数。它和批处理大小共同决定了​​有效批大小​​(= 批处理大小 × 梯度累积步数)。此处有效批大小极大(1 * 1024 = 1024),需结合学习率谨慎调整。

​验证集比例​

0

从训练数据中划分多少比例作为验证集,用于在训练过程中评估模型表现。设为 0意味着​​不进行验证​​,通常只为快速完成训练。建议设置为 0.05或 0.1以监控训练效果。

​学习率调节器​

cosine

控制学习率在训练过程中如何变化。cosine(余弦退火)会让学习率从初始值像余弦曲线一样平滑下降至0,是一种常见且有效的策略。

学习率:

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

训练轮数:

欠拟合(太少轮数)

模型没有充分学习,就像只复习了一遍教材,考试时可能表现不佳

理想状态(3-6轮)

模型学习充分且泛化能力好,就像合理复习后既掌握知识又能应对新题目

过拟合(太多轮数)

模型记住训练数据但泛化差,就像死记硬背教材但不会做变式题

批处理大小和梯度累计:

批量大小越大,显存消耗越多。梯度累积可以用小显存实现大批量的效果。

小模型/小数据集:从batch_size=1或2开始

通过梯度累积增加有效批量大小

大batch_size搭配大学习率

传统方式 (直接大批量)

💰 一次性支付 8 元

💾 需要大量现金 (显存)

❌ 可能支付不起

梯度累积 (分期付款)

💸 分 2 期,每期 4 元

💾 只需少量现金 (显存)

✅ 最终支付相同总额

核心思想: 用时间换空间,用多次小计算实现一次大计算的效果!

截断长度:

决定了模型处理文本时候能接受的最大token数量。

对数据集中的每个样本,比如样本一,字符长度是4000token,截断长度是2000token,那么我的样本一就是不完整的数据拿去训练了,会大大影响训练的效果。

1)在显存条件允许的情况下,截断长度设定成,数据集中单条数据最大的token数量。

2)如果微调数据集中有1-5%的样本数据文本长度非常大,那么我们可以把截断长度设定成P99,P95的长度,忽略那部分样本数据或者剔除那部分样本数据。

不同的模型计算token的算法是不一样的

在LLaMA-Factory/scripts/stat_utils/length_cdf.py 主要用于​​分析数据集中样本经过分词后的长度分布​​。这对于微调前设置合适的 cutoff_len(截断长度)参数非常重要

# 首先,确保你处在 LLaMA-Factory 项目的根目录下
# 然后执行类似下面的命令
python ./scripts/stat_utils/length_cdf.py \
    --model_name_or_path /root/model/Qwen2.5-1.5B-Instruct \
    --dataset CriminalLaw_train \
    --dataset_dir ./data \
    --template qwen

可以看到,我设置2048就可以满足99.97%的样本的token最大长度了。

验证集比例:

从训练数据中划分多少比例作为验证集,用于在训练过程中评估模型表现。避免模型训练过程中过拟合。验证集设置了的话,就会出现一个验证集的loss曲线,可以更好的观察微调训练的效果。

建议:

1000条以下的小数据集,验证集数据大于100。

10000条以上的数据集,验证集数据大于10000。

比较复杂的任务,验证集的数据比例可以设置高一点。

3.4.4 LoRA参数设置

参数

设定值

含义与作用

通俗解释与建议

​LoRA 秩​

8

​LoRA 矩阵的秩​​,决定适配器的大小和表征能力。

​模型的“学习深度”​​。秩越高,学习能力越强,但可能过拟合。​​常用值为 8, 16, 32​​。简单任务或小数据集可用较低秩(如8)。

​LoRA 缩放系数​

16

控制 LoRA 适配器的输出对原始模型权重的​​影响强度​​。

​适配器的“音量旋钮”​​。通常与学习率配合调整。​​一般保持2*​LoRA 秩​即可​​。

​LoRA 随机丢弃​

0

在 LoRA 层中应用 ​​Dropout​​ 的概率,一种正则化技术。

​防止模型“死记硬背”​​。有助于防止过拟合。初始可设为 0,如果过拟合再尝试设为 0.1。

​LoRA+ 学习率比例​

0

为 LoRA 的 B 矩阵设置一个​​不同于 A 矩阵的学习率​​。

​更精细的学习控制​​。​​设为 0 表示不启用 LoRA+​​ 算法。

​新建适配器​

-

在现有的适配器上创建一个随机初始化后的新适配器。

用于高级工作流,例如连续学习不同任务。​​初学者通常无需勾选​​。

​LoRA 作用模块​

(空)

​指定模型内部哪些层需要添加 LoRA 适配器​​。

​精准微调​​。默认作用于注意力层。​​初学者留空即可​​,会使用框架默认值。

​附加模块​

(空)

指定​​除 LoRA 层外​​,还有哪些模块需要被训练。

​全参数微调的替代方案​​。例如,想同时训练模型最后的分类头,可以在这里指定。​​通常留空​​。

LoRA的秩和LoRA 缩放系数

秩值 = 思维模板数量

4-8 :样本不足1000时的保险选择,降低过拟合风险,训练更稳定可靠。

8-16:平衡效果与效率,适合大多数应用场景,是入门和实践的最佳起点。

32+:需要强表达能力的场景,但要有足够数据和调参经验支撑

一般设置LoRA 缩放系数 = 2 * LoRA的秩

3.5 启动微调

设置好参数后启动微调。

llamafactory-cli train \ --stage sft \ --do_train True \ --model_name_or_path /root/model/Qwen2.5-1.5B-Instruct \ --preprocessing_num_workers 16 \ --finetuning_type lora \ --template qwen \ --flash_attn auto \ --dataset_dir data \ --dataset CriminalLaw_train \ --cutoff_len 2048 \ --learning_rate 4e-05 \ --num_train_epochs 4.0 \ --max_samples 4000 \ --per_device_train_batch_size 2 \ --gradient_accumulation_steps 6 \ --lr_scheduler_type cosine \ --max_grad_norm 1.0 \ --logging_steps 5 \ --save_steps 100 \ --warmup_steps 0 \ --packing False \ --enable_thinking False \ --report_to none \ --output_dir saves/Qwen2.5-1.5B-Instruct/lora/train_2025-10-10-09-35-38 \ --bf16 True \ --plot_loss True \ --trust_remote_code True \ --ddp_timeout 180000000 \ --include_num_input_tokens_seen True \ --optim adamw_torch \ --lora_rank 12 \ --lora_alpha 24 \ --lora_dropout 0 \ --lora_target all \ --val_size 0.1 \ --eval_strategy steps \ --eval_steps 100 \ --per_device_eval_batch_size 2

总共1200步数这个是可以算出来的:

4000 * 0.9 * 4 % (2 * 6)= 1200 步数

数据集样本数量 * 90%拿去训练 * 训练4轮 % (批处理大小 * 梯度累计) = 总共训练的步数。

默认是  100 步保存一次LoRA模型的权重

1)计算每轮训练样本集量 = 数据集样本数量 * 90%拿去训练

2)计算实际每次参数更新处理的样本数量 = GPU使用的卡数量 * 单卡批处理大小 * 梯度累计

3)计算每轮(epoch)训练的步数 = 每轮训练样本集量 % 实际每次参数更新处理的样本数量

4)总微调训练步数 = 每轮(epoch)训练的步数 * 训练轮数

图片还说明下面信息:

trainable params: 13,848,576 || all params: 1,557,562,880 || trainable%: 0.8891

说明微调的参数是13,848,576。占模型总参数的0.89%

四 、显存消耗预估

未启用优化手段的情况下

显存消耗分步对应设置估算方式
基础模型权重Qwen2.5-1.5B-Instruct参数 15亿,精度

bfloat16

15亿 * 2 Byte = 30亿字节 = 3GB

框架开销-简单估算 1GB
LoRA适配器lora_rank 12简单估算 0.5GB
激活值

单设备批次大小 = 2

per_device_train_batch_size 2

截断长度 = 2048 token

cutoff_len 2048

单次处理Token = 2 * 2048 = 4K

预估每增加1K Token显存增加约2.5GB

预估 4 *2.5 GB = 10GB

        3 + 1 +0.5 +10 =14.5 GB的预估显存消耗

可以看到消耗的显存是 10.5G左右,未启用加速方法。但是后面会涨到14.5GB

理想情况下,我们先估算好显存占用情况,在进行微调训练。让GPU利用率稳定在90%左右最好

五、LOSS曲线

5.1 LOSS曲线

LOSS一直下降,只能代表训练过程是没有问题的,但是不代表模型的效果好。

5.2 eval_loss

        如果设置了验证数据集的话,比如我设置了0.1比例的数据为验证数据集。那么满100步之后就会进行一次评估。得到验证集的LOSS值。比如这次LoRA微调总共1200步,会保存12轮的LoRA矩阵。也会进行12轮验证集的LOSS评估,从而得到散点图。理想情况下,eval_loss的散点图应该和LOSS曲线的趋势一致。

{'eval_loss': 0.4940245747566223, 'eval_runtime': 535.8046, 'eval_samples_per_second': 0.747, 'eval_steps_per_second': 0.373, 'epoch': 0.33, 'num_input_tokens_seen': 1109936}

字段 (Field)

值 (Value)

含义解释

eval_loss

0.4940245747566223

这是模型在​​验证集​​上计算出的平均损失值。它衡量了模型预测与真实答案之间的差异。​​这个值比你的训练损失(~0.478)略高一点,这是非常正常且健康的现象​​,表明模型没有过度拟合训练数据。

eval_runtime

535.8046

完成整个验证集评估所花费的时间,单位是​​秒​​(s)。

eval_samples_per_second

0.747

评估过程中,每秒能够处理的​​样本数量​​。这个数值主要用于衡量评估流程的效率。

eval_steps_per_second

0.373

评估过程中,每秒完成的​​评估步数​​。同样反映了评估速度。

epoch

0.33

当前的​​训练轮数​​。表示训练进程完成了约三分之一个epoch。

num_input_tokens_seen

1109936

从训练开始到现在,模型已经处理过的​​总token数量​​。

5.3 整个微调流程

拿样本去微调参数===》得到每5步的LOSS值===》每100步保存一次LoRA的矩阵模型检查节点===》此时对验证集进行评估得到eval_loss ===》重复上述步骤直至走完总1200步

就可以得到12个LoRA的矩阵模型检查节点,根据指标选取效果最好的节点进行合并成新的模型。

每个LoRA模型节点可以在此基础上进行继续微调。

六、模型快速评估验证

6.1 挂载LoRA模型节点

这里只能使用huggingface来加载挂载的模型。

6.2 验证模型效果

下面是非训练集的一个样本:温度为0.3,top-p为0.7

吉林省桦甸市人民检察院指控:2015年9月18日,被告人路某在桦甸市广场附近,自称是民政局科长张1某,以能为刘某某办理低保为由,骗取刘某某人民币1000元。2015年11月15日,被告人路某在桦甸市金城购物中心附近,自称是民政局科长,以能为禹某甲办理低保为由,骗取禹某甲人民币700元。2015年11月末,被告人路某在桦甸市大市场南门附近,自称是民政局张科长,以能为王某某办理廉租房为由,骗取王某某人民币250元及保健酒一瓶。2015年11月末,被告人路某在桦甸市二院门口,自称是民政局张科长,以能为袁某某办理低保为由,骗取袁某某人民币600元。2015年12月6日,被告人路某在桦甸市大市场东门附近,自称是民政局科长张2某,以能为佟某某办低保、廉租房为由,骗取佟某某人民币6000元。综上,被告人路某冒充国家机关工作人员五次共计骗取现金人民币8550元及保健酒一瓶,案发后追回赃款7100元并返还被害人。公诉机关为证明其指控的犯罪事实,提供了被告人路某供述和辩解、被害人佟某某、王某某、刘某某、禹某甲、袁某某陈述、桦甸市价格认证中心关于对保健酒的价格认定结论、辨认笔录及照片、扣押决定书及收条、刑事判决书及释放证明、案件提起及抓获经过、户籍证明等证据,并认为,被告人路某之行为已构成××罪,其如实供述了犯罪事实,可依法从轻处罚,部分赃款返还被害人,可酌情从轻处罚。\n基于所给的案件信息,评估可能的判决。\n['《刑法》第二百七十九条:【招摇撞骗罪】冒充国家机关工作人员招摇撞骗的,处三年以下有期徒刑、拘役、管制或者剥夺政治权利;情节严重的,处三年以上十年以下有期徒刑。冒充人民警察招摇撞骗的,依照前款的规定从重处罚。']

样本标准输出答案:

根据《刑法》第二百七十九条的规定,冒充国家机关工作人员招摇撞骗的行为构成招摇撞骗罪。根据案件事实,被告人路某在多个场合自称是民政局科长,以能为他人办理低保或廉租房为由,骗取了多名被害人的财物。因此,可以得出以下推论:\n 路某冒充国家机关工作人员,实施了招摇撞骗的行为;\n路某的行为已经构成了招摇撞骗罪。\n基于以上推论,可以得出以下判决和处罚建议:\n被告人路某应当被判处招摇撞骗罪,并根据《刑法》第二百七十九条的规定,依法从轻处罚。考虑到被告人如实供述了犯罪事实,并返还了部分赃款给被害人,可以酌情从轻处罚。同时,根据案件中提供的证据,被告人路某共计骗取现金人民币8550元及保健酒一瓶,案发后追回赃款7100元并返还被害人。因此,建议对被告人路某判处有期徒刑,并处罚金。\n请注意,具体的判决和处罚应由法院根据相关法律和案件的具体情况来决定。以上仅为一种可能的推论和建议,并非最终判决结果。

挂载了checkpoint-100的模型回答如下:

根据《刑法》第二百七十九条的规定,冒充国家机关工作人员招摇撞骗的行为构成招摇撞骗罪。根据案件事实,被告人路某在桦甸市广场附近、金城购物中心附近、大市场南门附近、二院门口、大市场东门附近等地点,冒充民政局科长,以能为被害人办理低保、廉租房等为由,骗取了被害人人民币8550元及保健酒一瓶。因此,可以认定被告人路某犯有招摇撞骗罪。
根据《刑法》第二百七十九条的规定,冒充国家机关工作人员招摇撞骗的,处三年以下有期徒刑、拘役、管制或者剥夺政治权利;情节严重的,处三年以上十年以下有期徒刑。根据案件事实,被告人路某在五次冒充民政局科长的情况下,共骗取了被害人人民币8550元及保健酒一瓶。因此,可以认定被告人路某的行为情节严重。
综上所述,根据《刑法》第二百七十九条的规定,被告人路某犯有招摇撞骗罪,情节严重。根据《刑法》第二百七十九条的规定,被告人路某应被判处三年以上十年以下有期徒刑。

没有微调的模型输出答案:

根据吉林省桦甸市人民检察院指控的犯罪事实,被告人路某冒充国家机关工作人员多次骗取他人财物,其行为已构成招摇撞骗罪。具体判决如下:被告人路某冒充国家机关工作人员五次共计骗取现金人民币8550元及保健酒一瓶,案发后追回赃款7100元并返还被害人。被告人路某冒充国家机关工作人员的行为,情节严重,应依法从重处罚。被告人路某如实供述了犯罪事实,可依法从轻处罚。部分赃款已返还被害人,可酌情从轻处罚。

综上所述,被告人路某的行为已构成招摇撞骗罪,依法应判处三年以上十年以下有期徒刑。鉴于其如实供述犯罪事实,可酌情从轻处罚。部分赃款已追回并返还被害人,可酌情从轻处罚。

可以看到第100步的效果已经挺好的了,起码学到了输出的格式,没有md格式的信息。

6.3 模型导出

如图所示,选择基座模型和LoRA模型合并导出即可

七、小结

1) LLaMA-Factory大模型微调实战全流程全部都有,遇到问题可以多看看参考文章的内容。

2)不知道什么原因,保存完100步的LoRA模型检测点,报错了显存爆炸,还没有训练完。

接下来,我将围绕着,怎么加速训练,如何更好的监测LOSS曲线,如何评估哪个LoRA检测点是最好的,如何从上一个检查点接着训练等方面更加深入的阐述微调实战经验。

八 、参考文章

Easy AI - code秘密花园

大模型微调实战:通过 LoRA 微调修改模型自我认知-ZEEKLOG博客

LoRA(Low-Rank Adaptation)微调参数详解与步骤指南-ZEEKLOG博客

LLaMA-Factory/README_zh.md at main · hiyouga/LLaMA-Factory

使用 LoRA 和 QLoRA 对 LLM 进行微调:数百次实验的见解 - Lightning AI --- Finetuning LLMs with LoRA and QLoRA: Insights from Hundreds of Experiments - Lightning AI

LLaMA-Factory LoRA微调 Qwen2.5-1.5B Instruct版本_llama factory输出目录怎么设置到数据盘-ZEEKLOG博客

具有低秩自适应的参数高效 LLM 微调(LoRA) - Lightning AI --- Parameter-Efficient LLM Finetuning With Low-Rank Adaptation (LoRA) - Lightning AI

【大模型开发】大模型性能评估指标与基准测试_大模型评分-ZEEKLOG博客

Read more

从语法纠错到项目重构:Python+Copilot 的全流程开发效率提升指南

从语法纠错到项目重构:Python+Copilot 的全流程开发效率提升指南

文章目录 * 从语法纠错到项目重构:Python+Copilot 的全流程开发效率提升指南 💻✨ * 一、语法纠错:Copilot 如何成为你的“实时校对员” ✅ * 示例 1:自动修复缩进错误 * 示例 2:括号/引号自动闭合与修复 * 示例 3:类型注解缺失的智能补充 * 实战技巧:结合 Linter 使用 Copilot * 二、代码生成:从单行补全到完整函数实现 🧠⚡ * 示例 4:用注释驱动函数生成 * 示例 5:生成单元测试 * 示例 6:异步 HTTP 请求生成 * 三、调试辅助:Copilot 如何帮你“读懂”错误信息 🐞🔍 * 场景:遇到 `KeyError` 怎么办? * 场景:

Copilot助力AI原生应用:提升开发效率的5种方法

Copilot助力AI原生应用:提升开发效率的5种方法 关键词:GitHub Copilot、AI原生应用、开发效率、代码生成、智能补全、上下文感知、开发协作 摘要:在AI原生应用(AI-Native Apps)的开发浪潮中,开发者面临着代码复杂度高、迭代速度快、跨模态能力需求强等挑战。作为GitHub与OpenAI联合推出的AI代码助手,GitHub Copilot通过“代码即自然语言”的交互方式,正在重塑开发者的工作流。本文将结合真实开发场景,拆解Copilot提升效率的5种核心方法,并通过实战案例演示如何在AI原生应用中最大化发挥其价值。 背景介绍 目的和范围 本文旨在帮助开发者(尤其是AI原生应用开发者)掌握GitHub Copilot的核心能力,通过具体方法和实战案例,解决“如何用AI工具提升开发效率”的实际问题。内容覆盖从基础功能到高阶技巧,适用于前端、后端、全栈开发场景。 预期读者 * 正在开发AI原生应用(如智能客服、推荐系统、AIGC工具)的开发者 * 希望优化现有开发流程的技术团队 * 对AI辅助开发工具感兴趣的技术管理者

Ollama下载模型太慢?试试国内HuggingFace镜像+LLama-Factory组合

Ollama下载模型太慢?试试国内HuggingFace镜像+LLama-Factory组合 在本地跑一个大模型,第一步不是写代码、调参数,而是——等它下载完。 这听起来有点荒诞,却是许多中国开发者的真实日常。当你兴致勃勃地打开终端,输入 ollama run llama3:8b,满心期待地准备开启微调之旅时,现实却给你泼了一盆冷水:进度条纹丝不动,网络连接频繁中断,几个小时过去连基础权重都没拉下来。 问题出在哪?根源就在于——Ollama 默认从 HuggingFace 官方仓库拉取模型,而这个服务器远在海外。对于国内用户来说,这无异于“越洋取经”,不仅速度慢如龟爬,还常因网络波动导致失败重试,白白浪费时间和算力资源。 但其实,我们完全不必硬扛这条路。真正聪明的做法是:绕开公网瓶颈,借助国内镜像高速获取模型 + 使用 LLama-Factory 实现低门槛、高效率的本地微调。这套组合拳不仅能让你把“等待下载”的时间省下来喝杯咖啡,还能让7B甚至13B级别的模型在一张消费级显卡上顺利训练起来。 镜像加速:别再用裸连 HuggingFace

多模态大模型垂直微调实战:基于Qwen3-VL-4B-Thinking与 Llama Factory的完整指南

多模态大模型垂直微调实战:基于Qwen3-VL-4B-Thinking与 Llama Factory的完整指南

文章目录 * 一 多模态大模型 * 1.1 多模态垂直微调 * 1.2 微调的意义 * 二 多模态基座模型选择 * 2.1 多模态模型对比表 * 2.2 选型建议矩阵 * 2.3 微调与部署视角选择 * 三 Qwen3-VL-4B-Thinking理解微调(Llama Factory) * 3.1 数据集制作 * 3.2 实验平台租用和基本环境配置 * 3.3 数据集上传和注册 * 3.4 启动llama factory和网页访问 * 3.5 关键训练参数可视化配置 * 3.6 模型效果使用体验 * 3.7 模型导出 一 多模态大模型 * 多模态大模型(Multimodal