大模型微調指南之 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.pswp.cn/pingmian/80320.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80320.shtml
英文地址,請注明出處:http://en.pswp.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…