LLaMA Factory 简介
LLaMA Factory (也常被称为 LLaMA-Factory) 是一个专为大语言模型(LLM)设计的、集成了多种高效微调方法(如 LoRA, QLoRA)的开源框架。
它最大的特点是易用性 和集成度高。它通过提供一个简洁直观的网页操作界面(Web UI)和统一的命令行入口,极大地降低了微调 LLM 的门槛。用户不需要深入了解复杂的训练脚本和参数配置,就可以快速地在自己的数据集上训练和评估各种主流的开源大模型(如 Llama、Mistral、Qwen、Yi 等)。
核心学习方面
为了帮助你系统地掌握 LLaMA Factory,我建议你按照以下几个方面逐步深入学习:
-
数据准备与格式
- 了解 LLaMA Factory 支持哪些数据集格式(例如
alpaca,sharegpt等)。 - 学习如何将你自己的数据转换成它所要求的标准 JSON 格式。
- 了解 LLaMA Factory 支持哪些数据集格式(例如
-
核心微调方法 (Training Methods)
- 理解 LLaMA Factory 支持的几种关键微调技术,尤其是它们之间的区别:
- LoRA / QLoRA (参数高效微调)
- Full-parameter (全参数微调)
- DPO (直接偏好优化,用于对齐)
- 理解 LLaMA Factory 支持的几种关键微调技术,尤其是它们之间的区别:
-
模型与工作流 (Models & Workflow)
- 熟悉 LLaMA Factory 支持哪些主流的基础模型 (Base Models)。
- 理解"预训练 (Pre-training)"、"指令微调 (SFT)" 和 "偏好对齐 (RM/DPO)" 在 LLaMA Factory 中的具体含义和使用流程。
-
两种操作模式 (UI vs. CLI)
- Web UI (Gradio 界面):学习如何通过点击和选择来配置所有训练参数、启动训练和监控过程。
- 命令行 (CLI) :学习如何使用
train_bash.py脚本,并通过指定配置文件或命令行参数来运行训练(这对于自动化和批量实验至关重要)。
-
训练后处理:合并与推理 (Merge & Inference)
- 学习训练完成后,如何将训练得到的适配器权重(Adapter)与基础模型合并 (Merge),导出一个完整的、可独立部署的模型。
- 学习如何使用 LLaMA Factory 提供的 Web UI 或
api.py脚本来测试 (Inference) 你微调后的模型效果。
1.数据准备与格式
1. LLaMA Factory 支持的核心数据集格式
LLaMA Factory 通过一个名为 dataset_info.json 的配置文件来管理所有数据集。这个文件定义了数据集的名称、对应的文件名,以及(最重要的)它应该使用哪种格式模板 (template) 来解析。
以下是你需要了解的最关键的几种格式,我会用文字描述它们的结构:
A. 指令/问答格式 (Instruction Format)
这是最基础、最常用的格式,适用于"一问一答"或"给定指令,完成任务"的场景。
- 代表格式:
alpaca - 结构描述: 这种格式的核心是三个字段:
instruction: 指令。你希望模型做什么,比如"请总结以下文字"或"写一首关于春天的诗"。input: (可选)输入。执行指令所必需的上下文信息。例如,如果指令是"总结以下文字",那么这篇"以下文字"就放在input字段。如果指令本身已足够(如"写一首诗"),则input字段可以为空或省略。output: 输出。你希望模型给出的标准答案。
如何理解:
LLaMA Factory 会在训练时自动将
instruction和input拼接到一起(按照特定的提示词模板),作为模型的"输入"(Prompt),然后要求模型预测的答案必须与output字段一致。
B. 多轮对话格式 (Conversational Format)
当你需要模型学习上下文理解、连续聊天或扮演特定角色时,就需要用到这种格式。
- 代表格式:
sharegpt - 结构描述: 这种格式不再是简单的三个字段,而是模拟真实的聊天记录。它的核心是一个列表 (list) ,列表中的每个元素代表一轮对话。
- 这个列表通常被称为
conversations或history。 - 在每一轮对话中,又包含两个关键信息:
from: 消息的发送者。通常是user(用户) 或assistant(助手/模型)。在某些变体中也可能是system(系统)。value: 该发送者所说的具体内容(文字)。
- 这个列表通常被称为
- 数据样例(描述): 一个
sharegpt格式的数据样本,看起来会像这样:- 第一轮:
from是user,value是"你好,你是谁?" - 第二轮:
from是assistant,value是"我是一个AI助手。" - 第三轮:
from是user,value是"你能帮我做什么?" - 第四轮:
from是assistant,value是"我可以回答问题、生成文本......"
- 第一轮:
如何理解:
LLaMA Factory 会把从
user开始一直到最后一个user说的内容作为模型的"输入",并要求模型接上最后一个assistant的回复。它会智能地处理哪些是历史记录,哪些是需要模型回答的当前问题。
C. 偏好/对齐格式 (Preference Format)
这种格式不用于常规的"指令微调 (SFT)",而是用于更高级的"对齐"阶段,比如 DPO (直接偏好优化) 或 RM (奖励模型) 训练。
- 代表格式:
dpo或reward - 结构描述: 它的目的是告诉模型"哪种回答更好"。因此,它不再提供单一的"正确答案"。
prompt: 用户的提问或指令。chosen: "好的"回答。这是你偏好的、得分高的回答。rejected: "坏的"回答。这是你不希望的、得分低的回答。- (可能还有
system字段,用于设置系统提示词)。
如何理解:
在 DPO 训练中,LLaMA Factory 会向模型展示
prompt,并同时展示chosen和rejected两个答案。训练的目标是让模型"提高"chosen答案的概率(偏好它),同时"降低"rejected答案的概率(不偏好它)。
2. 如何将你自己的数据转换为标准格式
了解了上述格式后,将你自己的数据转换过来就有了清晰的思路。这个过程的重点是映射 (Mapping),而不是编程。
步骤一:分析你的数据和任务
首先问自己:我的原始数据是什么样子的?我希望模型学会什么?
-
场景1: 如果你有一个 Excel 表格,包含"问题"和"标准答案"两列。
- 目标: 你希望模型学会回答这些问题。
- 转换策略: 你应该选择
alpaca格式。将"问题"列映射到instruction字段,将"标准答案"列映射到output字段。input字段可以保持为空。
-
场景2: 如果你有一堆客服聊天记录的日志。
- 目标: 你希望模型学会扮演客服,并能联系上下文。
- 转换策略: 你应该选择
sharegpt格式。你需要解析聊天日志,把客户说的内容标记为from: user,把客服说的内容标记为from: assistant,然后把它们按顺序组织成conversations列表。
-
场景3: 如果你希望模型写出更安全、更无害的回答。你已经有了一批数据,每个问题都有一个"好回答"和一个"坏回答"(例如,内容有偏见)。
- 目标: 让模型偏好"好回答"。
- 转换策略: 你应该选择
dpo格式。将问题映射到prompt,"好回答"映射到chosen,"坏回答"映射到rejected。
步骤二:处理系统提示词 (System Prompt)
system_prompt(系统提示词)用于给模型设定一个"人设"或"全局规则"(例如:"你是一个专业的金融分析师,回答问题要严谨。")。
在 LLaMA Factory 中,你不需要 把 system_prompt 写入到每一个数据样本中。
- 推荐做法: 在准备数据时,你只需要准备
instruction/input/output(或sharegpt格式)即可。 - 使用时: 在 LLaMA Factory 的 Web UI 界面或命令行参数中,有一个专门的"系统提示词"输入框。你在这里填写的
system_prompt会被自动应用到所有训练数据上。
步骤三:保存为 JSONL 文件
最后,也是非常重要的一点:LLaMA Factory 推荐使用 JSONL 格式 (JSON Lines) 来存储数据,而不是单个巨大的 JSON 文件。
- JSONL 格式描述: 这是一个纯文本文件,其每一行都是一个独立、完整、合法的 JSON 对象。
- 为什么用它: 这种格式允许程序逐行读取和处理数据,而不需要一次性将G或T级别的整个文件加载到内存中,处理效率极高。
你的转换脚本(无论用什么语言写)的最终目标,就是生成一个 .jsonl 文件,其中每一行都符合你选择的(如 alpaca 或 sharegpt)格式规范。
总结一下,数据准备的核心就是:
- 根据你的训练目标,从
alpaca,sharegpt,dpo等格式中选择一个。 - 将你的原始数据(如 CSV, TXT, DB)中的字段,映射到目标格式所需的字段(如
instruction,output或conversations)。 - 将转换后的数据保存为 JSONL 文件。
2.核心微调方法 (Training Methods)
1. Full-parameter (全参数微调)
这是最传统、最彻底的微调方式。
-
它是什么?
全参数微调,顾名思义,就是解冻 模型中所有的参数(权重),并在你的数据上对这数百亿 个参数进行全部更新。
-
它是如何工作的?
想象一下,一个大语言模型是一个极其庞大和复杂的神经网络。全参数微调会计算你的数据在模型上产生的误差,然后将这个误差反向传播,对模型中每一层、每一个神经元的权重都进行微小的调整。
-
优缺点:
- 优点: 理论上能达到的性能上限最高。因为它动用了模型的全部"算力"去拟合你的数据,可能在某些特定任务上学得最深入。
- 缺点: 资源消耗极其巨大 。
- 显存 (VRAM): 你需要加载完整的模型、梯度、优化器状态。训练一个 7B(70亿)参数的模型,往往需要多张 80GB 的专业级 GPU。
- 时间: 训练速度非常慢。
- 灾难性遗忘: 由于所有参数都在变动,模型有可能会"忘记"它在预训练阶段学到的通用知识,导致在你的任务上表现很好,但在其他方面能力下降。
- 产出物: 训练的最终产出是一个全新的、完整的模型文件(例如 7B 模型就是 14GB+)。
-
何时使用?
当你拥有极其强大的硬件资源,并且你的任务与模型的原始领域差异巨大,或者你追求模型在特定任务上可能 的最高性能时。对于绝大多数用户,这不常用。
2. LoRA / QLoRA (参数高效微调)
这是目前最主流、最推荐的微调方式,属于 PEFT (Parameter-Efficient Fine-Tuning) 技术的一种。
-
它是什么?
LoRA (Low-Rank Adaptation) 是一种"聪明的"微调技术。它冻结 了原始大模型(例如 7B)的全部参数,使其保持不变。
-
它是如何工作的?
LoRA 的核心思想是,微调时模型权重的变化是"低秩"的。
- 冻结: 原始模型(几十 G 大)被加载到显存中,但被设为"不可训练"。
- 注入: 在模型的关键层(通常是 Attention 层)旁边,LoRA 额外注入了两个非常小、可训练的"适配器"(Adapter) 矩阵(称为 A 和 B)。
- 训练: 在训练时,只有这些新添加的、总共只有几十兆(MB)的适配器参数被更新。原始模型的权重始终不变。
- 类比: 想象原始模型是一本厚重的、不可修改的教科书。LoRA 不去修改教科书,而是在旁边贴上一些"即时贴"(Post-it notes) 来补充新知识。训练时,你只在更新这些"即时贴"上的内容。
-
QLoRA 又是什么?
QLoRA (Quantized LoRA) 是 LoRA 的极致省显存版。它在 LoRA 的基础上做了两件事:
- 量化 (Quantization): 在加载那本"教科书"(原始模型)时,用 4-bit 的精度来加载(而不是常规的 16-bit)。这使得模型本身占用的显存锐减约 75%。
- Paging / Double Quant: 使用更高级的技术进一步优化显存占用。
- 效果: QLoRA 使得在单张消费级显卡(如 24GB 的 RTX 3090/4090)上微调 7B 甚至 13B 的模型成为可能。
-
优缺点:
- 优点:
- 显存高效: 资源占用极低,QLoRA 尤为突出。
- 训练快速: 因为要训练的参数量极少(不到总参数的 0.1%)。
- 无灾难性遗忘: 原始知识被完好保留在冻结的权重中。
- 产出物轻便: 训练结果只是一个很小的适配器文件(
adapter_model.bin,通常 10MB ~ 100MB),易于分享和管理。你可以一个基础模型,搭配多个不同的 LoRA 适配器来执行不同任务。
- 缺点: 性能理论上限略低于完美的全参数微调,但在绝大多数任务上,其表现(尤其是 QLoRA)已经可以达到全参数微调的 99% 以上,性价比极高。
- 优点:
-
何时使用?
几乎所有情况下都推荐使用 LoRA 或 QLoRA。 这是 LLaMA Factory 的默认和核心优势所在。
3. DPO (直接偏好优化)
DPO 是一个不同维度 的概念。LoRA 和 Full-parameter 是**"如何更新权重"的技术;而 DPO 是一种"训练阶段和目标"**。
-
它是什么?
DPO (Direct Preference Optimization) 是一种对齐 (Alignment) 训练技术。它不再强迫模型去模仿 唯一的"标准答案",而是让模型去学习 人类的偏好。
-
它与前两者的关系:
- SFT (指令微调): 你使用
alpaca或sharegpt格式的数据,告诉模型:"当用户问 A,你必须回答 B"。这是在教模型**"能力"**。 - DPO (偏好对齐): 你使用
dpo格式的数据(包含prompt,chosen,rejected),告诉模型:"当用户问 A,B 回答比 C 回答更好"。这是在教模型**"价值观和品味"**。
- SFT (指令微调): 你使用
-
它是如何工作的?
在 LLaMA Factory 中,你通常会先对模型进行 SFT(使用 LoRA),让它具备回答问题的基本能力。
然后,你再进行 DPO 训练(通常也使用 LoRA 作为底层的技术)。DPO 会加载 SFT 阶段训练好的 LoRA 适配器,并使用你的偏好数据(好/坏答案对)进一步优化模型。
训练的目标是让模型提高"好答案" (chosen) 的概率 ,同时降低"坏答案" (rejected) 的概率。
-
类比:
- SFT (LoRA/Full): 像是在驾校学习"如何踩油门"和"如何打方向盘"(学习基本能力)。
- DPO (LoRA): 像是在教练的指导下上路,教练不断告诉你"刚才的并线太猛了(rejected)","这次的过弯很平顺(chosen)"(学习偏好和风格)。
-
何时使用?
当 SFT 之后的模型已经能回答问题,但回答的风格你不满意时。例如:
- 模型回答太啰嗦,你希望它简洁(
chosen是简洁版,rejected是啰嗦版)。 - 模型回答不够安全,你希望它拒绝回答有害问题。
- 模型不够"像你"(例如不够幽默、不够专业)。
- 模型回答太啰嗦,你希望它简洁(
总结
| 特性 | Full-parameter (全参数) | LoRA / QLoRA (高效) | DPO (偏好优化) |
|---|---|---|---|
| 目标 | 学习知识/能力 (SFT) | 学习知识/能力 (SFT) | 学习风格/偏好/对齐 (Alignment) |
| 训练方式 | 更新所有模型参数 | 仅更新"适配器"参数 | 使用偏好数据 (Chosen/Rejected) |
| 底层技术 | 它本身是技术 | 它本身是技术 (PEFT) | 它是一种训练阶段 ,通常依赖 LoRA 来实现 |
| 资源消耗 | 极高 (多张 A100/H100) | 极低 (单张 24GB 显卡) | 极低 (与 LoRA 相同) |
| 产出物 | 完整的模型 (几十 GB) | 适配器文件 (几十 MB) | 适配器文件 (几十 MB) |
| 推荐度 | 专家/企业级,不常用 | 强烈推荐,几乎所有人的首选 | 在 SFT 之后,用于提升模型质量 |
在 LLaMA Factory 中,最标准的流程是:
- 选择一个基础模型。
- 使用 QLoRA + 你的SFT数据 (
alpaca格式)进行指令微调。 - (可选)使用 QLoRA + 你的DPO数据 (
dpo格式)进行偏好对齐。
3.模型与工作流 (Models & Workflow)
这部分是 LLaMA Factory 的"大局观"。它将我们之前谈到的"数据"和"微调方法"串联起来,告诉你一个模型是如何一步步"炼成"的。
A. 关键模型的角色 (The "Models")
在 LLaMA Factory 的整个生态中,你主要会接触到三种不同角色(或状态)的模型:
1. 基础模型 (Base Model)
- 这是什么?
这就是你的起点。它是一个已经由大公司(如 Meta, Mistral AI, 阿里巴巴)在万亿级数据上训练好的、通用的、原始的预训练模型。 - 例子:
Llama-3-8B,Mistral-7B,Qwen1.5-7B,Yi-6B等。 - 它的角色: 扮演一本知识渊博的"教科书"。它什么都懂,但"不听话",不知道如何按你的特定格式(如问答)来回答问题。
- 在 LLaMA Factory 中: 你在"模型名称"处选择的,就是基础模型。在 LoRA/QLoRA 训练中,它被冻结(只读),作为知识底座。
2. 适配器模型 (Adapter Model)
- 这是什么?
这就是你使用 LoRA / QLoRA 方法进行 SFT 或 DPO 训练后得到的核心产出物。 - 它的角色: 这是一个非常小的"插件"或"即时贴"文件(通常只有几十到几百 MB)。它不能单独运行 ,必须"附加"到对应的基础模型上才能生效。它只包含了你教会它的新技能 或偏好。
- 类比:
- 基础模型 = 一款游戏本体 (Game)
- 适配器 = 游戏的"模组" (Mod) 或"补丁" (Patch)
- 在 LLaMA Factory 中: 训练完成后,保存在
saves/目录下的就是适配器。
3. 合并后的模型 (Merged Model)
- 这是什么?
这是将"基础模型"和"适配器模型"合并 后,生成的一个全新的、完整的、可独立运行的模型。 - 它的角色: 这才是你最终用于部署和推理的模型。它既有基础模型的通用知识,又包含了适配器中的新技能。
- 类比:
- 基础模型 = 游戏本体
- 适配器 = Mod 补丁
- 合并后的模型 = 一个打好了 Mod 补丁的、可直接运行的"游戏整合包"。
- 在 LLaMA Factory 中: 这对应一个专门的"导出模型" (Export / Merge) 步骤。你提供基础模型路径和适配器路径,它会为你生成这个"整合包"。
B. 标准工作流 (The Workflow)
LLaMA Factory 将复杂的训练过程,抽象成了几个清晰的、可编排的阶段。一个完整的、教科书式的工作流如下(但你通常只做其中几步):
阶段一:(可选) 继续预训练 (Continued Pre-training, PT)
- 目的: 给模型灌输新知识。
- 场景: 比如,你的基础模型是通用领域的,但你想让它成为"医疗专家"。你需要准备海量的医疗文献(非问答,就是纯文本),使用此阶段让模型"阅读"这些文献,使它熟悉医疗术语和知识。
- 使用的数据: 大量的纯文本数据 (.txt)。
- 产出:Adapter 或 Full Model(这通常也用 LoRA 进行)。
阶段二:指令微调 (Supervised Fine-Tuning, SFT)
- 目的: 教会模型**"如何说话"**,即理解并遵循人类的指令格式。
- 场景: 这是最核心、最常用的一步。 你希望模型能听懂你的问题(
instruction),并给出对应的回答(output)。 - 使用的数据:
alpaca或sharegpt格式的问答/对话数据。 - 产出: SFT 阶段的适配器 (Adapter)。此时的模型已经"会聊天"了。
阶段三:(可选) 偏好对齐 (Preference Alignment, DPO/RM)
- 目的: 教会模型**"如何说得更好"**。
- 场景: SFT 后的模型虽然会回答了,但回答可能很啰嗦、不安全或风格你不喜欢。此阶段用于打磨模型的"品味"。
- 使用的数据:
dpo格式的偏好数据(包含chosen和rejected回答)。 - 产出: DPO 阶段的适配器。
阶段四:模型合并 (Merge & Export)
- 目的: 将训练成果固化,准备用于部署。
- 场景: 你已经完成了 SFT 或 DPO 训练,得到了一个(或多个)适配器。你现在需要一个能独立运行的完整模型。
- 工作: LLaMA Factory 会加载基础模型 ,然后将你的适配器(比如 SFT 适配器 + DPO 适配器)的权重"加"到基础模型的权重上。
- 产出: 一个合并后的完整模型(几十 GB)。
阶段五:推理与评估 (Inference & Eval)
- 目的: 测试模型效果。
- 场景: 运行你的新模型,看看它在真实问题上的表现。
- 工作: LLaMA Factory 提供了"聊天"(Chat) 和"评估"(Evaluate) 选项卡。
- 聊天: 让你像 ChatGPT 一样,直接与你刚训练好的模型(可以是"基础模型+适配器"模式,也可以是"合并后的模型")对话。
- 评估: 使用标准数据集(如 MMLU, C-Eval)来客观地测试模型的性能得分。
总结:最典型的工作流
对于绝大多数用户(包括你),最常见的工作流是(红色为核心步骤):
1. 准备数据 (选择
alpaca或sharegpt格式)
2. 运行 SFT (使用 QLoRA 方法)
3. 获得 SFT 适配器
4. (可选) 运行 DPO (加载 SFT 适配器,继续用 QLoRA 训练)
5. 获得 DPO 适配器
6. 运行合并 (将 基础模型 + SFT/DPO适配器 合并)
7. 获得最终模型
8. 聊天/部署
4.两种操作模式 (UI vs. CLI)
好的,我们来详细解析 LLaMA Factory 的两种操作模式:Web UI (网页界面) 和 CLI (命令行)。
这两种模式提供了完全相同的功能 ------它们背后调用的都是 LLaMA Factory 的核心训练逻辑。你的选择取决于你更看重直观易用性 还是自动化与可复现性。
1. Web UI (Gradio 界面)
这是 LLaMA Factory 最吸引初学者的特性之一。
-
它是什么?
它是一个通过在浏览器中运行的、图形化的操作界面(基于 Gradio 库构建)。你启动 LLaMA Factory 后,它会给你一个本地网址 (如
http://127.0.0.1:7860),你用浏览器打开就能看到。 -
它是如何工作的?
整个界面就像一个**"训练参数配置面板"。它把所有可调的参数(如模型名称、微调方法、学习率、数据集、LoRA 秩...)都做成了 下拉菜单**、输入框 和勾选框。
你的工作流是:
- 点选配置: 在 "Train" (训练) 选项卡中,用鼠标依次选择你想要的基础模型、微调方法 (LoRA/QLoRA)、要训练的数据集。
- 调整参数: 在 "Hyperparameters" (超参数) 选项卡中,通过滑块或输入框设置 Epoch (轮数)、Batch Size (批大小)、Learning Rate (学习率) 等。
- 点击启动: 点击 "Start" (开始) 按钮。
- 监控: 界面会自动切换到日志 (Log) 窗口,你可以实时看到训练过程的输出、损失 (Loss) 变化和TFLOPs(算力利用率)。
-
优缺点:
- 优点:
- 极其直观: 所见即所得,不需要记忆任何命令。
- 易于探索: 你可以很方便地浏览所有可用的模型和数据集,直观地了解 LLaMA Factory 到底支持什么。
- 快速上手: 对新手极其友好,是初次运行和调试的绝佳选择。
- 缺点:
- 难以复现: 如果你这次训练调整了 20 个参数,下次想完全复现,你必须重新用鼠标点选 20 次,很容易出错或遗漏。
- 不便自动化: 无法用于编写脚本或进行批量实验。你不能让它"自动训练 10 个不同超参数的模型"。
- 优点:
-
何时使用?
- 入门学习时: 刚开始接触 LLaMA Factory,用它来熟悉各项参数和流程。
- 调试数据时: 快速跑一个 Epoch,看看数据格式是否正确,训练是否能正常启动。
- 进行单次、临时的训练任务时。
2. CLI (命令行)
这是更专业、更高效的模式,也是在服务器上进行严肃训练的推荐模式。
-
它是什么?
它是在你的终端(Terminal 或 Shell)中,通过直接运行 Python 脚本 (主要是
train_bash.py) 并附带一系列参数来启动训练的方式。 -
它是如何工作的?
你不再需要鼠标点选。你通过两种方式告诉 LLaMA Factory 你要"做什么"和"怎么做":
方式一:使用 YAML 配置文件 (推荐)
- 定义配置: LLaMA Factory 提供了一个
examples(示例) 目录,里面有各种任务的.yaml配置文件(例如lora_sft.yaml)。 - 修改配置: 你复制一个
.yaml文件,用文本编辑器打开它,在里面明确指定你的model_name_or_path、dataset、finetuning_type(LoRA)、output_dir(输出目录) 以及所有超参数。 - 运行: 在终端中执行一个非常简洁 的命令,告诉 LLaMA Factory 使用这个配置文件:
train_bash.py --config_file my_config.yaml(示例命令,非代码)
方式二:直接传递命令行参数
- 你也可以不使用配置文件,而是把所有参数直接"拼接"在运行命令后面:
train_bash.py --model_name_or_path ... --dataset ... --finetuning_type lora ...(示例命令) - 这种方式通常很冗长,容易出错,一般只用于临时覆盖配置文件中的个别参数。
- 定义配置: LLaMA Factory 提供了一个
-
优缺点:
- 优点:
- 可复现性极强:
.yaml配置文件就是你训练的**"快照"**。你只要保存了这个文件,就能在任何机器、任何时间 100% 复现这次实验。 - 易于自动化与批量实验: 你可以轻松编写 Shell 脚本,循环更改
.yaml文件中的某个参数(比如学习率),然后连续运行 10 次训练,实现"网格搜索"调参。 - 服务器友好: 在没有图形界面的远程服务器 (SSH) 上,CLI 是唯一的操作方式。
- 可复现性极强:
- 缺点:
- 有学习门槛: 你需要知道 LLaMA Factory 的核心脚本叫什么 (
train_bash.py),并且需要熟悉那些关键参数的名称 (如finetuning_type,per_device_train_batch_size等)。 - 不够直观: 你无法"浏览"可选项,你必须"知道"你要用的模型或数据集的准确名称。
- 有学习门槛: 你需要知道 LLaMA Factory 的核心脚本叫什么 (
- 优点:
-
何时使用?
- 进行严肃的、可复现的实验时。
- 在远程服务器上训练时。
- 需要进行自动化调参和批量训练时。
总结
| 特性 | Web UI (网页界面) | CLI (命令行) |
|---|---|---|
| 交互方式 | 鼠标点击、下拉菜单、输入框 | 文本命令、YAML 配置文件 |
| 易用性 | 非常高,所见即所得 | 有门槛,需要熟悉参数名称 |
| 可复现性 | 差,依赖手动操作 | 极高,通过配置文件保证 |
| 自动化 | 难 | 易,可编写脚本批量运行 |
| 环境 | 适合本地开发机 | 适合本地,必备于远程服务器 |
| 推荐场景 | 学习、探索、调试数据 | 严肃训练、调参、服务器部署 |
给你的建议是:
先用 Web UI 跑通你的第一个"Hello World"训练,熟悉流程。然后,当你准备好进行真正的实验时,立即转向 CLI + YAML 配置文件 的模式,这将为你后续的工作节省大量时间。
5.训练后处理:合并与推理 (Merge & Inference)
当你使用 LLaMA Factory (尤其是 LoRA/QLoRA) 完成训练后,你得到的并不是一个可以直接运行的完整模型,而是一个轻量的适配器 (Adapter)。这一步就是教你如何使用这个适配器。
1. 为什么需要"合并" (Merge)?
- 你训练得到了什么:
如前所述,使用 LoRA/QLoRA 训练后,你得到的是一个很小的(几十到几百 MB)适配器文件(例如adapter_model.bin)。 - 适配器是什么:
它只是原始基础模型(如 Llama-3-8B,几十 GB)的"修改补丁"。它本身不能独立工作,必须"贴"在对应的基础模型上才能生效。 - "合并" (Merge) 的目的:
"合并"是一个导出 (Export) 过程。它将"基础模型"和"适配器"的权重真正地、物理地 加在一起,生成一个全新的、完整的、独立的模型文件。
类比:
- 基础模型 = 游戏
v1.0- 适配器 = 游戏
v1.1补丁包- 合并 (Merge) = 将
v1.0和v1.1补丁包整合,导出一个完整 的v1.1版本游戏安装包。
这个导出的"整合包"(合并后的模型)就可以被其他任何标准的 Python 库(如 Transformers, vLLM)直接加载和使用了,不再需要 LLaMA Factory 的特殊加载方式。
2. 为什么需要"推理" (Inference)?
"推理"就是使用 模型。在 LLaMA Factory 的上下文中,这主要指在训练完成后立即测试模型效果。
你非常关心的问题是:"我刚训练的模型,效果到底好不好?" LLaMA Factory 提供了内置的工具,让你无需离开这个框架就能快速与模型对话。
3. LLaMA Factory 中的具体操作
LLaMA Factory 为"合并"和"推理"都提供了便捷的 UI 和 CLI 操作。
A. 合并 (Merge / Export)
这是你准备部署 (Deploy) 模型时的标准操作。
-
Web UI 操作:
- 切换到 "Export Model" (导出模型) 选项卡。
- 模型名称 (Model Name): 选择你训练时用的那个基础模型 (Base Model)。
- 适配器路径 (Adapter Path): 选择你训练保存的适配器 (在
saves/目录中,选择你想要的那个 checkpoint)。 - (高级) 堆叠适配器: LLaMA Factory 允许你同时加载多个适配器。例如,你可以先加载 SFT 阶段的适配器,再加载 DPO 阶段的适配器,将它们的效果"叠加"在一起。
- 导出目录 (Export Directory): 指定一个新目录,用来存放合并后的完整模型。
- 点击 "Start" (开始)。
-
CLI 操作:
使用
export_model.py脚本,并指定相同的参数(基础模型路径、适配器路径、导出路径)。 -
最终产出:
在你的导出目录中,你会得到一个包含
config.json,model.bin(或*.safetensors) 和tokenizer.json等文件的完整模型。这就是你可以打包带走、用于部署的最终产物。
B. 推理 (Inference / Chat)
这是你测试 (Test) 和评估 (Evaluate) 模型时的常用操作。LLaMA Factory 的推理功能非常强大,因为它允许你**"跳过"合并步骤**,直接进行测试。
-
Web UI 操作:
- 切换到 "Chat" (聊天) 选项卡。
- 模型名称 (Model Name): 同样,选择那个基础模型。
- 适配器路径 (Adapter Path): 选择你要测试的适配器。
- 点击 "Load Model" (加载模型)。
-
背后发生了什么?
此时,LLaMA Factory 会**"动态"加载**:它先把基础模型加载到显存,然后 再把适配器的权重"附加"到基础模型之上。这个过程是在内存中实时发生的,并没有创建新的模型文件。
-
这种"动态加载"的好处:
极其灵活! 你可以快速切换不同的适配器(比如checkpoint-100,checkpoint-200)来对比它们的效果,而不需要每次都花费几分钟去执行"合并"操作。 -
CLI 操作 (推理服务):
- 交互式聊天: LLaMA Factory 提供
cli_demo.py,让你在终端中直接与模型对话。 - 网页版聊天: LLaMA Factory 也提供
web_demo.py(或infer_web.py),它会启动一个类似于 ChatGPT 的聊天界面,让你在浏览器中测试。 - API 服务: LLaMA Factory 还提供
api.py,它会启动一个 OpenAI 兼容的 API 服务器。这意味着你可以像调用 OpenAI API 一样,通过 HTTP 请求来调用你本地训练的模型,非常适合程序化集成。
- 交互式聊天: LLaMA Factory 提供
总结:何时使用它们?
-
当你想"测试"时 (Testing / Evaluating):
- 使用"推理 (Inference)"功能 (Chat / API)。
- 采用"基础模型 + 动态加载适配器"的方式。
- 优点: 快速、灵活,方便对比不同 checkpoint 的效果。
-
当你想"部署"时 (Deploying / Sharing):
- 使用"合并 (Merge)"功能 (Export Model)。
- 生成一个单一的、完整的、合并后的模型。
- 优点: 产物标准、独立、可移植,方便用于各种生产环境和推理框架 (vLLM, TGI 等)。