AI 學習紀錄 – 使用 Docker 架設 Stable Diffusion 進行 Lora 微調

Stable Diffusion 最近出了 SDXL 1.0 版本 (以下簡稱SD),應該是畫質更好,提示詞更簡單。不過其實 Stable Diffusion 我也沒什麼在用,就是偶爾玩一下而已。最近想要產生一些內容農場的文章,於是研究了一下語言大模型、TTS,現在就缺這自動產生圖片了。所以就研究了一下 SD, 但發現提示詞不是那個容易,比較 Dallee-3 笨了很多。

但 SD 其實也不是不好,就是要多調參數和提示詞。所以就先從比較有趣的 Lora 微調模型,開始來研究一下。

本文相對而言,還蠻複雜的,是用 Docker 來架設 SD,和微調環境。由於這種目的是少用變化大,所以決定用 Docker 來進行。本文還是用最受歡迎的川普照片來做為範例,若川建國大大有不滿意,隨時跟我聯絡喔~~~

 

建立 Docker 容器

用下面命令來建立 docker 容器

安裝套件

編輯 /etc/ssh/sshd_config,將下面項目改成如下

  • PermitRootLogin yes
  • UsePAM no

然後用 passwd 設定密碼, 改成一個非空的值。

執行下列命令,在容器啟動時,啟用ssh server

亦可用下列面命令,立刻啟動 ssh server

安裝 miniconda

因為會同時跑2個專案,所以下載 miniconda 進行安裝。安裝流程與 anaconda 相同,這邊不再贅述。

安裝 Stable Diffusion

使用ssh 登入,先創建 conda 環境

接著下載專案

編輯  webui.sh, 將下列項目設定如下

  • use_venv=0
  • can_run_as_root=1

接著開始執行 webui.sh,程式自行安裝所需套件

若中間有錯誤,可試著重裝 torch 來解決問題

 

安裝 Kohya

使用ssh 登入另一個連線(重要! 避免環境衝途),先創建 conda 環境

接著下載專案

同上執行時也可能出現錯誤,也是重安裝 torch. 有預到再試試看,沒遇到就可忽略。

但在 koyha 啟動時,會檢查套件的版本,錯誤就會被重安裝,所以要改一下 requirements.txt,改成自己安裝的最新版本。

另外有時也會講 “accelerator” 沒設定,要你自己下 “accelerator config”做設定。執行該命令,最後面的精度選 fp16,其它照預設值即可。

 

檔案預處理與自動產生提示詞

將本文的範例檔案透過 ssh 複製到根目錄下,將其解壓縮。

接著用瀏覽器連到 SD 的網頁 http://IP:7860 來使進行自動檔案載切,與自動判定提示詞。

進入頁面後,選擇 Train –> Preprocessing Images, 依下面描述填入設定值

  • Source directory:  /root/raw/30_trump/
  • Destination directory: /root/out/30_trump/
  • Use BLIP for caption: 勾選

接著就可以選擇 Preprocess 來進行處理,會先開始下載其它模型 (應該是圖生文的),再進行處理。

處理完後,可以看到 /root/out/30_trump 裡面就會有一圖搭配一文的檔案。而同名文字檔, 就是該圖片的描述。接著將每一個文字檔最後面都加上 “, trumpboss” ,來將此字與圖片產生相關,往後用這個模型微調,就會套用該圖片的某些風格。範例裡面有一個 addtag.sh,可方便直接加入上面的 tag

關於圖片提示詞的修改,我並沒有特別去研究,有興趣的可能要再自己找找。看影片不專業的印象,修改方向如下

  • 想要該圖片風格可替換的部份,就不要在文字檔案描述
  • 想要某特定項目不要替換的,就要在圖片裡描述。

Kohya 進行 Lora 訓練

打開瀏覽器 IP://7861 開啟正在運行 Kohya。設定參數如下:

Lora –> Source Model –> Model Quick Pick, 設定為 runwayml/stable-diffusion-v1-5

Lora –> Folders,

  • Image  Folder: /root/out
  • output folder: /root/model
  • Module output name: trump

Lora –> Parameters

  • Preset: sd15-EDG_LoraOptiSettings
  • Train batch size: 4
  • Epoch: 10
  • save every n epoch: 5

接著就可以到最下面按下 “start trainning”,接著也會先下載模型,實際訓練接, 以4090訓練的話,大概是 5 分鐘可完成。

這邊要注意的是,若你最重要套用的模型的版本要和Lora訓練時的版本是一樣的,這麼都是使用 1.5 當範例。

訓練完成後將檔案複製到 SD 的 Lora 下

目錄命名原則

在處理過後的圖檔目錄,是用 30_trump 來命令。具說30是一張圖片的要訓練的次數,覺得時間花太久,或不夠好,都可以調調看。

SD 套用 Lora 模型

重新啟動 SD, 連入後在提示詞填入 「a man like trumpboss with a T-shirt <lora:trump:0.5>」。在Lora Tab 上按下訓練好的模型,就會自動帶入參數。此時再調整權重,試試看不同的效果。

 

結語

整個過程不算太難,但由於步驟太多顯得有點複雜,另外套件安裝常常也會發生錯誤。建議要長期使用的,安裝在 docker 內會比較省麻煩。Kohya 是比較容易出錯的部份,感覺每次安裝狀況都不太一樣 @@,希望往後有更方便的套件。

 

還有下面參考的連結裡面有一句話,真是一句話打醒夢中人「一个血的教训是:一个好的模型随便出的图,可能会比你费劲心血、测试修改上百遍的Prompt所输出的结果还要好

參考連結

我所記錄的都很簡化,要瞭解更細節的,可參考更多的教學。第4個參考資料是個 40 分鐘的 Youtube 影片,比較全面,一步一步教學。

 

 

 

 

Leave a Reply(Name請以user_開頭,否則會被判定會垃圾息)

請輸入答案 ÷ 1 = 5