LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

00 引言大語言模型微調一直都是一個棘手的問題,不僅因為需要大量的計算資源,而且微調的方法也很多。在嘗試每一種方法的過程中配置環境和第三方庫也很麻煩。而 LLaMA Factory 是一個高效的大語言

00 引言

大語言模型微調一直都是一個棘手的問題,不僅因為需要大量的計算資源,而且微調的方法也很多。在嘗試每一種方法的過程中配置環境和第三方庫也很麻煩。

而 LLaMA Factory 是一個高效的大語言模型訓練和推理的框架,不僅集成多種高效訓練方法,而且能持續適配國內外各種開源大模型。

該框架還提供了能夠一站式實現大模型預訓練、監督微調、評估、推理的 Web UI 界面,使用戶能夠直觀地看到訓練選項、模型數據集選項、訓練進度等重要信息。

為方便國內用戶使用,該框架支持了魔搭社區(ModelScope)的模型和數據集資源,訓練前可自動下載並緩存資源。

Yi 系列大模型是李開復博士創辦的“零一萬物”公司研發的首款開源大模型。參數規模有 6B 和 34B。其中的 Yi-34B 不僅支持 200K tokens 的超長窗口,更是在眾多性能評測榜單上取得領先成績。

本次我們基於 LLaMA Factory 框架,在一張 V100 顯卡上使用 ModelScope 上支持的在線數據集對 Yi-6B 模型進行監督微調,使其獲得對話能力。

01 環境準備

環境配置與安裝

本文主要演示的模型推理代碼可在魔搭社區免費實例PAI-DSW的配置下運行(顯存24G) :

點擊模型右側Notebook快速開發按鈕,選擇GPU環境

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

打開Terminal環境

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

LLaMA Factory框架目前托管在 github 上,所以,我們要先使用 git 來

安裝 LLaMA Factory 開源框架:

git clone https://github.com/hiyouga/LLaMA-Factory.git

等待倉庫下載完畢,進入倉庫並安裝所需依賴:

cd LLaMA-Factory
pip install -r requirements.txt

註意:截至文章編輯時(2024 年 1 月 22 日),該框架在使用最新版本的 torch 庫時,會出現無法正常推理的情況。請根據您的硬件環境選擇合適的 torch>=1.13.1,<=2.0.1 版本進行安裝。

02 Web UI 的使用

服務的啟動

首先我們要在命令行裡先設置一個環境變量 USE_MODELSCOPE_HUB=1,框架程序在運行時會讀取這個環境變量,當 USE_MODELSCOPE_HUB 的值為 1 時框架才會使用 ModelScope 在線資源。在 Windows 和 Linux 操作系統上,設置環境變量的命令是不同的,請二選其一:

export USE_MODELSCOPE_HUB=1  # Linux 上使用的命令
set USE_MODELSCOPE_HUB=1     # Windows 上使用的命令

接著使用以下命令啟動 Web UI:

CUDA_VISIBLE_DEVICES=0 python src/train_web.py  # 指定一塊 GPU 啟動網頁服務

LLaMA Factory 的 Web UI 目前隻支持單卡訓練/推理,當你的機器有多張顯卡時請使用 CUDA_VISIBLE_DEVICES 指定一張顯卡啟動程序。

我們在瀏覽器地址欄中輸入 http://localhost:7860 進入 Web 界面,接著可以在“語言/Language”選項中,將界面的語言修改為“中文/zh”,然後在模型名稱中選擇“Yi-6B”,在模型路徑中選擇“01ai/Yi-6B”。

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

監督微調

第二行中的微調方法,我們保持 “lora” 不變,適配器路徑使用默認的空值。

“微調方法”有三個可選項:

  • full:全參數微調,對模型的所有參數進行訓練,這種方法需要大量的計算資源和時間;
  • freeze:參數凍結,對模型大部分參數進行凍結操作,僅訓練小部分參數,能夠使用有限的資源對大模型進行微調;
  • LoRA:Low-Rank Adaptation,是一種參數高效性微調方法,不僅讓微調的成本顯著下降,還能獲得和全參數微調類似的效果。

適配器指的是 lora 微調的輸出結果,可以理解為將預訓練模型的輸出轉換為目標形式的組件,需要搭配預訓練模型一起使用。在模型的推理和合並階段中,才需要指定“適配器路徑”作為輸入,而在微調過程中則不需要指定這個參數。

打開“高級設置”,本次演示中量化等級保持 none,提示模板使用 xverse,RoPE 插值方法和加速方式均為 none。

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

QLoRA是一種能夠減少顯存占用的大模型高效微調方法,當模型過大導致顯存不夠時可以考慮使用 4bit / 8bit QLoRA。

提示模板在微調時為大模型指示人類輸入和機器輸出的模板,除了 default 以外也可以根據倉庫中Supported Models的說明選擇合適的模板進行實驗。

RoPE插值可以擴展 LLaMA 模型的上下文長度,如果使用了 linear 參數微調模型推理時也要設置為 linear,如果微調時使用 none,推理時可以選擇 none 或 dynamic。

框架支持 FlashAttention-2(RTX4090、A100 或 H100 GPU)和 unsloth(LLaMA、Mistral 和 Yi 模型)的加速方式,均需要額外安裝。

接下來我們來到訓練參數設置面板:

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

訓練階段選擇 Supervised Fine-Tuning(監督微調),數據路徑保持 data 不變,數據集我們使用 ModelScope 社區提供的 belle_2m 數據集。其他參數的介紹如下:

  • 截斷長度:一條數據分詞後會成為一個 token 序列,當 token 序列的長度超過截斷長度時會被分割成若幹段輸入進模型,這裡保持1024不變;
  • 學習率:設置為 2e-4(因為之後我們會使用到數據打包技術,相應地學習率應該適當增大);
  • 訓練輪數設置為 3.0,最大樣本數為 50000;
  • 計算類型使用 fp16(V100 並不支持 bf16);
  • 批處理大小(Batch Size)設為 4(單卡3090);
  • 梯度累計(Gradient Accumulation):增大該參數可以減少顯存的占用,本次實驗設置為 1;
  • 學習率調節器:使用默認的 cosine,詳見SchedulerType — transformers documentation (huggingface.co)
  • 最大梯度范數:用於梯度裁剪的范數,默認為 1.0
  • 驗證集比例使用:0

打開其它參數設置面板,我們對其中的參數進行一些修改:

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

  • 本次實驗日志間隔使用默認的 5,保存間隔使用 100;

註意,在模型的微調過程中,使用較小的保存間隔可能會在訓練的過程中保存大量的檢查點(checkpoint),占用大量的磁盤空間。在實際微調時可以根據訓練的總步數適當調大保存間隔。

  • 預熱步數:指的是學習率預熱過程中加到正常學習率的步數,可選參數,本次實驗設為 50;
  • NEFTune噪聲參數:在訓練過程中適量添加噪聲,可選參數,本次實驗設為 5;
  • 序列打包:將多組數據打包到一起進行訓練,能夠提高模型的上下文能力和訓練速度。因為本次實驗使用的數據集長度較小,所以可以使用序列打包技術提高模型在較長上下文的表現。這也決定了我們的學習率參數應該稍大些;
  • 縮放歸一化層:可以提高訓練過程中的穩定性,本次實驗中不勾選。

下面打開 LoRA 參數設置面板:

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

  • LoRA 秩使用默認值 8;
  • LoRA 隨機丟棄使用默認值 0.1;
  • LoRA 作用模塊設為 all,表示指定全部模塊;
  • 附加模塊和新建適配器均不指定。

最後設置輸出目錄(輸出結果為 LoRA 適配器),點擊“預覽命令”,可以看到實際的所有的命令行參數,點擊“開始”,在下面可以看到打印出來的日志。等待模型和數據集加載完畢,就會顯示訓練過程的進度條,以及已用時間和剩餘時間。等訓練結束,面板會顯示“訓練完成”,沒訓練完也可以點擊“中斷”,程序會根據最後一個檢查點(checkpoint)生成訓練結果文件夾。

推理對話

當模型結束以後,同樣可以使用 LLaMA Factory 的 Web UI 跟訓練好的模型進行對話。

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

首先刷新適配器路徑列表,在下拉列表中選擇剛剛訓練好的結果。然後在提示模板中選擇剛剛微調時采用的 xverse,RoPE 插值使用 none。

  • 推理過程中使用的模板需要和微調時使用的一致;
  • 在微調過程中,RoPE 插值若使用的是 linear,則推理時隻能使用 linear。若微調時使用 none,推理時可以選擇 none 或 dynamic。

最後點擊“加載模型”:

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

對話過程中在輸入中寫下內容,也可以添加系統提示詞,點擊“提交”表示調用一次大模型的回答。“清空歷史”可以清除對話積累的上下文。右側的最大生成長度、Top-p 和溫度系數都是可以自己調整的。

對話結束後,如果想更換模型或適配器,需要點擊“卸載模型”,卸載後才能重新加載模型。

模型合並

當我們使用 LoRA 訓練結束以後,獲得的實際上是一個適配器。單獨的適配器需要和模型一起使用,我們也可以使用 LLaMA Factory 的模型合並功能將適配器和模型基座組裝成一個完整的模型。

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

適配器路徑、提示模板、RoPE 插值方法的選擇和上述的模型推理和對話過程中選擇的是一樣的。

然後在下面點擊 Export 面板,最大分塊大小、導出量化等級、導出量化數據集均不需要修改,隻需要指定導出目錄。點擊開始導出,等待導出完畢即可。

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

LLama Factory ModelScope實戰——使用 Web UI 進行監督微調

當我們使用導出後的模型進行推理時,需要將模型名稱改為 Custom、模型路徑設為導出後的模型的相對/絕對路徑即可。

搜虎頭條, 发布者:天天娛樂,轉載請註明出處:https://sohunews.net/keji/52095.html

讚! (0)
Previous 2024年2月6日 上午12:43
Next 2024年2月6日 上午12:43

相关推荐