前往
大廳
主題

使用 text-generation-webui製作語言模型LORA的筆記

塔克蘭斯 | 2023-09-02 21:57:56 | 巴幣 2204 | 人氣 3069

這兩周閒暇時間都在為了Llama2做一個繁體中文的lora而砸小錢叫GPT3.5turbo幫我生一堆對話紀錄來讓我有資料練
先把成果貼上來:
-------
text-generation-webui怎麼安裝,怎麼讀語言模型不再贅述,如需幫助請去看我在小屋的另一篇介紹文
那麼,這是webui中Training的頁籤,眼花撩亂,可不是嗎? 我會稍微介紹這些參數的功能
一‧參數
LoRA Rank:也稱為維度計數。值越高,文件越大,內容控制越多。值越低,文件越小,控制力越弱。使用 4 或 8 進行風格,128 或 256 進行教學,1024+ 用於大數據的細節處理。更高的值需要更多的 VRAM。 LoRA Alpha:這除以秩就變成了 LoRA 的縮放。值越高,縮放越強。一個好的標準值是你LoRA Rank值的兩倍。
Batch Size:全局批處理大小。這兩個批處理大小一起決定梯度累積(gradientAccum = batch / microBatch)。梯度累積值越高,訓練質量越好。
Micro Batch Size:每個設備的批處理大小(text-generation-webui尚未實現這個功能)。增加此值將增加 VRAM 使用量。
Cutoff Length:文本輸入的截斷長度。本質上,這是一行文本的長度,一次輸入。較高的值需要極大地增加 VRAM。
看得頭暈了?我也是,所以我在訓練是都用預設值,比較要自己動的東西是這些:
Save every n steps:此參數指定每隔多少步保存一次 LoRA 的檢查點。檢查點是模型在特定步驟的狀態的保存。如果發生意外,您可以從檢查點恢復訓練,而不用整組重來。
Epochs:此參數指定將數據集輸入訓練的次數。每個 epoch 模型都會讀整個數據集一次。
Learning Rate:此參數控制模型在訓練過程中更新其參數的速度。較高的學習率意味著參數更新得更快,但也可能導致模型不穩定。較低的學習率意味著參數更新得更慢,但也可能導致模型訓練得更慢。
這裡的重點就是Epochs與Learning Rate,Epochs可以讓較短的資料及多學幾次,Learning Rate則是可讓模型以多高的效率學習,但在這邊並不是越高越好
資料集,就把他想成考試的考古題;越高的Epochs(訓練次數)與Learning Rate(學習率)會把模型做得越擅長達考古題,但做到最後他將完全背起考古題,而一旦到了這個時候可能即使是考古題,稍微換幾個字他就直接暴死
我這幾天跌跌撞撞的經驗是:資料集越少,用越高的Epochs讓他學;越長的資料集,將Learrning Rate調低。不過每個資料集都長不一樣,都是練完之後才知道結果,人家說AI是盲盒可沒說錯呢!
Lora Rank與Lora alpha的那些參數如果有設備,就玩一玩吧!我的顯卡是不太夠啦...

二.資料集
在開始前,你得先把資料集丟到text-generation-webui\training\datasets下:
餵資料的方式有兩種:指定格式與文字檔
指定格式就是很常見的幾種微調格式,我的資料集與多數資料集是alpaca-format,基本上他一個資料就是長這樣:
    {
        "instruction": "艾蜜莉是冒險者公會的一名魔法師,她有著天真活潑的個性,喜歡和人們分享關於魔法的趣事。",
        "input": "聽說你曾經在一次魔法實驗中把蝴蝶變大了,是真的嗎?",
        "output": "那次只是一個小小的失敗。我本來想讓蝴蝶變得更顯眼,但結果變得太大了,差點把我給撞倒了呢。不過蝴蝶還是很開心地飛走了。*笑得合不攏嘴*"
    }
instruction是一個操作說明,簡單的說就是AI會收到的提示詞(prompt)
input是輸入,可以和instruction寫在一起也可以分開寫,在訓練時是會組在一起的
output是預期輸出,AI會先照著前面兩項的prompt生一個自己的答案,然後跟output對照,並從中學習

另一種則是生呼呼的文字檔
簡單的說你就是丟一個txt檔也可以,webui會開切文字檔
一些參數解說
Overlap Length:此參數指定從前一個文本塊中包含到下一個文本塊中的令牌數。令牌是文本中的一個單詞或短語。較高的重疊長度意味著每個區塊將包含更多來自前一個區塊的信息。這可以幫助模型保持上下文並生成更流暢的文本。但是,較高的重疊長度也意味著每個區塊將更大,這可能會導致顯存問題。
Prefer Newline Cut Length:此參數指定在確保區塊在換行處切割時最大可將重疊切割移位的距離。較高的 Prefer Newline Cut Length 意味著模型更有可能在換行處切割區塊。這可以幫助模型生成更自然的文本,因為自然語言通常在換行處中斷。但是,較高的 Prefer Newline Cut Length 也意味著模型可能會錯過一些重要的信息,因為這些信息可能跨越了多個區塊。
Hard Cut String:強制切割文字,一旦出現裡面的文字則立刻切割,不管前面的參數,預設值是三個換行符號,也就是兩個空白
Ignore small blocks:忽視一些較小的區塊,像是只有兩三個字的區塊
整題來說純文字檔也可以讓語言模型學習,但這個部分學習成果就很未知,英語文件可以學得很好,但中文就很微妙

三.訓練:
參數與資料及準備好後,還得選你要訓練哪個模型,text-generation-webui目前只能練這四個LLaMA, OPT, GPT-J, 與GPT-NeoX
訓練時會非常非常吃顯存(像我借用A100 40GB還不能練完整精度的llama),可以用較低精度的方式讀取語言模型來訓練,像是4bits或8bits,雖然準度會降低,但只要資料集夠長還是練得出一個可用的Lora
以4bits讀7B模型可以只在一張8GB VRAM的顯卡上訓練
點下訓練就是漫長的等待了,依據顯卡強度、資料集長度與訓練次數而有所變化,像我的資料集在我的4060上訓練是6小時,在訓練時會有一些紀錄,可以觀察一下訓練狀況
loss代表學習的狀況,這個值應該要隨訓練的過程逐漸降低,偶有波棟可能代表你的資料集有些不一致,讓模型學到了一些「新東西」
learning_rate就是前面提到的學習率,這個值本身會逐漸下降以防止過度擬合(還記得前面提到的考古題嗎?)
最後練完,Lora會被存在text-generation-webui\loras底下,你可以馬上來試試你的lora!

四.驗證成果
回到Model頁,你需要先重新讀取擬的語言模型,接著你就可以在右邊的LoRA(s)中找到你剛才訓練出的Lora,選他然後點Apply LoRAs,接著你就可以觀察成果了!

有點怪怪的,不過也算有個樣子了

常見問題
1.我怎麼訓練出來的東西爛爛的?
訓練和你的輸入有關,輸入不夠或是毫無規律,那麼他就會學得爛爛的
2.我要去哪裡弄資料集?
huggingface上有很多開源的資料集,像我也有把我的資料集放在上面,不過問題是你希望你練出來的AI要幹甚麼?
想要聊天?餵他一堆對話紀錄,你沒有對話紀錄就要自己寫
想做成客服?那你就要準備許多Q&A
想要他算數學?其實你不該叫語言模型做數學
3.我可以在別人的基礎上再訓練嗎?
這要看你的「別人」授予的權限,雖說開源是開放給大家使用,但也是有分用途的,若要商用可要多留意
4.我可以在CPU模式下進行訓練嗎?
當然可以,只要你願意忍受超久的訓練時間
5.有甚麼免費的資源可以訓練Lora?
所有免費的資源都不夠用於訓練一個Lora,要有成效的訓練基本上都不能免費讓你練成,Colab免費仔借到的T4 GPU訓練速度比我手上的這塊4060還要慢

一如既往,歡迎提問

創作回應

CheeseQ
你好,訓練完的LoRA跟原始模型合併的時候遇到Cant load tokenizer的問題,想問一下該怎麼解決
2023-12-07 14:46:09
塔克蘭斯
訓練完後model要unload重讀喔
2023-12-07 15:52:53
蜜拉喬娃維騎馬
您好 我想知道adapter_model.bin 這個檔案是如何生成的呢 謝謝
2024-02-25 23:08:28
塔克蘭斯
這包專案基本上只是將訓練的部分介面化,如果你想看code,請以「微調模型」為關鍵字搜尋,看其他人寫的colab notebook
2024-02-26 13:01:26
銀流
您好,我想向您一樣顯示step loss但似乎找不到設定的地方Run `wandb online` or set WANDB_MODE=online

https://truth.bahamut.com.tw/s01/202403/c792f33457a7122f47fd6cced04accc6.PNG
2024-03-29 16:33:46
塔克蘭斯
預設情況下應該會顯示,除非你的資料集短到列都沒列就讓語言模型讀完了
2024-03-29 17:21:03
銀流
Run `wandb online` or set WANDB_MODE=online 這個我找到了 在./modules/training.py裡面 但改完只是可以線上監控進度,但仍然沒有step loss
2024-03-29 18:57:42
銀流
更:她從step127開始出現了 ,似乎沒辦法決定它顯示的頻率,而且現在也不確定是不是因為調了wandb online出現的。
https://truth.bahamut.com.tw/s01/202403/bb59379fca5a2126ed122aa8d4cbfb90.PNG
2024-03-29 19:35:37

相關創作

更多創作