【LLaMA-Factory 实战系列】三、命令行篇 - YAML 配置、高效微调与评估 Qwen2.5-VL

【LLaMA-Factory 实战系列】三、命令行篇 - YAML 配置、高效微调与评估 Qwen2.5-VL

    • 1. 引言
    • 2. 为什么从 WebUI 转向命令行?
    • 3. 准备工作(回顾)
    • 4. 核心:创建并理解训练配置文件
      • 4.1 选择并复制基础模板
      • 4.2 逐一解析与修改配置文件
      • 4.3 参数详解与修改说明
    • 5. 执行训练
    • 6. 模型评估与预测
      • 6.1 在 MMLU Benchmark 上评估
        • 6.1.1 创建配置文件
        • 6.1.2 执行评估
        • 6.1.3 查看评估结果
      • 6.2 自定义数据集上生成预测
        • 6.2.1 创建预测配置文件
        • 6.2.2 执行预测
        • 6.2.3 查看预测结果
    • 7. 总结

1. 引言

在上一篇教程【LLaMA-Factory 实战系列】二、WebUI 篇 - Qwen2.5-VL 多模态模型 LoRA 微调保姆级教程中,我们通过图形化界面成功对 Qwen2.5-VL-3B-Instruct 模型进行了 LoRA 微调。WebUI 固然直观便捷,但在许多场景下,命令行(CLI)配合配置文件的方式更具优势。

本教程将详细介绍如何使用 llamafactory-cli 命令,结合精心编写的 .yaml 配置文件,来完成从 训练、评估 到 预测 的全流程。这种方式不仅是可复现研究和自动化实验的基石,也是在没有图形化界面的远程服务器上进行工作的标准做法。

2. 为什么从 WebUI 转向命令行?

如果您已经熟悉了 WebUI,可能会问:为什么还要学习命令行?

  • 可复现性:一个 .yaml 文件完整地记录了模型、数据集、超参数等所有配置。您可以将它与代码一同提交到 Git,任何人都能用完全相同的设置复现您的实验结果。
  • 自动化与批处理:您可以通过编写 Shell 脚本,轻松地启动一系列不同超参数的训练、评估任务,而无需手动在 WebUI 上逐个点击。这对于调参和对比实验至关重要。
  • 版本控制:对 .yaml 文件的每一次修改都可以被 Git 追踪,让您清晰地看到每次实验的配置变动。
  • 远程服务器友好:在只有 SSH 终端的服务器上,命令行是唯一也是最高效的交互方式。

3. 准备工作(回顾)

在开始之前,请确保您已经完成了前两篇教程中的准备工作:

  • 环境已搭建:已按照教程安装 LLaMA-Factory 并创建了 llama_factory conda 环境。
  • 数据集已备好pokemon_sharegpt 数据集已按要求放在 LLaMA-Factory 的根目录下,目录结构如下:
LLaMA-Factory/
├── pokemon_sharegpt/
│   ├── dataset_info.json
│   ├── images/
│   └── pokemon_sharegpt.json
└── ... (其他项目文件)
  • 数据集已声明dataset_info.json 文件已正确配置,将我们的数据集命名为 pokemon_multimodal

4. 核心:创建并理解训练配置文件

LLaMA-Factory 在 examples/ 目录下提供了丰富的配置文件模板。我们的策略是:找到一个最相似的模板,复制并修改它,而不是从零开始。

4.1 选择并复制基础模板

根据我们的目标(使用 LoRA 微调 Qwen2.5-VL),最合适的模板是 examples/train_lora/qwen2.5vl_lora_sft.yaml。我们来创建一个专门存放我们自己配置的目录,并把模板复制过去。

# 确保在 LLaMA-Factory 根目录下
mkdir -p my_configs
cp examples/train_lora/qwen2.5vl_lora_sft.yaml my_configs/qwen2.5vl_3b_pokemon_lora_sft.yaml

4.2 逐一解析与修改配置文件

打开 my_configs/qwen2.5vl_3b_pokemon_lora_sft.yaml 文件,并根据我们的“宝可梦”任务进行修改。

修改后的完整配置如下:

# my_configs/qwen2.5vl_3b_pokemon_lora_sft.yaml# model
model_name_or_path: Qwen/Qwen2.5-VL-3B-Instruct
image_max_pixels: 262144
video_max_pixels: 16384
trust_remote_code: true# method
stage: sft
do_train: true
finetuning_type: lora
lora_rank: 64
lora_alpha: 128
lora_dropout: 0.1
lora_target: all# dataset
dataset: pokemon_multimodal
dataset_dir: pokemon_sharegpt
template: qwen2_vl
cutoff_len: 4096
max_samples: 1000
overwrite_cache: true
preprocessing_num_workers: 16
dataloader_num_workers: 4# output
output_dir: saves/qwen2.5vl-3b-lora-pokemon/sft-cli
logging_steps: 10
save_steps: 500
plot_loss: true
overwrite_output_dir: true
save_only_model: false
report_to: none# train
per_device_train_batch_size: 2
gradient_accumulation_steps: 8
learning_rate: 2.0e-4
num_train_epochs: 3.0
lr_scheduler_type: cosine
warmup_ratio: 0.1
bf16: true
ddp_timeout: 180000000
resume_from_checkpoint: null# eval
val_size: 0.1
per_device_eval_batch_size: 2
eval_strategy: steps
eval_steps: 100

4.3 参数详解与修改说明

重点修改点:

  • model_name_or_path: 指向基础模型。
  • lora_target: 设置为 all,对所有线性层应用 LoRA。
  • dataset: 指向我们声明的宝可梦多模态数据集。
  • template: 使用 qwen2_vl 专属模板。
  • output_dir: 训练结果保存路径。
  • bf16: 设为 true,以加速训练。

5. 执行训练

# 激活环境
conda activate llama_factory# (可选)加速模型下载
export USE_MODELSCOPE_HUB=1# 执行训练
llamafactory-cli train my_configs/qwen2.5vl_3b_pokemon_lora_sft.yaml

6. 模型评估与预测

6.1 在 MMLU Benchmark 上评估

6.1.1 创建配置文件

my_configs/eval_mmlu.yaml

# model
model_name_or_path: Qwen/Qwen2.5-VL-3B-Instruct
adapter_name_or_path: saves/qwen2.5vl-3b-lora-pokemon/sft-cli
image_max_pixels: 262144
video_max_pixels: 16384
trust_remote_code: true# method
finetuning_type: lora# dataset
task: mmlu_test
template: fewshot
lang: en
n_shot: 5# output
save_dir: saves/qwen2.5vl-3b-lora-pokemon/eval-mmlu# eval
batch_size: 4
6.1.2 执行评估
llamafactory-cli eval my_configs/eval_mmlu.yaml
6.1.3 查看评估结果

终端输出预期示例:

Average: 64.14
STEM: 60.47
Social Sciences: 74.85
Humanities: 56.62
Other: 68.32

6.2 自定义数据集上生成预测

6.2.1 创建预测配置文件

my_configs/predict_pokemon.yaml

# model
model_name_or_path: Qwen/Qwen2.5-VL-3B-Instruct
adapter_name_or_path: saves/qwen2.5vl-3b-lora-pokemon/sft-cli
image_max_pixels: 262144
video_max_pixels: 16384
trust_remote_code: true# method
stage: sft
do_predict: true
finetuning_type: lora# dataset
eval_dataset: pokemon_multimodal
dataset_dir: pokemon_sharegpt
template: qwen2_vl
cutoff_len: 4096
max_samples: 100
overwrite_cache: true
preprocessing_num_workers: 1# output
output_dir: saves/qwen2.5vl-3b-lora-pokemon/predict
overwrite_output_dir: true# eval
per_device_eval_batch_size: 1
predict_with_generate: true
report_to: none
6.2.2 执行预测
llamafactory-cli train my_configs/predict_pokemon.yaml
6.2.3 查看预测结果

all_results.json 示例:

{"predict_bleu-4": 46.05964000000001,"predict_rouge-1": 54.763231999999995,"predict_rouge-2": 27.012867999999997,"predict_rouge-l": 46.45837499999999,"predict_runtime": 92.8343,"predict_samples_per_second": 1.077,"predict_steps_per_second": 1.077
}

7. 总结

🎉 恭喜!您已经掌握了使用 LLaMA-Factory 命令行和 YAML 配置进行模型 微调、评估、预测 的完整流程。

核心要点回顾

  • 命令行是王道:为了可复现性和自动化,命令行 + YAML 是更专业的选择。
  • 模板优先:复制修改官方模板,事半功倍,并为不同任务(训练、评估、预测)创建独立的配置文件。
  • 理解参数:认真理解 do_train, do_predict, task, adapter_name_or_path 等关键参数,它们决定了程序的行为。
  • 评估是关键:我们不仅完成了模型的训练,还学会了如何使用标准基准(MMLU)和自定义数据集(计算 ROUGE/BLEU)对模型进行全面的评估和测试。
  • 小步快跑:利用命令行覆盖参数的特性,可以高效地进行超参数搜索和对比实验。

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

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

相关文章

3、NLP黄金九步法(问题定义-数据获取-数据探索)

🎯 为什么要学习NLP流程? 想象一下,你要做一道菜🍳。如果没有清晰的步骤,随便把食材扔进锅里,结果会怎样?NLP项目也是如此! 就像做菜有固定流程一样: 买菜 → 洗菜 → …

docker 安装DM8达梦数据库

搭建Docker 环境 查看docker 是否安装 yum list installed | grep docker如若未安装则安装docker 环境 yum -y install docker启动Docker systemctl start docker查看docker启动结果 systemctl status docker搭建达梦数据库 下载镜像 传送门 #导入镜像 docker load -i…

Chrome MCP Server:AI驱动浏览器自动化测试实战「喂饭教程」

Chrome MCP Server:AI驱动浏览器自动化测试实战 一、项目简介二、原理剖析1. 架构总览三、安装1. 环境准备2. 安装步骤2.1 下载 Chrome 扩展2.2 安装 mcp-chrome-bridge2.3 加载扩展2.4 启动 MCP Server2.5 配置 AI 客户端四、Chrome MCP Server API 参考五、用法实战1. 与 AI…

.NET多线程任务实现的几种方法及线程等待全面分析

文章目录 1. 引言2. .NET多线程编程基础2.1 线程概念回顾2.2 .NET线程模型概述 3. 多线程任务实现方法3.1 Thread类实现3.2 ThreadPool实现3.3 Task Parallel Library (TPL)3.4 Parallel类3.5 BackgroundWorker组件3.6 Async/Await模式3.7 各种方法的比较与选择 4. 线程等待机制…

Typecho handsome访客统计插件最新版VistorLoggerPro

文章目录 介绍功能特点页面预览安装及更新方法系统要求使用说明基本使用(Handsome主题适用) 隐私保护技术实现更新日志最后 介绍 这是一个为 Typecho 博客系统开发的访客统计插件,基于原版的VistorLogger修改版本。该插件提供了详细的访问统…

蓝桥杯备赛篇(上) - 参加蓝桥杯所需要的基础能力 1(C++)

目录 一、(工具)DevC的安装和使用1.1 DevC介绍1.2 下载1.3 部分使用技巧1.3.1 快捷键介绍1.3.2 调试快捷键 二、第一个C程序2.1 基础程序2.2 main函数2.3 字符串2.4 头文件2.5 cin和cout初识2.6 名字空间 三、注释四、题目练习3.1 输出第二个整数3.2 字符…

Bugku-CTF-web(适合初学者)

今天刷了一下 Bugku-CTF-web 的1-10题,比较简单,比较娱乐,基本上看看源代码就可以了,非常适合初学者。能够学习到base64编码,unicode编码,dirb web目录遍历,SourceLeakHacker 备份文件遍历&…

【实时Linux实战系列】基于实时Linux的音频处理应用开发

在实时系统中,音频处理应用(如实时音频效果处理、语音通信等)需要低延迟和高精度的时间控制。实时Linux通过优化内核调度和提供高效的I/O操作,能够满足音频处理对实时性的严格要求。掌握基于实时Linux的音频处理应用开发对于开发者…

Linux中信号的三种产生方式

在 Linux 中,信号(Signal)是一种进程间通信的机制,用于通知进程发生了某种事件。理解信号的来源对于开发可靠、健壮的程序至关重要。本文将介绍三种常见的信号产生方式,包括:kill 命令、键盘输入&#xff0…

Android15启动icon界面的背景图颜色

Android15启动icon界面的背景图颜色 在一加Ace 5启动时有个图标在中间的&#xff0c;它界面的背景图是灰色的&#xff0c;不好看&#xff0c;想改为白色。 解决方案&#xff1a; 在app下的AndroidManifest.xml文件的<application这个标签的android:theme增加&#xff1a;…

用福昕阅读器打开pdf文件,整个程序窗口自动缩小的问题

原因&#xff1a; 这个问题&#xff0c;其实是pdf自带了某个缩放比例&#xff0c;与窗口的比例不一致&#xff0c;因此会进行窗口缩放。 解决方法: 用acrobat&#xff08;我没有找到如何用福昕阅读器进行设置的方法&#xff09;&#xff0c;打开【文档属性】&#xff0c;然后打…

Windows环境Browser-Use平台部署与AI自动化远程访问实现过程

文章目录 前言1. 安装Ollama2. Gemma3模型安装与运行3. 虚拟环境准备3.1 安装Python3.2. 安装conda 4. 本地部署Brower Use WebUI4.1 创建一个新conda环境4.2 克隆存储库4.3 安装依赖环境4.4 安装浏览器自动化工具4.5 修改配置信息 5. 本地运行测试6. 安装内网穿透6.1 配置公网…

React + Umi(Umijs/Max) 搭建项目及配置

文章标题 01 环境准备02 快速构建2.1 参数选项2.2 umix 还是 umijs/max2.3 使用 pnpm &#xff08;推荐&#xff09;2.4 使用 npm 和 yarn2.5 启动项目2.6 启用 Prettier&#xff08;可选&#xff09;2.7 打包部署发布 03 Tailwind CSS 插件&#xff08;可选&#xff09;3.1 安…

JDK 17 中 java.lang.System 常用方法及应用场景

概述 java.lang.System 在 JDK 17 中依然是最核心的系统交互类之一。以下是针对 JDK 17 的常用方法详解&#xff0c;包含新特性和最佳实践。 一、标准 I/O 流&#xff08;更新至 JDK 17&#xff09; 1. 控制台输出 // 传统输出方式&#xff08;仍然可用&#xff09; System…

深入探究Manticoresearch Java API:新增与查询文档实战

引言Java 项目集成 Manticoresearch新增文档操作查询文档操作 SQL 查询API 查询 总结 引言 Manticore Search 是一个使用 C 开发的高性能搜索引擎&#xff0c;创建于 2017 年&#xff0c;其前身是 Sphinx Search。它显著改进了 Sphinx 的功能&#xff0c;修复了数百个错误&am…

Linux远程机器无法连接-------解决方案

笔者这几天碰到linux机器远程ssh 无法连接的情况 背景分析 笔者在linux机器进行测试的时候&#xff0c;偶发突然无法连接机器&#xff0c;如下图所示&#xff0c;vscode的远程连接也无法进行。 telnet也无法登录。 解决方案 笔者的登录场景是这样的&#xff0c;所以怀疑是…

网络模型中,应用层支持什么协议

在网络模型中&#xff08;无论是 OSI 七层模型 还是 TCP/IP 四层模型&#xff09;&#xff0c;应用层 是最顶层&#xff0c;直接为用户或应用程序提供网络服务接口。它支持的是各种具体的应用程序协议&#xff0c;这些协议定义了特定类型应用程序如何进行通信和数据交换。 以下…

比特币序数理论与铭文的终极指南

引言&#xff1a;比特币网络的意外趋势 去年&#xff0c;比特币网络上出现了一个意外的趋势——这一趋势令许多比特币纯粹主义者感到愤怒和惊讶&#xff0c;但同时也在更广泛的加密货币社区中点燃了对这个行业最古老、最安全区块链的希望和热情。 这个趋势涉及铭文&#xff0…

C/C++ DLL 动态链接库的开发与示例详解

简介 介绍 QT6&#xff0c;DLL 动态链接库的开发&#xff0c;开发示例 详细 DLL 入口函数 DllMain 是每个 dll 的入口函数&#xff0c;可以写&#xff0c;也可以不写&#xff0c;不影响其他库函数运行。如果使用此函数需要包含头文件#include <objbase.h>。 BOOL WI…

在 CentOS 7 上基于 Docker 的 LNMP 部署 Hexo

时间起因是因为之前BLOG没有备份数据都丢失了,今天在和朋友聊天的时候讨论到到底使用Hexo还是用Halo?最后还是想熟悉下这两种博客的架设和部署方式,每次部署都有各种不同的问题,旨在提升自己的学习认知。以此有机会得到更多大佬们的指导~ 因为我是在 CentOS 7 服务器上使用…