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 会在训练时自动将 instruction 和 input 拼接到一起(按照特定的提示词模板),作为模型的"输入"(Prompt),然后要求模型预测的答案必须与 output 字段一致。

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

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

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


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

  1. 根据你的训练目标,从 alpaca, sharegpt, dpo 等格式中选择一个。
  2. 将你的原始数据(如 CSV, TXT, DB)中的字段,映射到目标格式所需的字段(如 instruction, output 或 conversations)。
  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 (指令微调): 你使用 alpaca 或 sharegpt 格式的数据,告诉模型:"当用户问 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)。
  • 使用的数据: 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 秩...)都做成了 下拉菜单**、输入框 和勾选框。

    你的工作流是:

    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_path、dataset、finetuning_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.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 操作:

    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 等)。
相关推荐
GPU实战笔记4 天前
本地跑不动 llama.cpp,临时租云 GPU 怎么搭?从启动服务到环境复用
java·服务器·网络·人工智能·深度学习·llama
牛马工作号6 天前
RK3588 使用 rk-llama.cpp + RKNPU2 部署 Qwen3.5:从零开始的 NPU 本地大模型实战
人工智能·语言模型·llama
书源丶6 天前
Qwen3-Embedding-0.6B 纯 CPU
网络·语言模型·embedding·llama
论文复现现场7 天前
Llama/Qwen 70B 部署需要几张 RTX 4090?2卡、4卡、8卡显存、量化与 vLLM 选型
llama·qwen·vllm·大模型推理·大模型部署·rtx4090
谢白羽8 天前
在4×B300用SGLang部署DeepSeek-V4.1 Flash优化实录
笔记·python·llm·llama·sglang
renzao_ai11 天前
本地 35B 大模型部署实战:Ollama 跑 Ornith-35B 全流程
python·llama·免费ai大模型
Είναι η κοπέλα11 天前
本地大模型部署完全指南:Ollama / vLLM / llama.cpp / MLX 四大引擎横评与选型实战
macos·llama·vllm
小饕11 天前
RK3588 NPU 跑大模型实测:rknn-llm 解码 25.9 tok/s,是 llama.cpp 的 4 倍!附三天完整踩坑记录
人工智能·机器人·llama
一航jason12 天前
Android平台推理框架及试用场景模型对比
android·人工智能·ai·架构·ai编程·llama
一航jason12 天前
Android 端侧大模型推理框架对比
android·人工智能·ai·ai编程·llama·ai-native