【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
英文地址,請注明出處:http://en.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 服務器上使用…