使用 LLaMA-Factory 训练和微调 Llama3 构建专属 AI 模型
引言
本文将详细介绍如何使用 LLaMA-Factory 工具在低成本云 GPU 上对 Llama3 模型进行微调。通过简单的步骤和代码,开发者可以高效地定制大语言模型,使其适应特定任务或数据集。
什么是模型微调?
微调(Fine-tuning)涉及调整预训练基础模型的参数,使其能够用于特定任务或数据集,从而提升性能和准确性。该过程包括为模型提供新数据,并修改其权重、偏差和部分参数以最小化损失。通过微调,新模型可以在新任务上表现良好,而无需从头开始训练,从而节省时间和资源。
通常,大型语言模型(LLM)在创建时会在大型文本语料库上进行预训练。虽然预训练后通常会加入安全措施,但微调的概念解决了适应特定业务需求的要求,确保模型输出符合特定场景的规范。
为什么使用 LLaMA-Factory?
LLaMA-Factory 是一款能够高效且经济地微调 100 多个模型的工具。它简化了微调过程,使其易于访问和用户友好。主要优势包括:
- 支持多种模型:支持不同版本的 Llama、Mistral、Falcon 等主流开源模型。
- 算法丰富:支持 SFT(监督微调)、DPO(直接偏好优化)、ORPO、PPO 等多种先进算法。
- 资源优化:支持 LoRA、GaLore 配置以减少 GPU 显存占用,支持 QLoRA 量化技术。
- 界面友好:提供 LLAMABOARD 统一界面,支持 TensorBoard、MLflow 等监控工具集成。
- 推理加速:支持 Gradio 和 CLI 接口,便于快速部署和测试。
环境搭建与依赖安装
我们推荐使用 NVIDIA A4000 或类似性能的 GPU 进行实验。以下是在 Paperspace 等云平台上的标准操作流程。
1. 克隆代码库
首先,克隆 LLaMA-Factory 官方仓库并进入目录。
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
ls
2. 安装依赖包
为了有效微调模型,我们需要安装 Unsloth、xformers 和 bitsandbytes 等关键库。
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
pip install --no-deps xformers==0.0.25
pip install .[bitsandbytes]
pip install 'urllib3<2'
3. 检查 GPU 规格
确认 CUDA 环境已正确配置。
import torch
try:
assert torch.cuda.is_available() is True
except AssertionError:
print("Your GPU is not setup!")
print(f"CUDA Version: {torch.version.cuda}")
WebUI 操作指南
LLAMABOARD 是 LLaMA-Factory 提供的用户友好界面,无需编程即可调整模型参数。
启动 WebUI
执行以下命令生成 Web 应用链接:
cd /notebooks/LLaMA-Factory
GRADIO_SHARE=1 llamafactory-cli webui
点击生成的链接后,可按照提示操作。主要配置项包括:
- 模型选择:选择目标基座模型(如 Llama-3-8B-Instruct)。
- 适配器配置:指定 LoRA、QLoRA、freeze 或 full 微调类型。
- 训练选项:设置监督微调(SFT)或其他阶段。
- 数据集选择:上传自定义数据集或使用内置数据集(如 identity, alpaca_gpt4_en)。
- 超参数配置:调整训练轮数、学习率、批量大小等。
命令行配置详解
对于更精细的控制,建议使用 JSON 配置文件配合 CLI 命令。
训练参数配置
创建一个 train_llama3.json 文件,内容如下:
{
"stage": "sft",
"do_train": true,
"model_name_or_path": "unsloth/llama-3-8b-Instruct-bnb-4bit",
"dataset": "identity,alpaca_gpt4_en",
"template": "llama3",
"finetuning_type": "lora",
"lora_target": "all",
"output_dir": "llama3_lora",
"per_device_train_batch_size": 2,
"gradient_accumulation_steps": 4,
"lr_scheduler_type": "cosine",
"logging_steps": 10,
"warmup_ratio": 0.1,
"save_steps": 1000
参数说明:
stage: 设置为 sft 进行监督微调。
model_name_or_path: 指定预训练模型路径,此处使用 4-bit 量化的 Llama-3-8B-Instruct 以节省显存。
dataset: 指定使用的数据集名称,支持多数据集组合。
finetuning_type: 设置为 lora 以使用低秩适配,大幅降低显存需求。
quantization_bit: 设置为 4 启用 QLoRA 量化技术。
use_unsloth: 启用 UnslothAI 优化,可加速约 2 倍训练速度。
fp16: 使用 float16 混合精度训练,平衡速度与精度。
执行训练
在终端中运行以下命令启动训练:
llamafactory-cli train train_llama3.json
系统将自动加载配置并开始训练过程,日志将实时显示损失值和评估指标。
模型推理与测试
训练完成后,可以使用保存的 LoRA 适配器进行推理测试。
推理配置
创建 infer_llama3.json 文件:
{
"model_name_or_path": "unsloth/llama-3-8b-Instruct-bnb-4bit",
"adapter_name_or_path": "llama3_lora",
"finetuning_type": "lora",
"template": "llama3",
"quantization_bit": 4,
"use_unsloth": true
}
启动对话
运行以下命令进入交互模式:
llamafactory-cli chat infer_llama3.json
在此模式下,用户可以输入问题,模型将基于微调后的知识进行回答。建议尝试不同的 Prompt 以验证模型效果。
结论
有效的微调是大语言模型适应特定任务的必要条件。LLaMA-Factory 提供了一个综合框架,整合了先进的训练技术,让用户无需编写复杂代码即可微调超过 100 种 LLM。通过本文介绍的步骤,您可以利用低成本 GPU 资源,快速构建并部署专属的大语言模型。在使用时,请遵守相关模型许可证规定,确保合规使用。