LLaMA Factory简介和使用方法

LLaMA Factory 简介

LLaMA Factory (也常被称为 LLaMA-Factory) 是一个专为大语言模型(LLM)设计的、集成了多种高效微调方法(如 LoRA, QLoRA)的开源框架。

它最大的特点是易用性集成度高。它通过提供一个简洁直观的网页操作界面(Web UI)和统一的命令行入口,极大地降低了微调 LLM 的门槛。用户不需要深入了解复杂的训练脚本和参数配置,就可以快速地在自己的数据集上训练和评估各种主流的开源大模型(如 Llama、Mistral、Qwen、Yi 等)。


核心学习方面

为了帮助你系统地掌握 LLaMA Factory,我建议你按照以下几个方面逐步深入学习:

  1. 数据准备与格式

    • 了解 LLaMA Factory 支持哪些数据集格式(例如 alpaca, sharegpt 等)。
    • 学习如何将你自己的数据转换成它所要求的标准 JSON 格式。
  2. 核心微调方法 (Training Methods)

    • 理解 LLaMA Factory 支持的几种关键微调技术,尤其是它们之间的区别:
      • LoRA / QLoRA (参数高效微调)
      • Full-parameter (全参数微调)
      • DPO (直接偏好优化,用于对齐)
  3. 模型与工作流 (Models & Workflow)

    • 熟悉 LLaMA Factory 支持哪些主流的基础模型 (Base Models)。
    • 理解"预训练 (Pre-training)"、"指令微调 (SFT)" 和 "偏好对齐 (RM/DPO)" 在 LLaMA Factory 中的具体含义和使用流程。
  4. 两种操作模式 (UI vs. CLI)

    • Web UI (Gradio 界面):学习如何通过点击和选择来配置所有训练参数、启动训练和监控过程。
    • 命令行 (CLI) :学习如何使用 train_bash.py 脚本,并通过指定配置文件或命令行参数来运行训练(这对于自动化和批量实验至关重要)。
  5. 训练后处理:合并与推理 (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 会在训练时自动将 instructioninput 拼接到一起(按照特定的提示词模板),作为模型的"输入"(Prompt),然后要求模型预测的答案必须与 output 字段一致。

B. 多轮对话格式 (Conversational Format)

当你需要模型学习上下文理解、连续聊天或扮演特定角色时,就需要用到这种格式。

  • 代表格式: sharegpt
  • 结构描述: 这种格式不再是简单的三个字段,而是模拟真实的聊天记录。它的核心是一个列表 (list) ,列表中的每个元素代表一轮对话。
    • 这个列表通常被称为 conversationshistory
    • 在每一轮对话中,又包含两个关键信息:
      • from: 消息的发送者。通常是 user (用户) 或 assistant (助手/模型)。在某些变体中也可能是 system (系统)。
      • value: 该发送者所说的具体内容(文字)。
  • 数据样例(描述): 一个 sharegpt 格式的数据样本,看起来会像这样:
    1. 第一轮:fromuservalue 是"你好,你是谁?"
    2. 第二轮:fromassistantvalue 是"我是一个AI助手。"
    3. 第三轮:fromuservalue 是"你能帮我做什么?"
    4. 第四轮:fromassistantvalue 是"我可以回答问题、生成文本......"

如何理解:

LLaMA Factory 会把从 user 开始一直到最后一个 user 说的内容作为模型的"输入",并要求模型接上最后一个 assistant 的回复。它会智能地处理哪些是历史记录,哪些是需要模型回答的当前问题。

C. 偏好/对齐格式 (Preference Format)

这种格式不用于常规的"指令微调 (SFT)",而是用于更高级的"对齐"阶段,比如 DPO (直接偏好优化) 或 RM (奖励模型) 训练。

  • 代表格式: dporeward
  • 结构描述: 它的目的是告诉模型"哪种回答更好"。因此,它不再提供单一的"正确答案"。
    • prompt: 用户的提问或指令。
    • chosen: "好的"回答。这是你偏好的、得分高的回答。
    • rejected: "坏的"回答。这是你不希望的、得分低的回答。
    • (可能还有 system 字段,用于设置系统提示词)。

如何理解:

在 DPO 训练中,LLaMA Factory 会向模型展示 prompt,并同时展示 chosenrejected 两个答案。训练的目标是让模型"提高" 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 文件,其中每一行都符合你选择的(如 alpacasharegpt)格式规范。


总结一下,数据准备的核心就是:

  1. 根据你的训练目标,从 alpaca, sharegpt, dpo 等格式中选择一个。
  2. 将你的原始数据(如 CSV, TXT, DB)中的字段,映射到目标格式所需的字段(如 instruction, outputconversations)。
  3. 将转换后的数据保存为 JSONL 文件。

2.核心微调方法 (Training Methods)

1. Full-parameter (全参数微调)

这是最传统、最彻底的微调方式。

  • 它是什么?

    全参数微调,顾名思义,就是解冻 模型中所有的参数(权重),并在你的数据上对这数百亿 个参数进行全部更新

  • 它是如何工作的?

    想象一下,一个大语言模型是一个极其庞大和复杂的神经网络。全参数微调会计算你的数据在模型上产生的误差,然后将这个误差反向传播,对模型中每一层、每一个神经元的权重都进行微小的调整。

  • 优缺点:

    • 优点: 理论上能达到的性能上限最高。因为它动用了模型的全部"算力"去拟合你的数据,可能在某些特定任务上学得最深入。
    • 缺点: 资源消耗极其巨大
      1. 显存 (VRAM): 你需要加载完整的模型、梯度、优化器状态。训练一个 7B(70亿)参数的模型,往往需要多张 80GB 的专业级 GPU。
      2. 时间: 训练速度非常慢。
      3. 灾难性遗忘: 由于所有参数都在变动,模型有可能会"忘记"它在预训练阶段学到的通用知识,导致在你的任务上表现很好,但在其他方面能力下降。
      4. 产出物: 训练的最终产出是一个全新的、完整的模型文件(例如 7B 模型就是 14GB+)。
  • 何时使用?

    当你拥有极其强大的硬件资源,并且你的任务与模型的原始领域差异巨大,或者你追求模型在特定任务上可能 的最高性能时。对于绝大多数用户,这不常用。


2. LoRA / QLoRA (参数高效微调)

这是目前最主流、最推荐的微调方式,属于 PEFT (Parameter-Efficient Fine-Tuning) 技术的一种。

  • 它是什么?

    LoRA (Low-Rank Adaptation) 是一种"聪明的"微调技术。它冻结 了原始大模型(例如 7B)的全部参数,使其保持不变。

  • 它是如何工作的?

    LoRA 的核心思想是,微调时模型权重的变化是"低秩"的。

    1. 冻结: 原始模型(几十 G 大)被加载到显存中,但被设为"不可训练"。
    2. 注入: 在模型的关键层(通常是 Attention 层)旁边,LoRA 额外注入了两个非常小、可训练的"适配器"(Adapter) 矩阵(称为 A 和 B)。
    3. 训练: 在训练时,只有这些新添加的、总共只有几十兆(MB)的适配器参数被更新。原始模型的权重始终不变。
    4. 类比: 想象原始模型是一本厚重的、不可修改的教科书。LoRA 不去修改教科书,而是在旁边贴上一些"即时贴"(Post-it notes) 来补充新知识。训练时,你只在更新这些"即时贴"上的内容。
  • QLoRA 又是什么?

    QLoRA (Quantized LoRA) 是 LoRA 的极致省显存版。它在 LoRA 的基础上做了两件事:

    1. 量化 (Quantization): 在加载那本"教科书"(原始模型)时,用 4-bit 的精度来加载(而不是常规的 16-bit)。这使得模型本身占用的显存锐减约 75%
    2. Paging / Double Quant: 使用更高级的技术进一步优化显存占用。
    • 效果: QLoRA 使得在单张消费级显卡(如 24GB 的 RTX 3090/4090)上微调 7B 甚至 13B 的模型成为可能。
  • 优缺点:

    • 优点:
      1. 显存高效: 资源占用极低,QLoRA 尤为突出。
      2. 训练快速: 因为要训练的参数量极少(不到总参数的 0.1%)。
      3. 无灾难性遗忘: 原始知识被完好保留在冻结的权重中。
      4. 产出物轻便: 训练结果只是一个很小的适配器文件(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 (指令微调): 你使用 alpacasharegpt 格式的数据,告诉模型:"当用户问 A,你必须回答 B"。这是在教模型**"能力"**。
    • DPO (偏好对齐): 你使用 dpo 格式的数据(包含 prompt, chosen, rejected),告诉模型:"当用户问 A,B 回答比 C 回答更好"。这是在教模型**"价值观和品味"**。
  • 它是如何工作的?

    在 LLaMA Factory 中,你通常会先对模型进行 SFT(使用 LoRA),让它具备回答问题的基本能力。

    然后,你再进行 DPO 训练(通常也使用 LoRA 作为底层的技术)。DPO 会加载 SFT 阶段训练好的 LoRA 适配器,并使用你的偏好数据(好/坏答案对)进一步优化模型。

    训练的目标是让模型提高"好答案" (chosen) 的概率 ,同时降低"坏答案" (rejected) 的概率

  • 类比:

    1. SFT (LoRA/Full): 像是在驾校学习"如何踩油门"和"如何打方向盘"(学习基本能力)。
    2. 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 中,最标准的流程是:

  1. 选择一个基础模型。
  2. 使用 QLoRA + 你的SFT数据alpaca 格式)进行指令微调
  3. (可选)使用 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)。
  • 使用的数据: alpacasharegpt 格式的问答/对话数据。
  • 产出: SFT 阶段的适配器 (Adapter)。此时的模型已经"会聊天"了。
阶段三:(可选) 偏好对齐 (Preference Alignment, DPO/RM)
  • 目的: 教会模型**"如何说得更好"**。
  • 场景: SFT 后的模型虽然会回答了,但回答可能很啰嗦、不安全或风格你不喜欢。此阶段用于打磨模型的"品味"。
  • 使用的数据: dpo 格式的偏好数据(包含 chosenrejected 回答)。
  • 产出: DPO 阶段的适配器。
阶段四:模型合并 (Merge & Export)
  • 目的: 将训练成果固化,准备用于部署。
  • 场景: 你已经完成了 SFT 或 DPO 训练,得到了一个(或多个)适配器。你现在需要一个能独立运行的完整模型。
  • 工作: LLaMA Factory 会加载基础模型 ,然后将你的适配器(比如 SFT 适配器 + DPO 适配器)的权重"加"到基础模型的权重上。
  • 产出: 一个合并后的完整模型(几十 GB)。
阶段五:推理与评估 (Inference & Eval)
  • 目的: 测试模型效果。
  • 场景: 运行你的新模型,看看它在真实问题上的表现。
  • 工作: LLaMA Factory 提供了"聊天"(Chat) 和"评估"(Evaluate) 选项卡。
    • 聊天: 让你像 ChatGPT 一样,直接与你刚训练好的模型(可以是"基础模型+适配器"模式,也可以是"合并后的模型")对话。
    • 评估: 使用标准数据集(如 MMLU, C-Eval)来客观地测试模型的性能得分。

总结:最典型的工作流

对于绝大多数用户(包括你),最常见的工作流是(红色为核心步骤):

1. 准备数据 (选择 alpacasharegpt 格式)
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 秩...)都做成了 下拉菜单**、输入框勾选框

    你的工作流是:

    1. 点选配置: 在 "Train" (训练) 选项卡中,用鼠标依次选择你想要的基础模型、微调方法 (LoRA/QLoRA)、要训练的数据集。
    2. 调整参数: 在 "Hyperparameters" (超参数) 选项卡中,通过滑块或输入框设置 Epoch (轮数)、Batch Size (批大小)、Learning Rate (学习率) 等。
    3. 点击启动: 点击 "Start" (开始) 按钮。
    4. 监控: 界面会自动切换到日志 (Log) 窗口,你可以实时看到训练过程的输出、损失 (Loss) 变化和TFLOPs(算力利用率)。
  • 优缺点:

    • 优点:
      • 极其直观: 所见即所得,不需要记忆任何命令。
      • 易于探索: 你可以很方便地浏览所有可用的模型和数据集,直观地了解 LLaMA Factory 到底支持什么。
      • 快速上手: 对新手极其友好,是初次运行和调试的绝佳选择。
    • 缺点:
      • 难以复现: 如果你这次训练调整了 20 个参数,下次想完全复现,你必须重新用鼠标点选 20 次,很容易出错或遗漏。
      • 不便自动化: 无法用于编写脚本或进行批量实验。你不能让它"自动训练 10 个不同超参数的模型"。
  • 何时使用?

    • 入门学习时: 刚开始接触 LLaMA Factory,用它来熟悉各项参数和流程。
    • 调试数据时: 快速跑一个 Epoch,看看数据格式是否正确,训练是否能正常启动。
    • 进行单次、临时的训练任务时。

2. CLI (命令行)

这是更专业、更高效的模式,也是在服务器上进行严肃训练的推荐模式

  • 它是什么?

    它是在你的终端(Terminal 或 Shell)中,通过直接运行 Python 脚本 (主要是 train_bash.py) 并附带一系列参数来启动训练的方式。

  • 它是如何工作的?

    你不再需要鼠标点选。你通过两种方式告诉 LLaMA Factory 你要"做什么"和"怎么做":

    方式一:使用 YAML 配置文件 (推荐)

    1. 定义配置: LLaMA Factory 提供了一个 examples (示例) 目录,里面有各种任务的 .yaml 配置文件(例如 lora_sft.yaml)。
    2. 修改配置: 你复制一个 .yaml 文件,用文本编辑器打开它,在里面明确指定你的 model_name_or_pathdatasetfinetuning_type (LoRA)、output_dir (输出目录) 以及所有超参数。
    3. 运行: 在终端中执行一个非常简洁 的命令,告诉 LLaMA Factory 使用这个配置文件:
      train_bash.py --config_file my_config.yaml (示例命令,非代码)

    方式二:直接传递命令行参数

    1. 你也可以不使用配置文件,而是把所有参数直接"拼接"在运行命令后面:
      train_bash.py --model_name_or_path ... --dataset ... --finetuning_type lora ... (示例命令)
    2. 这种方式通常很冗长,容易出错,一般只用于临时覆盖配置文件中的个别参数。
  • 优缺点:

    • 优点:
      • 可复现性极强: .yaml 配置文件就是你训练的**"快照"**。你只要保存了这个文件,就能在任何机器、任何时间 100% 复现这次实验。
      • 易于自动化与批量实验: 你可以轻松编写 Shell 脚本,循环更改 .yaml 文件中的某个参数(比如学习率),然后连续运行 10 次训练,实现"网格搜索"调参。
      • 服务器友好: 在没有图形界面的远程服务器 (SSH) 上,CLI 是唯一的操作方式。
    • 缺点:
      • 有学习门槛: 你需要知道 LLaMA Factory 的核心脚本叫什么 (train_bash.py),并且需要熟悉那些关键参数的名称 (如 finetuning_type, per_device_train_batch_size 等)。
      • 不够直观: 你无法"浏览"可选项,你必须"知道"你要用的模型或数据集的准确名称。
  • 何时使用?

    • 进行严肃的、可复现的实验时。
    • 在远程服务器上训练时。
    • 需要进行自动化调参和批量训练时。

总结

特性 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.0v1.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 操作:

    1. 切换到 "Export Model" (导出模型) 选项卡。
    2. 模型名称 (Model Name): 选择你训练时用的那个基础模型 (Base Model)。
    3. 适配器路径 (Adapter Path): 选择你训练保存的适配器 (在 saves/ 目录中,选择你想要的那个 checkpoint)。
    4. (高级) 堆叠适配器: LLaMA Factory 允许你同时加载多个适配器。例如,你可以先加载 SFT 阶段的适配器,再加载 DPO 阶段的适配器,将它们的效果"叠加"在一起。
    5. 导出目录 (Export Directory): 指定一个新目录,用来存放合并后的完整模型。
    6. 点击 "Start" (开始)。
  • CLI 操作:

    使用 export_model.py 脚本,并指定相同的参数(基础模型路径、适配器路径、导出路径)。

  • 最终产出:

    在你的导出目录中,你会得到一个包含 config.json, model.bin (或 *.safetensors) 和 tokenizer.json 等文件的完整模型。这就是你可以打包带走、用于部署的最终产物。

B. 推理 (Inference / Chat)

这是你测试 (Test)评估 (Evaluate) 模型时的常用操作。LLaMA Factory 的推理功能非常强大,因为它允许你**"跳过"合并步骤**,直接进行测试。

  • Web UI 操作:

    1. 切换到 "Chat" (聊天) 选项卡。
    2. 模型名称 (Model Name): 同样,选择那个基础模型
    3. 适配器路径 (Adapter Path): 选择你要测试的适配器
    4. 点击 "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 请求来调用你本地训练的模型,非常适合程序化集成。

总结:何时使用它们?

  • 当你想"测试"时 (Testing / Evaluating):

    • 使用"推理 (Inference)"功能 (Chat / API)。
    • 采用"基础模型 + 动态加载适配器"的方式。
    • 优点: 快速、灵活,方便对比不同 checkpoint 的效果。
  • 当你想"部署"时 (Deploying / Sharing):

    • 使用"合并 (Merge)"功能 (Export Model)。
    • 生成一个单一的、完整的、合并后的模型。
    • 优点: 产物标准、独立、可移植,方便用于各种生产环境和推理框架 (vLLM, TGI 等)。
相关推荐
魔乐社区5 小时前
在魔乐社区使用llama-factory微调Qwen3.5-4B模型
微调·llama·qwen3.5
小超同学你好1 天前
Transformer 13. DeepSeek LLM 架构解析:与 LLaMA 以及 Transformer 架构对比
人工智能·语言模型·架构·transformer·llama
CHPCWWHSU1 天前
llama-server - 从命令行到HTTP Server
llm·llama·cpp·cudatoolkit
minstbe2 天前
IC设计私有化AI助手实战:基于Docker+OpenCode+Ollama的数字前端综合增强方案(进阶版)
人工智能·python·语言模型·llama
wangqiaowq2 天前
Llama_index + Chroma
llama
CHPCWWHSU4 天前
初识llama.cpp - 轻量级推理引擎
llm·llama·cpp·cudatoolkit
l1t4 天前
在ARM64 KyLin计算机上安装llama.cpp
大数据·llama·kylin
l1t4 天前
在华为arm64 kylin计算机上安装docker编译llama.cpp的步骤
华为·docker·llama·kylin
小超同学你好4 天前
Transformer 12. LLaMA 架构介绍以及与 Transformer 架构对比
人工智能·语言模型·transformer·llama