PTT評價

[AI] 如何訓練LoRA? 猴子都學得會的手把手教學!

看板C_Chat標題[AI] 如何訓練LoRA? 猴子都學得會的手把手教學!作者
wres666
(永恆夢魘)
時間推噓29 推:29 噓:0 →:4

先附上預覽圖,幼妲貼貼:
https://truth.bahamut.com.tw/s01/202302/a2c1b53fb942cba44f6ae71c514e82bb.JPG


網頁好讀版:
https://home.gamer.com.tw/creationDetail.php?sn=5657565


前言都是一些廢話,如果只是想知道如何訓練LoRA,可以直接往下跳至分隔線。
*本文只是個人訓練LoRA的經驗分享,因為還沒有人做相關教學,所以寫這篇文章來看看能不能拋磚引玉,如果有任何問題歡迎大佬補充


在一開始AI繪剛紅的時候,是看西洽有人分享用AI畫大奶維多利亞美女,當時就有跟著教學把stable diffusion弄來玩玩了,但除了抄抄大奶維多利亞美女的咒文之外,其他自己想畫的圖並不怎麼樣。後來在西洽看了cybermeow大的文章,覺得能煉出特定角色的模型很實用,可以拿來畫我推的V,於是跟著YT教學一步步學著怎麼用dreambooth,然而顯存不夠只好去租3090,還因為國外網站卡在卡刷不過,跑去試用台智雲,搞到台智雲打給我們教授推銷ww,那時好像只有sd1.3跟wd幾版我忘了,反正用dreambooth fine-tune wd出來的結果不是很好,雖然還是有搞了張幼妲下蛋。後來novel ai模型洩漏出來以後台智雲的試用期也過了,加上訓練embedding內建在webui以後太方便,用我這3070 8g的顯卡隨便煉,也就忘了dreambooth這件事。

但前陣子漸漸覺得遇到瓶頸,為了複雜的場景prompt下太多,角色的特徵很容易會被抹掉,原本就不是很準確的特徵在複雜prompt下更難骰出好圖。想起還有比較準確的dreambooth可以用,想說也許經過幾個月的發展dreambooth能在低顯存的環境下訓練,一開始的確有在reddit看到去年十月的文章說dreambooth可以在8g vram顯卡上訓練,但我試了無法,而且近期的文章也都說要求10g顯存。那本地不能訓練,但我又不想在colab上跑,除了要掛載雲端硬碟然後還要清空間放模型很煩之外,邪惡的東西也不能在上面訓練,於是dreambooth這件事又被我放置了。


直到最近聽說有個新技術,LoRA,不僅訓練出來的模型很小對硬碟空間很友善,效果貼近dreambooth的同時,重點是,真的能在8g顯存的顯卡上訓練了。LoRA(Low-rank Adaptation)這個技術到底是什麼呢?我們來看一下原github上的"簡單"解釋:
https://i.imgur.com/FltrSEe.png


簡單來說,不直接微調模型權重,而是訓練一個偏移量作用於於模型上,而且重要的是將這個高秩的模型權重偏移量拆開,用低維度的矩陣相乘去近似它,因此可以節省空間,而且能以比dreambooth更快的速度進行微調。


===================================

正題開始,如何訓練LoRA?我知道現在webui的dreambooth插件也可以進行LoRA的訓練,但除了requirements容易衝突之外,重點是當我選了7.多g的模型要創建dreambooth模型時,直接CUDA OOM (吐血,第一步都做不了,所以這裡不使用webui插件訓練LoRA。

首先,安裝python 3.10.6與git,相信有裝webui的各位都有了,如果沒有可以去官網抓,或是用包管理器chocolatey直接安裝。

接著一步一步手把手教學
git clone https://github.com/kohya-ss/sd-scripts.git
將庫clone下來
cd sd-scripts
進入資料夾
python -m venv --system-site-packages venv
開一個獨立的虛擬python環境
.\venv\Scripts\activate
啟動虛擬環境 *之後每次要訓練,記得都要先啟動虛擬環境
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install --upgrade -r requirements.txt
pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/f/xformers-0.0.14.dev0-cp310-cp310-win_amd64.whl
安裝依賴項
cp .\bitsandbytes_windows\*.dll .\venv\Lib\site-packages\bitsandbytes\
cp .\bitsandbytes_windows\cextension.py .\venv\Lib\site-packages\bitsandbytes\cextension.py
cp .\bitsandbytes_windows\main.py .\venv\Lib\site-packages\bitsandbytes\cuda_setup\main.py
複製庫文件
accelerate config
設定完成


接下來要用 https://github.com/derrian-distro/LoRA_Easy_Training_Scripts 提供的腳本進行訓練
wget -O lora_train_popup.py https://raw.githubusercontent.com/derrian-distro/LoRA_Easy_Training_Scripts/main/lora_train_popup.py
將腳本下載下來 *如果沒有wget,去用chocolatey裝一個,或是 https://github.com/derrian-distro/LoRA_Easy_Training_Scripts/blob/main/lora_train_popup.py 文件右上角Raw右鍵->另存連結


accelerate launch --num_cpu_threads_per_process 12 lora_train_popup.py
開始訓練
接下來會彈出一系列視窗,可以調整選項
Do you want to load a json config file?
是否載入設定,否
Select your base model
選擇基底模型,如anything-v4.5.ckpt
Select your image folder
選擇訓練圖像資料夾 *如何準備訓練資料等等會說
Select your output folder
選擇儲存LoRA輸出資料夾
Do you want to save a json of your configuration?
可以儲存設定檔以供第一步使用
https://i.imgur.com/M91Xpa8.png

記憶體<16g 設為1
Do you want to use regularization images?
是否使用正則化訓練圖片 *一樣等等講
Do you want to continue from an earlier version?
可以從中斷的訓練中回復,否
https://i.imgur.com/KzUWvcD.png
只有8g,Cancel使用預設為1
https://i.imgur.com/62tnNug.png
訓練次數,200或更高,訓練圖片少者適量調高
https://i.imgur.com/Y4wtNYI.png
還記得前面說過LoRA將高秩矩陣近似成低維矩陣相乘嗎? 這就是矩陣相乘中間的維度,可以視為LoRA模型的深度/複雜度,可以視情況調整,通常保持預設即可
https://i.imgur.com/tAPF9pS.png
訓練的參數,保持預設即可
https://i.imgur.com/7eCQ29d.png
訓練圖片的解析度
https://i.imgur.com/YG39Hyc.png
學習率,保持預設即可
https://i.imgur.com/1db1cRU.png
8g顯存,保持預設即可 *我不是很確定這是幹嘛的,也許可以微調CLIP使LoRA的效果更好,歡迎大佬補充
https://i.imgur.com/IBLcgu1.png
8g顯存,保持預設即可 *我不是很確定這是幹嘛的,也許可以微調unet使LoRA的效果更好,歡迎大佬補充
https://i.imgur.com/upMdQJn.png
學習率調整策略,保持預設即可 *有"linear", "cosine", "cosine_with_restarts", "polynomial", "constant", "constant_with_warmup" 這些可以選
https://i.imgur.com/9h9fDex.png
前一步的依賴選項,保持預設即可
Do you want to save epochs as it trains?
是否儲存中途訓練結果,是
https://i.imgur.com/Z6Q2NQN.png
多久儲存一次訓練結果,根據自己的硬碟空間作調整,通常設10、20或50
Do you want to shuffle captions?
是否將訓練資料的tag(prompt)打亂順序,是
Do you want to keep some tokens at the front of your captions?
是否保留前幾個tag不打亂順序,是
https://i.imgur.com/Hurfs5D.png
保留多少個tag,通常設定1~3
Do you want to have a warmup ratio?
學習率調整策略,否
Do you want to change the name of output checkpoints?
是否更改輸出模型檔名,否


接下來就會開始訓練,等待訓練完成吧
https://i.imgur.com/CNDFeCU.png



如何準備訓練資料
先貼一張圖
https://i.imgur.com/UnnBT7P.png

訓練圖片資料夾的結構
子資料夾的名稱為"重複次數_關鍵字"***重要:日後使用LoRA的關鍵字在此設定
可以為一個LoRA模型訓練不同概念,重複次數可以調整資料平衡,圖越少適當調高

子資料夾內的圖片與文檔怎麼來? 去蒐集要訓練角色的圖片吧,少至10張,多至上百上千張都可以。
訓練圖片預處理使用webui來做,如果之前有訓練過embedding應該不陌生
https://i.imgur.com/h1NVCSp.png

先幫webui加上--deepdanbooru參數
開啟webui之後 訓練->圖像預處理
指定來源目錄、輸出目錄與解析度
底下選項
建立鏡像副本
-> 勾,訓練圖片越多越好,但如果訓練的人物有標誌性特定方向的頭飾、配件,別勾
分割過大的圖像、自動焦點裁切、Auto-sized crop
-> 處理圖片大小,擇一,如果圖片長寬比不符再使用。推薦可以先使用Brime手動裁切就不必使用。
使用 BLIP 生成說明文字(自然語言描述)
使用 deepbooru 生成說明文字(標記)
-> 自動給圖片上tag(prompt),擇一,通常二次元圖片使用deepbooru比較好。 tag會存進同名.txt檔
像這樣子:
https://i.imgur.com/1iIRfZv.png

另外還有正則化圖片,如果圖片太少(20張以內),或是圖片視角不夠多樣化,通常會準備正則化圖像幫助訓練,例如你要訓練一個女V,那麼你就去收集動漫女孩的圖,那如果你不想自己找怎麼辦?也可以直接用生成的。那要準備幾張正則化圖片呢?根據網路上各式各樣的教學,我看過說準備1:1,也看過說要10倍的,我在這部分沒有太多經驗可以推薦。

===================================

教學完成啦,可以開始訓練自己的LoRA模型了!

在這邊推薦各位一個網站,civitai,上面可以找到很多別人訓練完的LoRA模型,可以拿來混搭。

接下來分享一些我產的圖吧,各種LoRA模型混搭真是好玩。另外,這位是我的推,ReLive_灰妲,講話風趣,雜談之鬼,總是不知不覺就到三點,雖然平時沒什麼氣質,只有炸雞腿的香味,但氣質來的時候超婆的,重點是還有我真正的主推,幼妲,幼妲簡直就是天使,蘿莉真是太棒了!!

大波鸚灰妲
https://i.imgur.com/oNJB01X.png


幼妲抱著小小妲
https://i.imgur.com/lXSwDOK.png

幼妲妮亞
https://i.imgur.com/4KrVvH8.png

幼妲,孤獨搖滾ed ver.
https://i.imgur.com/6qQmVSY.png

迷之陰影(X
https://i.imgur.com/mfYUahk.png


--

※ PTT 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 124.218.206.38 (臺灣)
PTT 網址
wres666:轉錄至看板 Test

02/10 05:58

wres666:轉錄至看板 AI_Art

02/10 05:59

toulio8102/10 06:03推!很詳細的教學

eightyseven02/10 06:22

Taichun31802/10 06:48

toyeee02/10 06:55好文先推

longlyeagle02/10 07:01不要這麼認真好嗎

ro2211317502/10 07:07推,之後來試試

se210402/10 07:18

lone71402/10 07:27好詳細

KevinHHY02/10 07:29推 晚點來玩玩看

ILoveOppai02/10 07:34大師

louie090902/10 07:51最少顯存要多少才能跑訓練?

wk41593702/10 07:54

tommy8852002/10 07:59可以

IHateNMR02/10 08:10看來我比猴子還爛

winniekuma02/10 08:26感謝 正好需要 晚點來拜讀一下

vios1000902/10 08:36

guogu02/10 08:39謝謝你讓我知道自己是草履蟲

greed381902/10 08:50

cloki02/10 08:55推教學

avans02/10 09:13推教學!

JSLee91402/10 09:24推教學

ImCasual02/10 09:31

FoxWu93006502/10 09:39如果有需要 這裡有Colab版本的

greg9032602/10 09:56

winniekuma02/10 10:44也感謝FoxWu

info199402/10 11:20這邊說說有多少猴子

qwe7897102/10 12:27假日研究

silentneko02/10 13:10猴子....好強....

eric0082602/10 15:47推整理!LoRA問世後各種模型真的如雨後春筍

jkkkj12302/10 19:16這迭代越來越快了吧 什麼時後能突破限制自由探索性癖

ack001102/10 19:22我不當人了 吱吱

hitlerx02/12 02:38猴子... 也太強 了吧...