type
status
date
slug
summary
tags
category
icon
password
在实际解决实验代码迁移的过程中,由于个人电脑环境受限,往往需要使用大模型微调的技术手段,笔者通过查询资料了解到了hugging face上的peft库可以执行微调任务,同时也了解到开源项目llama factory也可以进行微调任务的处理,在这里通过一个小lab来对比学习一下两种策略的特性以便后续取用。
实验时间:2025-11-26
实验设备:个人笔记本 (NVIDIA GPU / windowsWSL Environment)
核心概念对比
在本次实验中,我使用了两种截然不同的方式来实现同一个目标(对模型进行LoRA微调),以下是简单的两种实现方式的对比分析:
维度 | 方法 A: 原生 PEFT 库 | 方法 B: LLaMA Factory |
代码层级 | 基于 Python 代码。直接操作 transformers 和 peft 对象。 | 基于 CLI (命令行) 或 WebUI。高度封装的 Pipeline。 |
数据处理 | 全手动。必须自己写 Python 函数 | im_start |
适用场景 | 学术研究、魔改算法、深入理解模型结构。 | 工程落地、批量训练、快速验证效果。 |
实验流程与实验结果
实验目的:
通过两种微调模式,将通用模型
Qwen2.5-0.5B-Instruct 微调为具有特定自我认知的助手 taffy。(名称取自某vup,2333)数据集展示:
实验目录:
PEFT库实验流程:
核心代码编写 (lab_peft.py)
编写脚本的主要逻辑分为三个关键部分:
A. 模型加载与 LoRA 配置
加载本地底座模型,并注入 LoRA 适配器。
B. 数据格式化 (Prompt Template)(重点) 由于 Qwen 是 Instruct 模型,必须手动将原始 JSON 数据转换为 ChatML 格式 (
<|im_start|>...),否则模型无法理解对话上下文。终端操作流程
在终端直接运行 Python 脚本启动训练:
(注:训练完成后,脚本内集成的推理代码会自动输出微调后的对话结果。)
结果展示

llama factory实验流程
该方案使用 LLaMA Factory 提供的命令行接口 (CLI),通过配置参数完成训练,无需编写模型底层代码。
数据注册 (dataset_info.json)
不同于原生代码,LLaMA Factory 需要在
data/ 目录下通过配置文件注册数据集,建立数据列映射。文件内容:
训练操作流程 (CLI)
在项目根目录下,执行以下单行命令。为了解决欠拟合问题,采用了激进的超参数配置。实际训练中需要按需调整
推理验证流程 (Chat CLI)
训练结束后,加载底座模型与训练好的 Adapter 权重进行交互:

过程复盘与bug分析
第一阶段:环境与底座准备
- 搭建 Conda 环境,解决国内网络 Pip/Conda 源连接超时问题。
- 使用
modelscope将底座模型下载至本地,避免 HuggingFace 连接失败。
第二阶段:原生 PEFT 实验
挑战:初次训练后,模型只会复读,无法理解对话。
- 原因分析:Prompt Template 缺失。模型本质是续写文本,如果输入不包含特殊的 ChatML 标记(如
<|im_start|>),模型不知道这是对话。
- 解决方案:在代码中引入
formatting_prompts_func,手动拼接特殊符号,告诉模型“这里是用户说的话,那里是你该回答的话”。
- 收获:理解了 SFT (Supervised Fine-Tuning) 不仅仅是喂数据,更是喂格式。
第三阶段:LLaMA Factory 实验
挑战 1:路径报错。
HFValidationError。- 复盘:CLI 对相对路径(
./)非常敏感,且容易混淆“本地路径”和“HF Hub ID”。
- 修正:退回项目根目录执行,或使用绝对路径。
挑战 2:欠拟合 (Under-fitting)。模型虽然加载了 Adapter,但依然回答 "I am Qwen"。
- 原因分析:默认参数(Epoch=10, LR=1e-4, Target=q,v)对于扭转“自我认知”这种强记忆来说,力度不够。
- 修正:
Epochs10 -> 50 (增加记忆次数)Learning Rate1e-4 -> 5e-4 (加大步伐)LoRA Targetq,v -> all (所有线性层全改,增加可训练参数量)
- 收获:工业级框架虽然好用,但默认参数不一定适合所有任务。针对特定的小样本任务,可能需要激进的超参数。
深度思考:PEFT 和llama factory的方案执行难度与优点分析
- PEFT 方案:
- 优点:代码逻辑透明,对
Target Modules和LoRA Rank有极细粒度的控制权,适合探索底层原理。 - 难点:必须手动处理
Tokenizer和Prompt Template的对齐,容易因格式错误导致模型训练无效。
- LLaMA Factory 方案:
- 优点:工程化封装极佳,通过
-template参数自动解决了复杂的格式对齐问题,且内置了lora_target all等便捷配置。 - 难点:对文件路径 (
dataset_info.json) 和 CLI 参数的准确性要求较高,且在特定任务下(如强行修改认知)需要大幅调整默认超参数。
- 作者:CreamGreen.
- 链接:www.creamgreen.com/article/2b7555f7-8779-8069-8667-c59331bf5a4f
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章
