煉丹来颤!訓(xùn)練 stable diffusion 來生成LoRA定制模型

AI作畫

LoRA嗡午,英文全稱Low-Rank Adaptation of Large Language Models囤躁,直譯為大語言模型的低階適應(yīng),這是微軟的研究人員為了解決大語言模型微調(diào)而開發(fā)的一項(xiàng)技術(shù)荔睹。
比如狸演,GPT-3有1750億參數(shù),為了讓它能干特定領(lǐng)域的活兒僻他,需要做微調(diào)宵距,但是如果直接對(duì)GPT-3做微調(diào),成本太高太麻煩了中姜。

LoRA的做法是消玄,凍結(jié)預(yù)訓(xùn)練好的模型權(quán)重參數(shù)跟伏,然后在每個(gè)Transformer(Transforme就是GPT的那個(gè)T)塊里注入可訓(xùn)練的層,由于不需要對(duì)模型的權(quán)重參數(shù)重新計(jì)算梯度翩瓜,所以受扳,大大減少了需要訓(xùn)練的計(jì)算量。
研究發(fā)現(xiàn)兔跌,LoRA的微調(diào)質(zhì)量與全模型微調(diào)相當(dāng)勘高,要做個(gè)比喻的話,就好比是大模型的一個(gè)小模型坟桅,或者說是一個(gè)插件华望。

根據(jù)顯卡性能不同,訓(xùn)練一般需要一個(gè)到幾個(gè)小時(shí)的時(shí)間仅乓,這個(gè)過程俗稱煉丹赖舟!

主要步驟有以下這些,話不多說夸楣,開整!

1. 顯卡

首先是要有顯卡了宾抓,推薦8G顯存以上的N卡。然后就是裝GPU驅(qū)動(dòng)豫喧,可以參考我以前文章centos中docker使用GPU

2. 訓(xùn)練環(huán)境

自從有了docker石洗,我就不喜歡在宿主機(jī)上裝一堆開發(fā)環(huán)境了,所以這次就直接使用stable-diffusion-webui帶webui打包好的鏡像紧显,也方便訓(xùn)練完成以后測(cè)試讲衫。推薦一下 kestr3l/stable-diffusion-webui 這個(gè)鏡像,是基于 nvidia/cuda:11.7.1-devel-ubuntu22.04 鏡像孵班,本人親自測(cè)試過涉兽,可用的。
附一個(gè)我用的 docker-compose.yml 文件

version: "3"
services: 
  sd-webui:
    image: kestr3l/stable-diffusion-webui:1.1.0
    container_name: sd-webui
    restart: always
    ports:
      - "7860:7860"
      - "7861:7861"
    ulimits:
      memlock: -1
      stack: 67108864
    shm_size: 4G
    deploy:
      resources:
        limits:
          cpus: "8.00"
          memory: 16G
        reservations:
          devices:
            - capabilities: [gpu]
    volumes:
      # 這里主要是方便映射下載的模型文件
      - ./models:/home/user/stable-diffusion-webui/models:cached
      # 修改容器的默認(rèn)啟動(dòng)腳本重父,方便我們手動(dòng)控制
      - ./entrypoint-debug.sh:/usr/local/bin/entrypoint.sh:cached

entrypoint-debug.sh文件內(nèi)容:

#! /bin/sh
python3

可以去 civitai 下載 stable diffusion 的模型花椭,放到宿主機(jī)的 ./models/Stable-diffusion 目錄下面,也可以去下載一些LoRA模型丟在./models/Lora 目錄下房午。

模型準(zhǔn)備完畢了就可以跑個(gè) stable diffusion 圖形化界面試試看, 執(zhí)行./webui.sh -f --listen 命令矿辽,啟動(dòng)之前會(huì)下載安裝很多依賴包,國(guó)內(nèi)環(huán)境不太順郭厌,可以上代理安裝袋倔。

如果輸出以下內(nèi)容,則表示安裝成功:

root@cebe51b82933:/home/user/stable-diffusion-webui# ./webui.sh -f --listen

################################################################
Install script for stable-diffusion + Web UI
Tested on Debian 11 (Bullseye)
################################################################

################################################################
Running on root user
################################################################

################################################################
Repo already cloned, using it as install directory
################################################################

################################################################
Create and activate python venv
################################################################

################################################################
Launching launch.py...
################################################################
./webui.sh: line 168: lspci: command not found
Python 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0]
Commit hash: <none>
Installing requirements for Web UI
Launching Web UI with arguments: --listen
No module 'xformers'. Proceeding without it.
LatentDiffusion: Running in eps-prediction mode
DiffusionWrapper has 859.52 M params.
Loading weights [fc2511737a] from /home/user/stable-diffusion-webui/models/Stable-diffusion/chilloutmix_NiPrunedFp32Fix.safetensors
Applying cross attention optimization (Doggettx).
Textual inversion embeddings loaded(0): 
Model loaded in 16.0s (0.8s create model, 14.9s load weights).
Running on local URL:  http://0.0.0.0:7860

To create a public link, set `share=True` in `launch()`.

打開瀏覽器訪問:http://127.0.0.1:7860 或者 http://內(nèi)網(wǎng)ip:7860 就可以AI繪畫了


AI作畫
AI美女
AI美女

不得不說 chilloutmix_NiPrunedFp32Fix 模型生成的圖片是針不戳??折柠!

3. 安裝訓(xùn)練圖形化界面

為了降低訓(xùn)練門檻宾娜,這里選用的是基于Gradio做的一個(gè)WebGui圖形化界面,該項(xiàng)目在GitHub上叫Kohya's GUI扇售。

# 下載項(xiàng)目
git clone https://github.com/bmaltais/kohya_ss.git
# 執(zhí)行安裝腳本
cd kohya_ss
bash ubuntu_setup.sh

由于是在docker內(nèi)部執(zhí)行前塔,ubuntu_setup.sh 腳本可能有問題嚣艇,所以我一般是直接進(jìn)入容器,手動(dòng)單條執(zhí)行

apt install python3-tk
python3 -m venv venv
source venv/bin/activate
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install --use-pep517 --upgrade -r requirements.txt
pip install -U -I --no-deps https://github.com/C43H66N12O12S2/stable-diffusion-webui/releases/download/linux/xformers-0.0.14.dev0-cp310-cp310-linux_x86_64.whl

執(zhí)行accelerate config命令华弓,生成對(duì)應(yīng)配置文件食零,選項(xiàng)如下:

(venv) root@cebe51b82933:/home/user/kohya_ss# accelerate config
2023-03-13 06:45:22.678222: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2023-03-13 06:45:22.922383: E tensorflow/stream_executor/cuda/cuda_blas.cc:2981] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
2023-03-13 06:45:23.593040: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-11.7/lib64:/usr/local/nvidia/lib:/usr/local/nvidia/lib64
2023-03-13 06:45:23.593158: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-11.7/lib64:/usr/local/nvidia/lib:/usr/local/nvidia/lib64
2023-03-13 06:45:23.593177: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.
--------------------------------------------------------------------------------------------------In which compute environment are you running?
This machine                                                                                      
--------------------------------------------------------------------------------------------------Which type of machine are you using?                                                              
No distributed training                                                                           
Do you want to run your training on CPU only (even if a GPU is available)? [yes/NO]:NO            
Do you wish to optimize your script with torch dynamo?[yes/NO]:NO                                 
Do you want to use DeepSpeed? [yes/NO]: NO                                                        
What GPU(s) (by id) should be used for training on this machine as a comma-seperated list? [all]:all                                                                                                
--------------------------------------------------------------------------------------------------Do you wish to use FP16 or BF16 (mixed precision)?
fp16                                                                                              
accelerate configuration saved at /root/.cache/huggingface/accelerate/default_config.yaml

4. 啟動(dòng)訓(xùn)練圖形化界面

執(zhí)行命令python kohya_gui.py --listen 0.0.0.0 --server_port 7861 --inbrowser --share

(venv) root@cebe51b82933:/home/user/kohya_ss# python kohya_gui.py --listen 0.0.0.0 --server_port 7861 --inbrowser --share                                                                         
Load CSS...
Running on local URL:  http://0.0.0.0:7861
Running on public URL: https://49257631b1b39d3db5.gradio.live

This share link expires in 72 hours. For free permanent hosting and GPU upgrades (NEW!), check out Spaces: https://huggingface.co/spaces

這時(shí)候?yàn)g覽器就可以打開http://127.0.0.1:7861 端口了,界面如下:


訓(xùn)練web界面

5. 準(zhǔn)備要訓(xùn)練的圖片

找到你要用來訓(xùn)練的一些圖片放到統(tǒng)一文件夾下寂屏,建議15張以上贰谣,我這里就用湯唯的照片:


原始圖片文件夾

然后打開stable diffusion webui來預(yù)處理這些圖片:


預(yù)處理圖片

點(diǎn)擊Preprocess按鈕,等待處理完成迁霎。順利的的話會(huì)在dest文件夾下生成512*512的圖片吱抚,和描述詞文件

image.png

6. 開始訓(xùn)練

我們?nèi)ビ?xùn)練的界面,需要設(shè)置一堆參數(shù)考廉,直接看圖吧

基礎(chǔ)模型選擇
文件夾選擇
訓(xùn)練參數(shù)配置

建議新建立文件夾秘豹,比如我這里叫train_lora,在文件夾里創(chuàng)建image芝此、log和model三個(gè)文件夾憋肖,其中因痛,image里存放的圖片就是預(yù)處理生成的圖片婚苹。
image里的預(yù)處理圖片不能直接放在里面,需要在里面創(chuàng)建一個(gè)文件夾鸵膏,文件夾的命名非常有講究膊升。
已知,LoRa的訓(xùn)練需要至少1500步谭企,而每張圖片至少需要訓(xùn)練100步廓译。
如果我們有15張或者15張以上張圖片,文件夾就需要寫上100_Hunzi债查。
如果訓(xùn)練的圖片不夠15張非区,比如10張,就需要改為150_Hunzi盹廷,以此類推征绸。
這部分很重要,一定要算清楚俄占。
當(dāng)然管怠,這也正是LoRa強(qiáng)大的地方,用這么少的圖片即可完成訓(xùn)練缸榄。

點(diǎn)擊訓(xùn)練按鈕渤弛,開始煉丹:


煉丹

生成的丹就在train_lora/model文件夾下面:


image.png

最終使用這個(gè)丹的生成的圖片效果展示:


image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市甚带,隨后出現(xiàn)的幾起案子她肯,更是在濱河造成了極大的恐慌佳头,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晴氨,死亡現(xiàn)場(chǎng)離奇詭異畜晰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瑞筐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門凄鼻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人聚假,你說我怎么就攤上這事块蚌。” “怎么了膘格?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵峭范,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我瘪贱,道長(zhǎng)纱控,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任菜秦,我火速辦了婚禮甜害,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘球昨。我一直安慰自己尔店,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布主慰。 她就那樣靜靜地躺著嚣州,像睡著了一般。 火紅的嫁衣襯著肌膚如雪共螺。 梳的紋絲不亂的頭發(fā)上该肴,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音藐不,去河邊找鬼匀哄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛佳吞,可吹牛的內(nèi)容都是我干的拱雏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼底扳,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼铸抑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衷模,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤鹊汛,失蹤者是張志新(化名)和其女友劉穎蒲赂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刁憋,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滥嘴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了至耻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片若皱。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖尘颓,靈堂內(nèi)的尸體忽然破棺而出走触,到底是詐尸還是另有隱情,我是刑警寧澤疤苹,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布互广,位于F島的核電站,受9級(jí)特大地震影響卧土,放射性物質(zhì)發(fā)生泄漏惫皱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一尤莺、第九天 我趴在偏房一處隱蔽的房頂上張望旅敷。 院中可真熱鬧,春花似錦缝裁、人聲如沸扫皱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至氢妈,卻和暖如春粹污,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背首量。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工壮吩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人加缘。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓鸭叙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親拣宏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沈贝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容