ETH官方钱包

前往
大廳
主題

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

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

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

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

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

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

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

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

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

一如既往,歡迎提問

創(chuàng)作回應(yīng)

蜜拉喬娃維騎馬
您好 我想知道adapter_model.bin 這個檔案是如何生成的呢 謝謝
2024-02-25 23:08:28
塔克蘭斯
這包專案基本上只是將訓(xùn)練的部分介面化,如果你想看code,請以「微調(diào)模型」為關(guān)鍵字搜尋,看其他人寫的colab notebook
2024-02-26 13:01:26
銀流
您好,我想向您一樣顯示step loss但似乎找不到設(shè)定的地方Run `wandb online` or set WANDB_MODE=online

https://truth.bahamut.com.tw/s01/202403/c792f33457a7122f47fd6cced04accc6.PNG
2024-03-29 16:33:46
塔克蘭斯
預(yù)設(shè)情況下應(yīng)該會顯示,除非你的資料集短到列都沒列就讓語言模型讀完了
2024-03-29 17:21:03
銀流
Run `wandb online` or set WANDB_MODE=online 這個我找到了 在./modules/training.py裡面 但改完只是可以線上監(jiān)控進度,但仍然沒有step loss
2024-03-29 18:57:42
銀流
更:她從step127開始出現(xiàn)了 ,似乎沒辦法決定它顯示的頻率,而且現(xiàn)在也不確定是不是因為調(diào)了wandb online出現(xiàn)的。
https://truth.bahamut.com.tw/s01/202403/bb59379fca5a2126ed122aa8d4cbfb90.PNG
2024-03-29 19:35:37
心無其心
目前臺大林彥廷新出的Llama-3-Taiwan-8B-Instruct可以在消費級PC上運行,繁體中文能力提升很有感,都可以寫小說了
2024-07-03 05:34:11
塔克蘭斯
我也有玩了一下,那個模型的中文很好,不過有些話題還是要進一步微調(diào),回覆才能更豐富
2024-07-03 07:31:10

相關(guān)創(chuàng)作

更多創(chuàng)作