Llama Factory 入门指南与使用教程 – wiki基地


Llama Factory 入门指南与使用教程:从零开始精调大型语言模型

在大型语言模型(LLM)领域,预训练模型的强大能力令人瞩目。然而,要让这些通用模型更好地服务于特定任务或领域,精细化调优(Fine-tuning)是不可或缺的步骤。传统的全参数微调需要庞大的计算资源和存储空间,这对于许多个人研究者和中小团队来说是巨大的挑战。参数高效微调(PEFT)技术的出现极大地降低了这一门槛。

Llama Factory 正是应运而生的一款强大工具,它集成了多种先进的 PEFT 方法,并提供了一个简洁易用的界面(包括命令行和Web UI),让用户能够轻松、高效地对各类主流大型语言模型进行微调。无论你是想让模型学会遵循特定指令、适应垂直领域的语料,还是实现更高级的对齐目标,Llama Factory 都能提供有力的支持。

本篇文章将带你从零开始,一步步深入了解和使用 Llama Factory,包括其安装、核心概念、通过命令行和Web UI进行基本微调操作,以及一些进阶的应用。

第一章:Llama Factory 是什么?为何选择它?

1.1 Llama Factory 简介

Llama Factory (也称为 LLM-Factory) 是一个基于 Hugging Face 的 transformerspeft 库构建的统一高效的 LLM 微调框架。它的核心目标是简化并加速大型语言模型的微调过程,尤其是基于 PEFT 方法的微调。

1.2 Llama Factory 的核心优势

  • 广泛的模型支持: 支持市面上大多数主流的开源大型语言模型,包括 Llama、Qwen、ChatGLM、Baichuan、Yi、Mistral、Gemma 等等,并且持续更新。
  • 丰富的 PEFT 方法: 集成了 LoRA、QLoRA、LoHa、AdaLoRA、GPTQ、AWQ 等多种参数高效微调和量化技术,用户可以根据需求灵活选择。
  • 多样的微调任务: 不仅支持常见的监督式微调(SFT),还支持奖励模型训练(RM)、近端策略优化(PPO)、直接偏好优化(DPO)等基于人类反馈的强化学习(RLHF)及相关对齐方法。
  • 友好的用户界面: 提供命令行接口(CLI)用于自动化脚本或高级用户,同时提供功能强大的 Web UI,即使不熟悉代码也能轻松完成模型加载、数据集配置、参数调整和训练启动。
  • 高性能与效率: 优化了数据加载、模型并行和训练流程,旨在提高微调效率并降低硬件要求(尤其是显存)。支持单卡、多卡以及分布式训练。
  • 模块化设计: 代码结构清晰,易于理解和扩展,方便开发者进行二次开发或集成新的技术。
  • 活跃的社区与文档: 开源项目,拥有活跃的社区,文档相对完善,遇到问题容易找到帮助。

选择 Llama Factory 意味着你可以用更少的计算资源、更快的速度,更便捷地对最新的大型语言模型进行定制化训练,使其更好地服务于你的特定应用场景。

第二章:环境准备与安装

在开始使用 Llama Factory 之前,你需要准备合适的软硬件环境。

2.1 硬件要求

微调大型语言模型最关键的硬件是 GPU (图形处理器)。模型大小和选择的微调方法(尤其是量化技术)决定了所需的显存(VRAM)大小。

  • 最低配置(尝鲜): 使用 QLoRA 量化到 4bit,对一个相对较小的模型(例如 7B 参数)进行微调,可能需要 12GB 或 16GB 显存的 GPU(如 RTX 3060/4060, RTX 3090/4090, A4000/A5000/A6000)。
  • 推荐配置(常用): 使用 QLoRA 或 LoRA 对 7B/13B 模型进行微调,推荐 24GB 显存的 GPU 或更多,如 RTX 3090/4090, A100, H100。
  • 更高要求: 微调更大的模型(如 30B, 70B)或使用全参数微调、更大批量大小,需要更多甚至多块高性能 GPU。

确保你的系统安装了正确版本的 NVIDIA 驱动,并且支持 CUDA。

2.2 软件要求

  • 操作系统: Linux 是最推荐的平台,Windows 也可以(需要 WSL2 或相应的 CUDA/PyTorch 配置),macOS 理论上也行但通常显卡性能不足。
  • Python 环境: 推荐使用 Python 3.8 或更高版本。建议使用虚拟环境(如 venvconda)来隔离项目依赖。
  • Git: 用于克隆 Llama Factory 仓库。
  • Conda (可选但推荐): 方便管理 Python 环境和依赖。

2.3 安装步骤

建议通过 Git 克隆仓库并使用 Poetry 或 Pip 进行安装。

方法一:使用 Poetry (推荐)

  1. 安装 Poetry (如果未安装):
    bash
    curl -sSL https://install.python-poetry.org | python3 -

    安装完成后,可能需要重启终端或将 Poetry 的 bin 目录添加到 PATH。

  2. 克隆 Llama Factory 仓库:
    bash
    git clone https://github.com/hiyouga/LLaMA-Factory.git
    cd LLaMA-Factory

  3. 安装依赖 (包括 PyTorch):
    进入 LLaMA-Factory 目录后,根据你的 CUDA 版本选择安装命令。

    • 如果 CUDA 版本是 11.x:
      bash
      poetry install --with torch11
    • 如果 CUDA 版本是 12.x 或更高:
      bash
      poetry install --with torch12

      Poetry 会自动创建虚拟环境并安装所有依赖,包括指定版本的 PyTorch。

方法二:使用 Pip

  1. 克隆 Llama Factory 仓库:
    bash
    git clone https://github.com/hiyouga/LLaMA-Factory.git
    cd LLaMA-Factory

  2. 创建并激活虚拟环境 (推荐):
    bash
    python3 -m venv .venv
    source .venv/bin/activate

    或者使用 conda:
    bash
    conda create -n llama-factory python=3.10 -y
    conda activate llama-factory

  3. 安装依赖:
    首先安装核心依赖:
    bash
    pip install -e .

    然后根据你的 CUDA 版本安装 PyTorch。请参考 PyTorch 官网获取与你 CUDA 版本匹配的安装命令。例如,对于 CUDA 12.1:
    bash
    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

    如果你遇到其他可选依赖的问题(例如某些量化方法),可以尝试安装 extras:
    bash
    pip install -e .[torch,bitsandbytes,vllm,deepspeed] # 根据需要选择

验证安装:

进入 LLaMA-Factory 目录后,尝试运行 Web UI 或训练脚本的帮助命令:
“`bash
python src/train_web.py # 尝试启动 Web UI

或者

python src/train_bash.py –help # 查看命令行帮助
“`
如果能正常输出信息或启动 Web UI,说明安装基本成功。

第三章:核心概念解析

在使用 Llama Factory 进行微调之前,理解一些关键概念是必要的。

3.1 基础模型 (Base Model) 与指令遵循模型 (Instruct Model)

  • 基础模型: 这些模型通常在大规模文本数据上进行无监督预训练(例如预测下一个词)。它们具备了强大的语言理解和生成能力,但通常不擅长直接遵循人类的指令。例如 Llama-2 7B、Qwen-7B。
  • 指令遵循模型: 这些模型是在基础模型的基础上,通过监督式微调(SFT)或强化学习(RLHF/DPO)等方法,在高质量的指令-响应对数据集上训练得到的。它们能够更好地理解并执行用户的指令。例如 Llama-2-chat 7B、Qwen-7B-Chat。

进行微调时,你通常会选择一个基础模型或一个现有的指令遵循模型作为起点。

3.2 参数高效微调 (PEFT)

PEFT 是一类技术,其核心思想是在微调过程中只训练模型总参数的一小部分,而不是更新所有参数。这大大减少了计算资源、显存和存储的需求,同时在许多任务上能达到接近全参数微调的效果。

  • LoRA (Low-Rank Adaptation): LoRA 是最流行的 PEFT 方法之一。它在预训练模型的每一层(特别是注意力层)旁边添加一对小的低秩矩阵(A 和 B),微调时只训练这些新增的矩阵参数,原始模型的参数保持冻结。推理时,将 LoRA 参数与原参数合并,不增加推理延迟。
  • QLoRA: QLoRA 是 LoRA 的一个变种,它在 LoRA 的基础上进一步引入了 4bit 量化、Paged Optimizers 和 Double Quantization 等技术。这使得在显存极低的设备上微调大型模型成为可能,例如在 24GB 显存上微调 70B 模型。Llama Factory 对 QLoRA 有很好的支持。
  • 其他 PEFT 方法: Llama Factory 还支持 LoHa (Low-Rank Hessian Aware Projection)、AdaLoRA 等,它们是 LoRA 的改进或变种,各有特点。

3.3 量化 (Quantization)

量化是将模型参数从高精度(如 FP32 或 FP16)转换为低精度(如 Int8 或 Int4)的过程。这可以显著减少模型的存储空间和显存占用,加快推理速度。QLoRA 集成的 4bit 量化是微调过程中的量化。还有一些方法是在微调 对模型进行量化以供推理使用,例如 GPTQ 和 AWQ,Llama Factory 也支持导出量化后的模型。

3.4 微调任务 (Stages)

Llama Factory 支持多种微调“阶段”或任务:

  • SFT (Supervised Fine-Tuning): 监督式微调。使用输入指令和期望输出响应的数据对模型进行训练。目标是让模型学习到如何根据指令生成正确的或期望的回答。这是最常见、也是通常的第一步微调任务。
  • RM (Reward Modeling): 奖励模型训练。用于 RLHF,训练一个模型来评估不同模型输出的质量或偏好程度。数据集通常包含多个对同一提示的不同响应,并标注了它们之间的偏好关系。
  • PPO (Proximal Policy Optimization): RLHF 中的一种算法。使用奖励模型作为反馈信号,通过强化学习来进一步优化 SFT 模型,使其生成的响应更符合人类偏好。
  • DPO (Direct Preference Optimization): 一种替代 PPO 的对齐方法。它直接使用偏好数据作为训练信号,避免了训练奖励模型和复杂的强化学习过程,通常更稳定且易于实现。
  • Other: 可能包含其他实验性或特定的微调任务。

对于初学者,SFT 是最常见的起点。

3.5 数据集格式

进行 SFT 需要准备特定格式的数据集。常见的数据集格式通常包含一个“指令”(instruction)、可能的“输入”(input,如一段需要模型处理的文本)和对应的“输出”(output,即期望的模型响应)。

Llama Factory 支持多种数据集格式,包括但不限于:

  • Alpaca 格式: {"instruction": "...", "input": "...", "output": "..."}
  • ShareGPT 格式: 一个对话列表,每个对话包含多个用户和助手轮次的交互。
  • 其他自定义格式: Llama Factory 允许用户注册自定义的数据集加载和处理函数。

内置的数据集通常已经适配了 Llama Factory 的要求。如果使用自定义数据,需要确保其格式正确或编写相应的数据处理代码。

第四章:使用命令行(CLI)进行微调 (SFT 示例)

命令行接口适合熟悉终端操作、需要编写自动化脚本或进行分布式训练的用户。我们将以最常见的 SFT 任务为例。

4.1 准备工作

  1. 下载模型: 从 Hugging Face Model Hub 下载你想要微调的基础模型。例如,下载清华大学的 ChatGLM3-6B
    你可以使用 Hugging Face 的 huggingface-cli 工具,或者手动下载到本地目录。例如,下载到 ./models/ChatGLM3-6B
    bash
    huggingface-cli download ChatGLM3-6B --local-dir ./models/ChatGLM3-6B

    或者对于 Llama-2 7B:
    bash
    huggingface-cli download meta-llama/Llama-2-7b-hf --local-dir ./models/Llama-2-7b-hf

    注意: 下载 Llama 系列模型通常需要申请权限。

  2. 准备数据集: 使用 Llama Factory 内置的数据集,或者准备符合要求格式的自定义数据集。内置数据集如 alpaca_zhbelle_mix_20k 等。如果你有自定义数据集文件(如 JSON 格式),需要将其路径配置到数据集参数中。

4.2 执行 SFT 命令

进入 Llama Factory 仓库根目录,运行 src/train_bash.py 脚本。以下是一个使用 QLoRA 微调 ChatGLM3-6B 的基本示例命令:

bash
CUDA_VISIBLE_DEVICES=0 # 指定使用的 GPU 设备 ID
python src/train_bash.py \
--stage sft \
--model_name_or_path ./models/ChatGLM3-6B \
--do_train \
--dataset alpaca_zh \
--finetuning_type lora \
--lora_rank 8 \
--lora_alpha 16 \
--lora_dropout 0.05 \
--quantization_bit 4 \
--output_dir ./output/chatglm3-6b-lora-alpaca_zh \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 10 \
--save_steps 100 \
--learning_rate 5e-5 \
--num_train_epochs 3 \
--plot_loss true \
--fp16 # 或 --bf16 (如果你的 GPU 支持)

命令参数解析:

  • CUDA_VISIBLE_DEVICES=0: 指定使用 ID 为 0 的 GPU 进行训练。如果有多块 GPU,可以用逗号分隔(如 0,1,2,3)或使用 -1 表示所有可用 GPU,配合分布式训练参数。
  • python src/train_bash.py: 执行训练脚本。
  • --stage sft: 指定微调任务为监督式微调 (SFT)。
  • --model_name_or_path ./models/ChatGLM3-6B: 指定预训练模型的本地路径或 Hugging Face 模型 ID。
  • --do_train: 指定执行训练操作。
  • --dataset alpaca_zh: 指定用于训练的数据集名称。如果是自定义数据集,你需要查阅 Llama Factory 文档了解如何配置 data/dataset_info.json 或直接在命令行指定自定义数据集路径和格式。例如 --dataset_dir /path/to/my_data --dataset my_custom_dataset_name
  • --finetuning_type lora: 指定使用的 PEFT 方法,这里是 LoRA。设置为 lora 并结合 --quantization_bit 4 即可启用 QLoRA。
  • --lora_rank 8: LoRA 的秩 (rank),影响新增参数的数量。较大的秩通常表达能力更强,但也增加计算和显存,并可能导致过拟合。8 或 16 是常用值。
  • --lora_alpha 16: LoRA 的缩放因子。通常设置为 2 * lora_rank 或等于 lora_rank
  • --lora_dropout 0.05: LoRA 层的 Dropout 比例,用于正则化。
  • --quantization_bit 4: 启用 4bit 量化 (QLoRA)。设置为 8 启用 8bit 量化。不设置则不进行量化。
  • --output_dir ./output/chatglm3-6b-lora-alpaca_zh: 指定训练结果(Adapter 权重、日志、检查点等)保存的目录。
  • --per_device_train_batch_size 2: 每个 GPU 上的训练批量大小。受显存限制,可能需要设得很小。
  • --gradient_accumulation_steps 4: 梯度累积步数。通过累积多个小批量的梯度,可以模拟更大的批量大小 (per_device_train_batch_size * gradient_accumulation_steps),在显存不足以使用大批量时非常有用。
  • --lr_scheduler_type cosine: 学习率调度器类型,如 cosine, linear, constant 等。
  • --logging_steps 10: 每隔多少步记录一次训练日志(损失等)。
  • --save_steps 100: 每隔多少步保存一次检查点。
  • --learning_rate 5e-5: 训练的学习率。这是一个重要的超参数,需要根据模型和任务调整。
  • --num_train_epochs 3: 训练的总轮数 (epoch)。或者使用 --max_steps 指定总训练步数。
  • --plot_loss true: 在训练结束后生成损失曲线图。
  • --fp16: 使用 FP16 混合精度训练。可以减少显存占用并加速训练,推荐开启。如果 GPU 支持 BF16 (如 A100, H100, RTX 40系列),使用 --bf16 通常更稳定。

4.3 训练过程

运行命令后,如果一切配置正确,你会看到训练过程的日志输出,包括数据加载、模型初始化、训练进度条、当前步数、损失值、学习率等信息。

Loading checkpoint shards: 100%|███████████████████████████████████████████| 7/7 [00:02<00:00, 2.87it/s]
Loading model and tokenizer ...
INFO:llamafactory.model.loader:Loading adapter from ...
You are using the default legacy behaviour of the <class 'transformers.models.llama.tokenization_llama_fast.LlamaTokenizerFast'>. This is deprecated so you should get a new tokenizer.
Loading dataset alpaca_zh ...
Preprocessing dataset ...
Training...
{'loss': 1.2345, 'learning_rate': 0.00005, 'epoch': 0.01}
{'loss': 0.9876, 'learning_rate': 0.0000499, 'epoch': 0.02}
...

训练会持续指定的 epoch 或步数。你可以通过日志信息和进度条来监控训练状态。

4.4 训练结果

训练完成后,Adapter 权重、训练日志、配置参数以及可能的检查点文件会保存在 --output_dir 指定的目录下。最重要的结果就是 Adapter 权重文件,通常在 output_dir 下的 adapter_model.bin 或其他相关文件中。

第五章:使用 Web UI 进行微调

对于不熟悉命令行或偏好可视化操作的用户,Llama Factory 提供的 Web UI 是一个极好的选择。

5.1 启动 Web UI

进入 Llama Factory 仓库根目录,运行启动脚本:

bash
python src/train_web.py

脚本会启动一个 Gradio 应用,并在终端输出访问地址(通常是 http://127.0.0.1:7860 或类似的本地地址)。在浏览器中打开这个地址即可看到 Llama Factory 的 Web UI。

5.2 Web UI 界面介绍

Web UI 界面直观,主要分为几个区域或 Tab 页:

  • Model: 选择基础模型、设置加载参数(如量化)。
  • Dataset: 选择或配置训练数据集。
  • Stage: 选择微调任务(如 SFT, DPO)。
  • PEFT: 配置 PEFT 方法及其参数(如 LoRA 的 rank, alpha)。
  • Train: 配置训练超参数(学习率、批量大小、 epoch、优化器等),启动训练。
  • Evaluate: 配置评估参数,对模型进行评估。
  • Predict: 加载微调后的模型进行推理测试。
  • Train Log / Monitor: 显示训练过程日志和可能的指标曲线。

5.3 使用 Web UI 进行 SFT (示例)

以下是使用 Web UI 进行 SFT 的基本流程:

  1. 打开 Web UI: 在浏览器中访问启动脚本输出的地址。

  2. Model Tab:

    • 在 “Model Name” 下拉列表中选择你下载或想使用的模型(Llama Factory 会尝试自动检测本地模型或从 Hugging Face 加载)。如果模型不在列表中,可以手动输入 Hugging Face ID 或本地路径。
    • 如果使用量化,勾选 “Quantization Bit” 并选择 4 或 8。
    • 其他高级加载选项根据需要配置。
  3. Dataset Tab:

    • 在 “Dataset” 下拉列表中选择一个内置数据集(如 alpaca_zh)。
    • 如果使用自定义数据集,勾选 “Custom Dataset” 并指定文件路径和格式。
  4. Stage Tab:

    • 在 “Stage” 下拉列表中选择 “Supervised Fine-Tuning (SFT)”。
  5. PEFT Tab:

    • 在 “Fine-Tuning Method” 下拉列表中选择 “LoRA” (如果选择量化,会自动变成 QLoRA)。
    • 配置 LoRA 参数,如 “LoRA Rank (r)” (推荐 8 或 16), “LoRA Alpha” (推荐 16 或 32), “LoRA Dropout” (推荐 0.05)。
  6. Train Tab:

    • 在 “Output directory” 输入框中指定训练结果保存的路径。
    • 配置训练超参数:
      • “Learning Rate”: 如 5e-5。
      • “Number of Epochs”: 如 3。
      • “Max Steps”: (与 epoch 二选一)。
      • “Per Device Train Batch Size”: 如 2。
      • “Gradient Accumulation Steps”: 如 4。
      • “Learning Rate Scheduler”: 如 cosine。
      • 其他参数如优化器、权重衰减、梯度裁剪等根据需要调整。
    • 勾选 “Mixed Precision” (如 fp16bf16) 以启用混合精度训练。
    • 点击页面底部的 “Preview Command” 可以预览即将执行的命令行命令,这有助于理解参数。
    • 点击 “Start Training” 按钮开始训练。
  7. Train Log / Monitor Tab:

    • 切换到这个 Tab 可以实时查看训练日志输出。
    • 如果勾选了 Plot Loss,训练过程中或结束后会显示损失曲线图。

Web UI 将在后台运行训练过程,你可以随时查看日志。训练完成后,Adapter 权重将保存在指定的输出目录中。

第六章:微调结果的使用(推理与合并)

微调完成后,你得到了 Adapter 权重文件。这些权重需要与原始的基础模型一起使用才能进行推理。

6.1 使用微调后的模型进行推理

方法一:通过 Llama Factory CLI 进行推理

Llama Factory 提供了 src/predict_bash.py 脚本用于加载 Adapter 进行推理。

bash
python src/predict_bash.py \
--model_name_or_path ./models/ChatGLM3-6B \
--adapter_name ./output/chatglm3-6b-lora-alpaca_zh \
--quantization_bit 4 \
--fp16 # 或 --bf16 \
--temperature 0.7 \
--top_p 0.9 \
--max_new_tokens 512

参数解析:

  • --model_name_or_path: 指定原始基础模型的路径。
  • --adapter_name: 指定微调后 Adapter 权重的路径。
  • --quantization_bit 4: 如果微调时使用了 4bit 量化,推理时也需要指定。
  • --fp16 / --bf16: 与训练时保持一致的精度设置。
  • --temperature, --top_p, --max_new_tokens 等:控制生成文本的参数。

运行此命令后,脚本会加载模型和 Adapter,进入交互模式,你可以输入指令并查看模型的响应。

方法二:通过 Llama Factory Web UI 进行推理

在 Web UI 中切换到 “Predict” Tab:

  1. 加载模型和 Adapter:

    • 在 “Model Name” 选择原始模型。
    • 在 “Adapter Name” 选择你的微调输出目录。
    • 如果使用了量化,勾选并选择对应的位数。
    • 点击 “Load Model” 按钮加载模型。
  2. 进行对话:

    • 在左侧的对话框中输入你的指令。
    • 点击 “Generate” 或按回车发送。模型将在右侧生成响应。
    • 你可以在右侧调整生成参数,如 Temperature, Top P, Max New Tokens 等。

方法三:手动加载 (使用 Transformers 和 PEFT 库)

Llama Factory 的 Adapter 权重兼容 Hugging Face PEFT 库。你可以使用标准的 transformerspeft 代码来加载和使用:

“`python
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel, PeftConfig
import torch

Load the base model

model_name = “./models/ChatGLM3-6B” # 或 Hugging Face ID
model = AutoModelForCausalLM.from_pretrained(model_name, device_map=”auto”, torch_dtype=torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16)
tokenizer = AutoTokenizer.from_pretrained(model_name)

Load the PEFT adapter

adapter_path = “./output/chatglm3-6b-lora-alpaca_zh”
model = PeftModel.from_pretrained(model, adapter_path)
model.eval() # Set model to evaluation mode

Example inference (for ChatGLM3-6B)

For different models, generation format might differ (e.g., using tokenizer.apply_chat_template)

history = [{“role”: “user”, “content”: “你好,请介绍一下你自己。”}]
input_ids = tokenizer.apply_chat_template(history, tokenize=True, add_generation_prompt=True, return_tensors=”pt”)
input_ids = input_ids.to(model.device)

with torch.no_grad():
outputs = model.generate(
input_ids,
max_new_tokens=512,
do_sample=True,
temperature=0.7,
top_p=0.9,
)
response = tokenizer.decode(outputs[0][input_ids.shape[-1]:], skip_special_tokens=True)

print(response)
“`
这给了你更大的灵活性来集成到自己的应用中。

6.2 合并 Adapter 权重到基础模型

为了方便部署,有时需要将 LoRA Adapter 的权重“烘焙”或合并到原始的基础模型权重中,形成一个完整的微调后的模型文件。这样推理时就不再需要分别加载基础模型和 Adapter。

Llama Factory 提供了 src/export_model.py 脚本来完成这个操作。

bash
python src/export_model.py \
--model_name_or_path ./models/ChatGLM3-6B \
--adapter_name ./output/chatglm3-6b-lora-alpaca_zh \
--export_dir ./merged_models/chatglm3-6b-alpaca_zh-merged \
--export_merge_lora \
--export_legacy_format false # 或 true 根据需要选择保存格式

参数解析:

  • --model_name_or_path: 原始基础模型的路径。
  • --adapter_name: 微调后 Adapter 权重的路径。
  • --export_dir: 指定合并后模型的保存目录。
  • --export_merge_lora: 启用合并 LoRA 权重的功能。
  • --export_legacy_format: 控制导出的模型格式。false 导出为标准的 Hugging Face 格式(推荐),true 导出为旧的 Llama Factory 格式。

合并后的模型将保存在 --export_dir 指定的目录下,你可以像加载普通 Hugging Face 模型一样加载它进行推理。注意,合并后的模型文件大小会接近原始基础模型的大小。

第七章:进阶应用与技巧

  • 自定义数据集: 如果你的数据格式与内置数据集不同,需要在 data/dataset_info.json 中添加配置,并可能需要编写相应的数据加载和预处理函数。参考 Llama Factory 的数据集文档。
  • 多 GPU/分布式训练: Llama Factory 支持使用 acceleratedeepspeed 进行多卡或分布式训练,这对于微调大型模型非常重要。配置方法通常涉及运行 accelerate configdeepspeed --hostfile ... 等命令,然后使用 accelerate launch src/train_bash.py ...deepspeed src/train_bash.py ... 启动训练。
  • 评估 (Evaluation): 在 Web UI 或 CLI 中配置评估数据集 (--do_eval, --dataset_dir, --dataset) 可以在训练过程中或结束后对模型进行评估,了解模型在特定任务上的表现。
  • 其他 PEFT 方法: 尝试使用 LoHa, AdaLoRA 等其他 PEFT 方法,比较它们在你的任务上的效果。
  • 其他微调阶段: 探索 DPO 等对齐方法,让你的模型生成更安全、有用、符合人类偏好的响应。
  • 超参数调优: 学习率、批量大小、LoRA 秩等都是关键超参数,它们的设置对微调效果影响很大。可能需要进行实验来找到最优配置。
  • 监控与可视化: 利用 plot_loss 参数生成损失曲线。对于更高级的监控,可以考虑集成 TensorBoard 或 Weights & Biases。
  • 内存优化: 如果遇到显存不足问题,除了 QLoRA 和降低批量大小、梯度累积外,还可以尝试使用 AdamW 优化器的 8bit 版本 (--optim adafactor--optim adamw_8bit),或者探索 Deepspeed 的 ZeRO 优化器。

第八章:常见问题与故障排除

  • 显存不足 (Out of Memory): 这是最常见的问题。
    • 尝试使用 QLoRA (4bit 量化)。
    • 降低 per_device_train_batch_size
    • 增加 gradient_accumulation_steps
    • 减小 LoRA 秩 (lora_rank)。
    • 使用更小的模型。
    • 使用 FP16 或 BF16 混合精度。
    • 检查是否有其他程序占用了 GPU 显存。
  • 数据集格式错误: 确保你的自定义数据集文件路径正确,并且格式符合 Llama Factory 的要求或你在 dataset_info.json 中的定义。
  • 依赖问题: 确保所有依赖,特别是 PyTorch 及其 CUDA 版本,与你的硬件和 Llama Factory 的要求兼容。有时需要手动指定 PyTorch 的安装源和版本。
  • 模型加载错误: 确保 --model_name_or_path 指向的模型是完整的(所有分片文件都已下载),并且与 Llama Factory 支持的模型类型匹配。
  • 训练不收敛:
    • 检查学习率是否合适,可能太高或太低。
    • 增加训练 epoch 或步数。
    • 检查数据集质量,确保数据格式正确且指令与响应匹配。
    • 调整 LoRA 参数 (rank, alpha, dropout)。
  • 寻求帮助: 如果遇到难以解决的问题,可以查阅 Llama Factory 的官方 GitHub 仓库的 Issue 页面,或者在相关的技术社区、论坛提问。提供详细的错误信息、你的环境配置和运行命令有助于他人帮助你。

总结

Llama Factory 是一个功能强大、易于使用的开源工具,极大地降低了大型语言模型微调的技术门槛。通过本指南,你应该已经了解了如何安装 Llama Factory,掌握了核心概念,并学会了如何通过命令行和 Web UI 进行基本的监督式微调。

LLM 领域发展迅速,PEFT 技术也在不断进步。Llama Factory 作为一个活跃更新的项目,会持续集成最新的研究成果。鼓励你继续探索 Llama Factory 的更多功能,例如 DPO 训练、多卡分布式训练、使用自定义模型和数据集等。

精调模型是一个迭代的过程,需要根据具体任务和数据进行多次尝试和调优。Llama Factory 提供的便利工具将是你在这一旅程中的得力助手。现在,就动手开始你的 LLM 微调之旅吧!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部