跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

大模型微调实战:基于 LLaMA-Factory 的 LoRA 微调指南

如何使用 LLaMA-Factory 框架对大语言模型进行 LoRA 微调。内容涵盖 Base、Chat、Instruct 模型的区别,环境配置步骤,模型下载方法,以及基于 identity.json 数据集的自定义微调流程。文章提供了完整的命令行操作示例,包括推理测试、训练参数详解及结果验证,并补充了显存优化与常见问题排查方案,适合希望掌握大模型微调技术的开发者参考。

追风少年发布于 2025/2/6更新于 2026/9/1274 浏览
大模型微调实战:基于 LLaMA-Factory 的 LoRA 微调指南

引言

在人工智能领域,大模型微调是一个热门话题,尤其是在自然语言处理(NLP)领域。本文将介绍大模型中的 instruct、chat 和 base 模型的不同点,探讨常见的微调框架,并详细介绍使用 LLaMA-Factory 进行微调的步骤。

1. 大模型类型介绍

1.1 Base 模型

Base 模型,也称为基座模型,是在大量无标注数据上进行预训练的模型,学习到广泛的语言特征。这些模型具有大规模预训练、泛化能力强和可微调性等特点。

1.2 Chat 模型

Chat 模型专为处理人机交互而设计,能够理解上下文,维持对话历史,生成连贯且情境相关的响应。这类模型的特点是上下文感知、互动性和创意生成。ChatGPT 就是一个典型的 chat 模型。

1.3 Instruct 模型

Instruct 模型是为遵循指令或完成特定任务而设计和优化的模型。它们经过指令数据集微调,能够更好地理解和执行用户提供的指令。

2. 常见微调框架

在微调大模型时,有多种框架可供选择。以下是一些常见的微调框架:

  • LoRA:一种基于低阶自适应的大语言模型微调方法,模拟全量微调的效果。
  • PEFT:围绕部分参数进行微调的方法,目前比较常用。
  • RLHF:基于强化学习的微调方法,由 OpenAI 团队提出。

3. 微调工具选择

本文选择使用的微调框架是 LLaMA-Factory,这是一个开源的低代码大模型训练框架,专为大型语言模型(LLMs)的微调而设计。它具有高效且低成本、易于访问和使用、丰富的数据集选项、多样化的算法支持等特点。

4. 环境配置

4.1 硬件与驱动

首先,需要确定一下显卡驱动和 CUDA是否已安装完成。如果有同学确实是不会安装,建议查阅相关教程。可以使用以下命令进行一个简单的校验:

nvidia-smi

会出现如下输出,显示 GPU 的当前状况与一些配置信息。

4.2 相关依赖

现在我们需要下载本次微调所使用到的开源项目。

  1. 使用 git clone 进行项目下载:git clone https://github.com/hiyouga/LLaMA-Factory.git
  2. 下载完成后,使用cd命令进入LLaMA-Factory目录下:cd LLaMA-Factory
  3. 安装相关依赖。这一步有两种选择:
    • 第一种:如果你使用的是自己的电脑,或者说是在本地环境下,建议创建一个虚拟环境,避免破坏你原有的开发环境。推荐使用 conda。
    • 第二种:如果你是像我一样使用的云端开发环境,那你可以不去创建虚拟环境。在这大模型中微调操作中我是没有创建虚拟环境的。

此时假设你已经完成了上述两种判断,并且根据自己的情况进行了相应的操作。那么接下来可以使用该命令进行相关环境依赖的安装:pip install -e '.[torch,metrics]' --user。–user这个可加可不加,如果你拥有你开发环境的 root 权限,那就可以考虑不加。但是如果你是像我一样在云端平台进行操作的,那还是加上比较好。

执行完上面三步后,再使用如下命令进行一个校验:

  1. 在终端输入 Python ,或直接使用某个代码编译器均可,执行如下命令:
import torch
torch.cuda.current_device()
torch.cuda.get_device_name(0)
torch.__version__

若过程中未出现报错,并且输出结果正常,那么便算通过。

  1. 在终端输入 llamafactory-cli train -h,此过程未报错便算通过。

至此,基本的开发环境已经搭建完成。

5. 模型下载

下载模型方法有很多种。国内的小伙伴可以使用 ModelScope 的命令进行下载。不过在使用这个命令下载之前,各位还需要请确保 lfs 已经被正确安装:

git lfs install
git clone https://www.modelscope.cn/LLM-Research/Meta-Llama-3-8B-Instruct.git

这个命令会去 魔塔社区 下载 Meta-Llama-3-8B-Instruct 模型。在这里不给出 huggingface 相关下载方式了,相信你有能力访问它,就有能力去下载。如果你觉着自己的硬件不太行,那么咱可以用这个命令下载一个小一些的模型:

git clone https://www.modelscope.cn/Qwen/Qwen2.5-3B-Instruct-GPTQ-Int8.git

该命令会下载 Qwen2.5-3B-Instruct-GPTQ-Int8 模型,这个比上面那个 8B 的小多了。如果用这俩命令无法下载模型,那你可能是因为 lfs 没有正确安装。此时比较好的方法是在网上搜寻相关教程进行安装,如果懒得装,也可以考虑使用下面这两种方法:

  1. 使用命令行下载

    • 先安装 ModelScope:在终端输入 pip install modelscope
    • 安装完毕后,再在终端输入 modelscope download --model Qwen/Qwen2.5-3B-Instruct-GPTQ-Int8 安装 QWEN 模型,同理 Llama 模型也可以这么安装。
  2. 使用 SDK 下载

    • 在终端输入 python 或者打开一个代码编辑页面。运行下面代码
#模型下载
from modelscope import snapshot_download 
model_dir = snapshot_download('Qwen/Qwen2.5-3B-Instruct-GPTQ-Int8')
  1. 直接打开对应网站,手动进行下载(新手记得要下载全)。

下载完后记得检查一下模型下载是否完整,可以进入对应文件目录用 du -sh * 看一看。

6. 使用原始模型进行推理

我们先试一试不进行微调,直接用刚刚下载的模型进行推理会是什么结果,在终端输入如下命令。(这个命令比较有讲究,各位最好去仔细读一读):

llamafactory-cli chat \
    --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \
    --template llama3

所有功能的入口全都是 llamafactory-cli,然后根据你的不同要求,增减不同的参数,下面是部分命令表格(详细参数和教程可以查阅官方文档):

参数名称功能描述
model_name_or_path指定使用的模型名称或模型文件的路径。
chat启用命令行模式,允许用户通过命令行接口与模型交互。
webui启用 Web 界面模式,提供图形用户界面以方便用户操作。
finetuning_type选择微调方式,可选值为 freeze(冻结参数)、lora(LoRA 方法)和 full(全参数微调)。
lora_target设置采用 LoRA 方法的目标模块,如果未指定,则默认作用于所有模块(all)。
dataset指定使用的数据集,多个数据集可以用逗号','分隔。
template指定数据集模板,确保所选模板与模型兼容。
output_dir指定输出目录,用于保存训练结果和其他输出文件。

执行上述命令后,经过一系列的模型加载,最终会在终端出现信息。如果将命令中的 llamafactory-cli chat改成 llamafactory-cli webchat,那么就会有一个基于 gradio 开发的 ChatBot 推理页面,也就是所谓的网页版本。如果你是在本地进行部署,那么可以尝试使用 webchat,运行完后在终端可以看见对应的链接,点击或者复制再粘贴到浏览器打开即可。

7. 构建自定义数据集

目前 LLaMA-Factory 支持 JSON 格式的数据集。在这次微调训练中,我们使用 JSON 格式。这种 json 类型的训练数据格式如下:

{
  "instruction": "用户指令(必填)",
  "input": "用户输入(选填)",
  "output": "模型回答(必填)"
}
  • instruction:用户进行的一个要求,通常是对系统或模型的直接命令,指示它需要执行的具体任务或动作。
  • input:系统接收到的数据或信息,这是执行指令所需的原材料。输入可以是文本、图像、音频或其他任何形式的数据,具体取决于指令的性质和系统的处理能力。
  • output:系统处理输入后产生的结果。输出是指令执行的直接产物,可以是分析结果、生成的文本、修改后的图像或任何其他形式的响应。

本次教程我们简单对大模型的自我认知进行一个微调,我们可以在 LLaMA-Factory 文件目录下的 data 文件目录中找到 identity.json 文件,这个是系统自带的数据集 (已经默认在 LLaMA-Factory/data/dataset_info.json 注册为 identity)。

接下来我们进行一个文本替换:

如果是 Windows 用户,那么你需要手动使用编辑器打开 identity.json 文件,然后找到替换其中的 NAME 和 AUTHOR。

如果是 Linux 用户,那么可以使用 sed 完成快速替换:

sed -i 's/{{name}}/刚刚微调出来的模型/g' data/identity.json
sed -i 's/{{author}}/开发者/g' data/identity.json

替换前:

{
 "instruction": "Who are you?",
 "input": "",
 "output": "Hello! I am {{name}}, an AI assistant developed by {{author}}. How can you assist you today?"
}

替换后:

{
 "instruction": "Who are you?",
 "input": "",
 "output": "Hello! I am 刚刚微调出来的模型,an AI assistant developed by 开发者。How can you assist you today?"
}

至此,微调之前的准备工作都已经做完了。

8. 开始微调

在构建微调数据集的时候已经说明了,本次是使用指令监督微调,然后为了尽量减少对硬件的要求,咱们用的是 LoRA。在终端输入:

llamafactory-cli train \
    --stage sft \
    --do_train \
    --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \
    --dataset identity \
    --dataset_dir ./data \
    --template llama3 \
    --finetuning_type lora \
    --output_dir ./saves/LLaMA3-8B/lora/sft \
    --overwrite_cache \
    --overwrite_output_dir \
    --cutoff_len 1024 \
    --preprocessing_num_workers 16 \
    --per_device_train_batch_size 2 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 8 \
    --lr_scheduler_type cosine \
    --logging_steps 50 \
    --warmup_steps 20 \
    --save_steps 100 \
    --eval_steps 50 \
    --evaluation_strategy steps \
    --load_best_model_at_end \
    --learning_rate 5e-5 \
    --num_train_epochs 5.0 \
    --max_samples 1000 \
    --val_size 0.1 \
    --plot_loss \
    --fp16
参数名称功能描述
stage表示当前训练阶段的枚举值,包括 sft(有监督指令微调)、pt、rm、ppo 等。在我们的案例中,我们关注的是有监督指令微调阶段,即 sft。
do_train指示是否处于训练模式。
dataset指定使用的数据集列表,所有数据集必须在 data_info.json 中注册,多个数据集以逗号','分隔。本次微调仅使用了 identity.json 文件。
dataset_dir指定数据集所在的目录路径,本例中为 data,即项目内嵌的 data 目录。
finetuning_type微调训练的类型,可选枚举值包括 lora(低秩适应)、full(全参数微调)和 freeze(冻结参数)。本例中使用的是 lora。
output_dir指定训练结果的保存路径。
cutoff_len定义训练数据集的长度截断阈值。
per_device_train_batch_size设置每个设备上的训练批次大小(batch size),最小值为 1。如果 GPU 显存充足,可以适当增加以提高训练效率。
fp16启用半精度混合精度训练,以加速训练过程并减少显存占用。
max_samples定义每个数据集中采样的数据量。
val_size指定从数据集中随机抽取的比例,用作验证集。

特别注意 V100 无法支持 bf16,望周知。

终端输出下面信息即代表微调结束。从结果来看,微调是成功的。关键指标如下:

  • eval_loss = 1.7783:这是评估集上的损失值,表明模型在评估数据上的性能,数值越低越好。
  • eval_samples_per_second 和 eval_steps_per_second:表明评估的效率。
  • 日志中未丢失必要字段:task 信息明确,微调的任务类型为因果语言建模。

9. 合并 LoRA 进行模型推理

当训练结束后,咱可以进行一下验证,在终端输入:

CUDA_VISIBLE_DEVICES=0 llamafactory-cli chat \
    --model_name_or_path /path/to/Meta-Llama-3-8B-Instruct \
    --adapter_name_or_path ./saves/LLaMA3-8B/lora/sft  \
    --template llama3 \
    --finetuning_type lora

接下来各位同学可以查看下微调后的效果。微调后的模型应该能识别出新的身份信息。

10. 常见问题排查

如果在训练过程中遇到显存不足的问题,可以尝试以下调整:

  1. 减小 per_device_train_batch_size。
  2. 开启梯度累积 gradient_accumulation_steps。
  3. 使用更小的模型或量化版本(如 Int8 或 FP16)。
  4. 检查 cutoff_len 是否过大,适当降低序列长度。

此外,确保 --fp16 参数与你的显卡架构兼容,部分旧架构可能不支持,需改用 bf16 或 fp32。

目录

  1. 引言
  2. 1. 大模型类型介绍
  3. 1.1 Base 模型
  4. 1.2 Chat 模型
  5. 1.3 Instruct 模型
  6. 2. 常见微调框架
  7. 3. 微调工具选择
  8. 4. 环境配置
  9. 4.1 硬件与驱动
  10. 4.2 相关依赖
  11. 5. 模型下载
  12. 6. 使用原始模型进行推理
  13. 7. 构建自定义数据集
  14. 8. 开始微调
  15. 9. 合并 LoRA 进行模型推理
  16. 10. 常见问题排查

更多推荐文章

查看全部
  • MATLAB 与 Python 混合编程实战:原理、代码与部署
  • Mac Mini 部署 OpenClaw 本地 AI 智能体指南
  • Python 云音乐播放平台 Flask Bootstrap 管理系统
  • 百度 AI 开放计划:通过 MCP Server 连接用户与应用
  • PyTorch-CUDA v2.7 镜像部署 Stable Diffusion 实战指南
  • DeepSeek V3 正式发布:性能突破与开源生态解析
  • Spring Boot 3.x 启动报错 factoryBeanObjectType 解决方案
  • AI 制作萌娃短视频教程及提示词
  • Moltbot:让 Claude 从聊天工具转变为可落地 AI Bot
  • Linux Ext2 文件系统深度解析
  • Docker Compose 文件格式版本 3 参考指南
  • 利用 Qoder 自然语言生成动漫短剧的 AIGC 智能体实战
  • 前端 JS 加载失败处理:自动重试与多源容灾方案
  • Layui 框架下 Unity WebGL Tab 切换黑屏解决方案
  • Django 模型核心方法与进阶用法详解
  • 从 SEO 到 GEO:大模型数据投毒攻击原理与防御指南
  • OpenClaw 实战:基于 Rust+Tauri 构建安全沙箱清理 Skill
  • SRS 流媒体服务器安装配置与使用指南
  • 消息队列理论基础与 Kafka 架构价值解析
  • 自然语言处理在金融领域的应用与实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online