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 的 transformers
和 peft
库构建的统一高效的 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 或更高版本。建议使用虚拟环境(如
venv
或conda
)来隔离项目依赖。 - Git: 用于克隆 Llama Factory 仓库。
- Conda (可选但推荐): 方便管理 Python 环境和依赖。
2.3 安装步骤
建议通过 Git 克隆仓库并使用 Poetry 或 Pip 进行安装。
方法一:使用 Poetry (推荐)
-
安装 Poetry (如果未安装):
bash
curl -sSL https://install.python-poetry.org | python3 -
安装完成后,可能需要重启终端或将 Poetry 的 bin 目录添加到 PATH。 -
克隆 Llama Factory 仓库:
bash
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory -
安装依赖 (包括 PyTorch):
进入 LLaMA-Factory 目录后,根据你的 CUDA 版本选择安装命令。- 如果 CUDA 版本是 11.x:
bash
poetry install --with torch11 - 如果 CUDA 版本是 12.x 或更高:
bash
poetry install --with torch12
Poetry 会自动创建虚拟环境并安装所有依赖,包括指定版本的 PyTorch。
- 如果 CUDA 版本是 11.x:
方法二:使用 Pip
-
克隆 Llama Factory 仓库:
bash
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory -
创建并激活虚拟环境 (推荐):
bash
python3 -m venv .venv
source .venv/bin/activate
或者使用 conda:
bash
conda create -n llama-factory python=3.10 -y
conda activate llama-factory -
安装依赖:
首先安装核心依赖:
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 准备工作
-
下载模型: 从 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 系列模型通常需要申请权限。 -
准备数据集: 使用 Llama Factory 内置的数据集,或者准备符合要求格式的自定义数据集。内置数据集如
alpaca_zh
,belle_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 的基本流程:
-
打开 Web UI: 在浏览器中访问启动脚本输出的地址。
-
Model Tab:
- 在 “Model Name” 下拉列表中选择你下载或想使用的模型(Llama Factory 会尝试自动检测本地模型或从 Hugging Face 加载)。如果模型不在列表中,可以手动输入 Hugging Face ID 或本地路径。
- 如果使用量化,勾选 “Quantization Bit” 并选择 4 或 8。
- 其他高级加载选项根据需要配置。
-
Dataset Tab:
- 在 “Dataset” 下拉列表中选择一个内置数据集(如
alpaca_zh
)。 - 如果使用自定义数据集,勾选 “Custom Dataset” 并指定文件路径和格式。
- 在 “Dataset” 下拉列表中选择一个内置数据集(如
-
Stage Tab:
- 在 “Stage” 下拉列表中选择 “Supervised Fine-Tuning (SFT)”。
-
PEFT Tab:
- 在 “Fine-Tuning Method” 下拉列表中选择 “LoRA” (如果选择量化,会自动变成 QLoRA)。
- 配置 LoRA 参数,如 “LoRA Rank (r)” (推荐 8 或 16), “LoRA Alpha” (推荐 16 或 32), “LoRA Dropout” (推荐 0.05)。
-
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” (如
fp16
或bf16
) 以启用混合精度训练。 - 点击页面底部的 “Preview Command” 可以预览即将执行的命令行命令,这有助于理解参数。
- 点击 “Start Training” 按钮开始训练。
-
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:
-
加载模型和 Adapter:
- 在 “Model Name” 选择原始模型。
- 在 “Adapter Name” 选择你的微调输出目录。
- 如果使用了量化,勾选并选择对应的位数。
- 点击 “Load Model” 按钮加载模型。
-
进行对话:
- 在左侧的对话框中输入你的指令。
- 点击 “Generate” 或按回车发送。模型将在右侧生成响应。
- 你可以在右侧调整生成参数,如 Temperature, Top P, Max New Tokens 等。
方法三:手动加载 (使用 Transformers 和 PEFT 库)
Llama Factory 的 Adapter 权重兼容 Hugging Face PEFT 库。你可以使用标准的 transformers
和 peft
代码来加载和使用:
“`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 支持使用
accelerate
或deepspeed
进行多卡或分布式训练,这对于微调大型模型非常重要。配置方法通常涉及运行accelerate config
或deepspeed --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 微调之旅吧!