大模型微调指南之 LLaMA-Factory 篇:一键启动LLaMA系列模型高效微调

文章目录

    • 一、简介
    • 二、如何安装
      • 2.1 安装
      • 2.2 校验
    • 三、开始使用
      • 3.1 可视化界面
      • 3.2 使用命令行
        • 3.2.1 模型微调训练
        • 3.2.2 模型合并
        • 3.2.3 模型推理
        • 3.2.4 模型评估
    • 四、高级功能
      • 4.1 分布训练
      • 4.2 DeepSpeed
        • 4.2.1 单机多卡
        • 4.2.2 多机多卡
    • 五、日志分析

一、简介

LLaMA-Factory 是一个用于训练和微调模型的工具。它支持全参数微调、LoRA 微调、QLoRA 微调、模型评估、模型推理和模型导出等功能。

二、如何安装

2.1 安装

# 构建虚拟环境
conda create -n llamafactory python=3.10 -y && conda activate llamafactory
# 下载仓库
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
# 安装
pip install -e .

2.2 校验

llamafactory-cli version

三、开始使用

3.1 可视化界面

# 启动可视化界面
llamafactory-cli webui

webUI
WebUI 主要分为四个界面:训练、评估与预测、对话、导出。

  • 训练:
    • 在开始训练模型之前,您需要指定的参数有:
    • 模型名称及路径
    • 训练阶段
    • 微调方法
    • 训练数据集
    • 学习率、训练轮数等训练参数
    • 微调参数等其他参数
    • 输出目录及配置路径

随后,点击 开始 按钮开始训练模型。

备注:
关于断点重连:适配器断点保存于 output_dir 目录下,请指定 检查点路径 以加载断点继续训练。
如果需要使用自定义数据集,需要在 data/data_info.json 中添加自定义数据集描述并确保 数据集格式 正确,否则可能会导致训练失败。

  • 评估预测

    • 模型训练完毕后,可以通过在评估与预测界面通过指定 模型检查点路径 在指定数据集上进行评估。
  • 对话

    • 通过在对话界面指定 模型检查点路径推理引擎 后输入对话内容与模型进行对话观察效果。
  • 导出

    • 如果对模型效果满意并需要导出模型,您可以在导出界面通过指定 模型检查点路径分块大小导出量化等级校准数据集导出设备导出目录 等参数后点击 导出 按钮导出模型。

3.2 使用命令行

3.2.1 模型微调训练

examples/train_lora 目录下有多个LoRA微调示例,以 llama3_lora_sft.yaml 为例,命令如下:

llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml

备注:
LLaMA-Factory 默认使用所有可见的计算设备。根据需求可通过 CUDA_VISIBLE_DEVICESASCEND_RT_VISIBLE_DEVICES 指定计算设备。

参数说明:

名称描述
model_name_or_path模型名称或路径(指定本地路径,或从 huggingface 上下载)
stage训练阶段,可选: rm(reward modeling), pt(pretrain), sft(Supervised Fine-Tuning), PPO, DPO, KTO, ORPO
do_traintrue用于训练, false用于评估
finetuning_type微调方式。可选: freeze, lora, full
lora_target采取LoRA方法的目标模块,默认值为 all。
dataset使用的数据集,使用”,”分隔多个数据集
template数据集模板,请保证数据集模板与模型相对应。
output_dir输出路径
logging_steps日志输出步数间隔
save_steps模型断点保存间隔
overwrite_output_dir是否允许覆盖输出目录
per_device_train_batch_size每个设备上训练的批次大小
gradient_accumulation_steps梯度积累步数
max_grad_norm梯度裁剪阈值
learning_rate学习率
lr_scheduler_type学习率曲线,可选 linear, cosine, polynomial, constant 等。
num_train_epochs训练周期数
bf16是否使用 bf16 格式
warmup_ratio学习率预热比例
warmup_steps学习率预热步数
push_to_hub是否推送模型到 Huggingface

目录说明:

  • examples/train_full:包含多个全参数微调示例。
  • examples/train_lora:包含多个LoRA微调示例。
  • examples/train_qlora:包含多个QLoRA微调示例。
3.2.2 模型合并

examples/merge_lora 目录下有多个模型合并示例,以 llama3_lora_sft.yaml 为例,命令如下:

llamafactory-cli export examples/merge_lora/llama3_lora_sft.yaml

adapter_name_or_path 需要与微调中的适配器输出路径 output_dir 相对应。
export_quantization_bit 为导出模型量化等级,可选 2, 3, 4, 8。

目录说明:

  • examples/merge_lora:包含多个LoRA合并示例。
3.2.3 模型推理

examples/inference 目录下有多个模型推理示例,以 llama3_lora_sft.yaml 为例,命令如下:

llamafactory-cli chat examples/inference/llama3_lora_sft.yaml

参数说明:

名称描述
model_name_or_path模型名称或路径(指定本地路径,或从HuggingFace Hub下载)
adapter_name_or_path适配器检查点路径(用于LoRA等微调方法的预训练适配器)
template对话模板(需与模型架构匹配,如LLaMA-2、ChatGLM等专用模板)
infer_backend推理引擎(可选:vllm、transformers、lightllm等)
3.2.4 模型评估
  1. 通用能力评估

    llamafactory-cli eval examples/train_lora/llama3_lora_eval.yaml
    
  2. NLG 评估

    llamafactory-cli train examples/extras/nlg_eval/llama3_lora_predict.yaml
    

    获得模型的 BLEUROUGE 分数以评价模型生成质量。

  3. 评估相关参数

参数名称类型描述默认值可选值/备注
taskstr评估任务名称-mmlu_test, ceval_validation, cmmlu_test
task_dirstr评估数据集存储目录“evaluation”相对或绝对路径
batch_sizeint每个GPU的评估批次大小4根据显存调整
seedint随机种子(保证可复现性)42-
langstr评估语言“en”en(英文), zh(中文)
n_shotintFew-shot学习使用的示例数量50表示zero-shot
save_dirstr评估结果保存路径NoneNone时不保存
download_modestr数据集下载模式DownloadMode.REUSE_DATASET_IF_EXISTS存在则复用,否则下载

四、高级功能

4.1 分布训练

LLaMA-Factory 支持 单机多卡多机多卡 分布式训练。同时也支持 DDP , DeepSpeedFSDP 三种分布式引擎。

  • DDP (DistributedDataParallel) 通过实现模型并行和数据并行实现训练加速。 使用 DDP 的程序需要生成多个进程并且为每个进程创建一个 DDP 实例,他们之间通过 torch.distributed 库同步。
  • DeepSpeed 是微软开发的分布式训练引擎,并提供 ZeRO(Zero Redundancy Optimizer)offloadSparse Attention1 bit Adam流水线并行 等优化技术。
  • FSDP 通过全切片数据并行技术(Fully Sharded Data Parallel)来处理更多更大的模型。在 DDP 中,每张 GPU 都各自保留了一份完整的模型参数和优化器参数。而 FSDP 切分了模型参数、梯度与优化器参数,使得每张 GPU 只保留这些参数的一部分。 除了并行技术之外,FSDP 还支持将模型参数卸载至CPU,从而进一步降低显存需求。
引擎数据切分模型切分优化器切分参数卸载
DDP支持不支持不支持不支持
DeepSpeed支持支持支持支持
FSDP支持支持支持支持

4.2 DeepSpeed

由于 DeepSpeed 的显存优化技术,使得 DeepSpeed 在显存占用上具有明显优势,因此推荐使用 DeepSpeed 进行训练。
DeepSpeed 是由微软开发的一个开源深度学习优化库,旨在提高大模型训练的效率和速度。在使用 DeepSpeed 之前,您需要先估计训练任务的显存大小,再根据任务需求与资源情况选择合适的 ZeRO 阶段。

  • ZeRO-1: 仅划分优化器参数,每个GPU各有一份完整的模型参数与梯度。
  • ZeRO-2: 划分优化器参数与梯度,每个GPU各有一份完整的模型参数。
  • ZeRO-3: 划分优化器参数、梯度与模型参数。
    简单来说:从 ZeRO-1ZeRO-3,阶段数越高,显存需求越小,但是训练速度也依次变慢。此外,设置 offload_param=cpu 参数会大幅减小显存需求,但会极大地使训练速度减慢。因此,如果您有足够的显存, 应当使用 ZeRO-1,并且确保 offload_param=none
4.2.1 单机多卡

启动 DeepSpeed 引擎,命令如下:

FORCE_TORCHRUN=1 llamafactory-cli train examples/train_full/llama3_full_sft_ds3.yaml

该配置文件中配置了 deepspeed 参数,具体如下:

deepspeed: examples/deepspeed/ds_z3_config.json
4.2.2 多机多卡
FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=0 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 llamafactory-cli train examples/train_lora/llama3_lora_sft_ds3.yaml
FORCE_TORCHRUN=1 NNODES=2 NODE_RANK=1 MASTER_ADDR=192.168.0.1 MASTER_PORT=29500 llamafactory-cli train examples/train_lora/llama3_lora_sft_ds3.yaml

备注

  • 关于hostfile:
    hostfile的每一行指定一个节点,每行的格式为 slots=<num_slots> , 其中 是节点的主机名, <num_slots> 是该节点上的GPU数量。下面是一个例子:

    worker-1 slots=4
    worker-2 slots=4
    

    请在 https://www.deepspeed.ai/getting-started/ 了解更多。

  • 如果没有指定 hostfile 变量, DeepSpeed 会搜索 /job/hostfile 文件。如果仍未找到,那么 DeepSpeed 会使用本机上所有可用的GPU。

五、日志分析

在训练过程中,LLaMA-Factory 会输出详细的日志信息,包括训练进度、训练参数、训练时间等。这些日志信息可以帮助我们更好地了解训练过程,并针对问题进行优化和调整。以下解释训练时的一些参数:

[INFO|trainer.py:2409] 2025-04-01 15:49:20,010 >> ***** Running training *****
[INFO|trainer.py:2410] 2025-04-01 15:49:20,010 >>   Num examples = 205
[INFO|trainer.py:2411] 2025-04-01 15:49:20,010 >>   Num Epochs = 1,000
[INFO|trainer.py:2412] 2025-04-01 15:49:20,010 >>   Instantaneous batch size per device = 8
[INFO|trainer.py:2415] 2025-04-01 15:49:20,010 >>   Total train batch size (w. parallel, distributed & accumulation) = 64
[INFO|trainer.py:2416] 2025-04-01 15:49:20,010 >>   Gradient Accumulation steps = 8
[INFO|trainer.py:2417] 2025-04-01 15:49:20,010 >>   Total optimization steps = 3,000
[INFO|trainer.py:2418] 2025-04-01 15:49:20,013 >>   Number of trainable parameters = 73,859,072

参数解释:

  1. 单设备批大小(Instantaneous batch size per device)

    • 指单个 GPU(或设备)在每次前向传播时处理的样本数量。
    • 例如,如果 instantaneous_batch_size_per_device=8,则每个 GPU 一次处理 8 条数据。
  2. 设备数(Number of devices)

    • 指并行训练的 GPU 数量(数据并行)。
    • 例如,使用 4 个 GPU 时,device_num=4
  3. 梯度累积步数(Gradient accumulation steps)

    • 由于显存限制,可能无法直接增大单设备批大小,因此通过多次前向传播累积梯度,再一次性更新参数。通过梯度累积,用较小的单设备批大小模拟大总批大小的训练效果。
    • 例如,若 gradient_accumulation_steps=2,则每 2 次前向传播后才执行一次参数更新。
  4. 总批大小(Total train batch size)

    • 参数更新时实际使用的全局批量大小。总批大小越大,梯度估计越稳定,但需调整学习率(通常按比例增大)

在 LLaMA Factory 中,总批大小(Total train batch size)单设备批大小(Instantaneous batch size per device)设备数(Number of devices)梯度累积步数(Gradient accumulation steps) 的关系可以用以下公式表示:

[
\text{总批大小} = \text{单设备批大小} \times \text{设备数} \times \text{梯度累积步数}
]

例如:

  • 单设备批大小 = 8
  • 设备数 = 4
  • 梯度累积步数 = 2
  • 则总批大小 = ( 8 \times 4 \times 2 = 64 )。

参考资料:
- Github
- README_zh.md
- 数据集文档
- 说明文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/80320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录一次window2012r2安装配置oracle11g的过程-出现的错误以及解决方法

Windows server 2012R2安装Oracle11g 出现的错误 同事反馈正常安装oracle后&#xff0c; 使用命令行 sqlplus sys / as sysdba出现“ORA-12560:TNS:协议适配器错误”。 去services.msc服务状态里面 OracleOraDb11g_home1TNSListener服务停止状态&#xff0c;而且无法启动。 …

2003-2020年高铁线路信息数据

2003-2020年高铁线路信息数据 1、时间&#xff1a;2003-2020年 2、来源&#xff1a;Chinese High-speed Rail and Airline Database&#xff0c;CRAD 3、指标&#xff1a;高铁线路名称、起点名、终点名、开通时间、线路长度(km)、设计速度(km/h&#xff09;、沿途主要车站 …

【论文阅读】FreePCA

FreePCA: Integrating Consistency Information across Long-short Frames in Training-free Long Video Generation via Principal Component Analysis 原文摘要 问题背景 核心挑战&#xff1a; 长视频生成通常依赖在短视频上训练的模型&#xff0c;但由于视频帧数增加会导致数…

Linux:线程同步与互斥

目录 线程互斥 锁 初始化 销毁 加锁 解锁 线程同步 条件变量 初始化 销毁 等待条件满足 唤醒等待 pthread_cond_signal pthread_cond_broadcast 生产者消费者模型 3种关系 2种角色 1个交易场所 POSIX信号量 初始化 销毁 等待 发布 线程互斥 互斥相关…

LeetCode --- 448 周赛

题目列表 3536. 两个数字的最大乘积 3537. 填充特殊网格 3538. 合并得到最小旅行时间 3539. 魔法序列的数组乘积之和 一、两个数字的最大乘积 由于数据都是正数&#xff0c;所以乘积最大的两个数&#xff0c;本质就是找数组中最大的两个数即可&#xff0c;可以排序后直接找到…

Azure Document Intelligence

Azure Document Intelligence(以前称为 Form Recognizer)是一项云服务&#xff0c;可用于从文档中提取文本、键值对、表等信息。下面是一个使用 Python SDK 进行文档转换和提取信息的基本示例。 1. 安装依赖 首先&#xff0c;你需要安装 azure-ai-formrecognizer 库&#xff0c…

51单片机快速成长路径

作为在嵌入式领域深耕18年的工程师&#xff0c;分享一条经过工业验证的51单片机快速成长路径&#xff0c;全程干货无注水&#xff1a; 一、突破认知误区&#xff08;新手必看&#xff09; 不要纠结于「汇编还是C」&#xff1a;现代开发90%场景用C&#xff0c;掌握指针和内存管…

SQLite数据库加密(Java语言、python语言)

1. 背景与需求 SQLite 是一种轻量级的关系型数据库,广泛应用于嵌入式设备、移动应用、桌面应用等场景。为了保护数据的隐私与安全,SQLite 提供了加密功能(通过 SQLCipher 扩展)。在 Java 中,可以使用 sqlite-jdbc 驱动与 SQLCipher 集成来实现 SQLite 数据库的加密。 本…

《AI大模型应知应会100篇》第53篇:Hugging Face生态系统入门

第53篇&#xff1a;Hugging Face生态系统入门 ——从模型获取到部署的全流程实战指南 &#x1f4cc; 摘要 在人工智能快速发展的今天&#xff0c;Hugging Face已成为自然语言处理&#xff08;NLP&#xff09;领域最具影响力的开源平台之一。它不仅提供丰富的预训练模型、强大…

什么是向量数据库?向量数据库和关系数据库有什么区别?

什么是向量数据库&#xff1f; 向量数据库是一种专门设计用来存储、索引和查询向量数据的数据库系统。在当今的人工智能和机器学习领域中&#xff0c;向量数据库变得越来越重要&#xff0c;尤其是在处理高维数据如图像、音频和文本等非结构化数据时。 主要用途 相似度搜索&…

关于甲骨文(oracle cloud)丢失MFA的解决方案

前两年&#xff0c;申请了一个招商的多币种信用卡&#xff0c;然后就从网上撸了一个oracle的免费1h1g的服务器。 用了一段时间&#xff0c;人家要启用MFA验证。 啥叫MFA验证&#xff0c;类似与短信验证吧&#xff0c;就是绑定一个手机&#xff0c;然后下载一个app&#xff0c;每…

基于Arduino Nano的DIY示波器

基于Arduino Nano的DIY示波器&#xff1a;打造属于你的口袋实验室 前言 在电子爱好者的世界里&#xff0c;示波器是不可或缺的工具之一。它能够帮助我们观察和分析各种电子信号的波形&#xff0c;从而更好地理解和调试电路。然而&#xff0c;市面上的示波器价格往往较高&…

LeetCode 解题思路 47(最长回文子串、最长公共子序列)

解题思路&#xff1a; dp 数组的含义&#xff1a; dp[i][j] 是否为回文子串。递推公式&#xff1a; dp[i][j] s.charAt(i) s.charAt(j) && dp[i 1][j - 1]。dp 数组初始化&#xff1a; 单字符 dp[i][i] true&#xff0c;双字符 dp[i][i 1] s.charAt(i) s.charA…

通过管道实现C++ Linux独立进程之间的通信和字符串传递

在Linux环境下&#xff0c;独立进程之间的通信&#xff08;IPC&#xff09;可以通过多种方式实现&#xff0c;包括管道、消息队列、共享内存和套接字。本文将详细介绍如何使用管道&#xff08;pipe&#xff09;在C中实现独立进程之间的通信&#xff0c;并传递字符串。 一、管道…

神经网络极简入门技术分享

1. 引言 神经网络是深度学习的基础&#xff0c;其设计灵感来源于人脑神经元的结构和工作方式。尽管现代神经网络已经变得异常复杂&#xff0c;但其核心原理却相对简单易懂。本报告旨在通过剖析神经网络的最基本单元——神经元&#xff0c;帮助初学者理解神经网络的工作原理。 …

五、Hadoop集群部署:从零搭建三节点Hadoop环境(保姆级教程)

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月7日 专栏&#xff1a;Hadoop教程 前言&#xff1a; 想玩转大数据&#xff0c;Hadoop集群是绕不开的一道坎。很多小伙伴一看到集群部署就头大&#xff0c;各种配置、各种坑。别慌&#xff01;这篇教程就是你的“救生圈”。 …

科研项目管理:4款高效工具推荐与效率提升实践

一般来说&#xff0c;科研项目往往涉及复杂的任务、跨部门协作以及严格的时间和预算限制。传统的管理方式&#xff0c;如电子表格或邮件沟通&#xff0c;难以应对多任务并行、资源分配复杂的需求。借助现代项目管理工具&#xff0c;研究人员能够优化工作流程、提升团队协作效率…

如何统一修改word中所有英文字母的字体格式

1.需求分析 我想让整篇论文中的所有英文字母格式都修改为Time New Roman格式。 2.直观操作流程 点击左上角开始 --> 点击替换 --> 点击更多 --> 点击特殊格式 --> 选择查找内容为任意字母(Y) --> 将光标点到替换内容 --> 点击格式 --> 点击字体 --> …

【疑难杂症2025-003】Java-mvn项目在gitlab-ci构建镜像时遇到的问题和解决方案

本文由Markdown语法编辑器编辑完成&#xff0e; 1.背景: 之前从同事手里接手了一个java的项目&#xff0c;是用maven构建项目的&#xff0e;由于我们的服务都是基于docker来部署的&#xff0c;因此这个java项目也是要编译成docker image然后发布&#xff0e;但是之前一直都是…

【RT-Thread Studio】nor flash配置Fal分区

前置条件&#xff1a;【RT-Thread Studio】W25Q128配置 添加 FAL软件包 配置SFUD驱动程序&#xff0c;使用FAL的设备为W25Q128 将fal_cfg.h和fal_flash_sfud_port.c提取出来&#xff0c;放到自己创建的fal_porting目录。 修改 fal_flash_sfud_port.c struct fal_flash_dev n…