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 代码。直接操作 transformerspeft 对象。
基于 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 脚本启动训练:
(注:训练完成后,脚本内集成的推理代码会自动输出微调后的对话结果。)

结果展示

notion image
 

llama factory实验流程

该方案使用 LLaMA Factory 提供的命令行接口 (CLI),通过配置参数完成训练,无需编写模型底层代码。

数据注册 (dataset_info.json)

不同于原生代码,LLaMA Factory 需要在 data/ 目录下通过配置文件注册数据集,建立数据列映射。
文件内容:

训练操作流程 (CLI)

在项目根目录下,执行以下单行命令。为了解决欠拟合问题,采用了激进的超参数配置。实际训练中需要按需调整

推理验证流程 (Chat CLI)

训练结束后,加载底座模型与训练好的 Adapter 权重进行交互:
notion image
 

过程复盘与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)对于扭转“自我认知”这种强记忆来说,力度不够
  • 修正
    • Epochs 10 -> 50 (增加记忆次数)
    • Learning Rate 1e-4 -> 5e-4 (加大步伐)
    • LoRA Target q,v -> all (所有线性层全改,增加可训练参数量)
  • 收获:工业级框架虽然好用,但默认参数不一定适合所有任务。针对特定的小样本任务,可能需要激进的超参数。

深度思考:PEFT 和llama factory的方案执行难度与优点分析

  • PEFT 方案
    • 优点:代码逻辑透明,对 Target ModulesLoRA Rank 有极细粒度的控制权,适合探索底层原理。
    • 难点:必须手动处理 TokenizerPrompt Template 的对齐,容易因格式错误导致模型训练无效。
  • LLaMA Factory 方案
    • 优点:工程化封装极佳,通过 -template 参数自动解决了复杂的格式对齐问题,且内置了 lora_target all 等便捷配置。
    • 难点:对文件路径 (dataset_info.json) 和 CLI 参数的准确性要求较高,且在特定任务下(如强行修改认知)需要大幅调整默认超参数。
 
【VLA】Pi0+ReconVLA 联合微调项目:技术实现与思考笔记【PI*0.6】论文阅读笔记与RECAP框架机制分析
Loading...