前往
大廳
主題

Stable Diffusion 性能測試與加速方法

獵奇一哥 | 2022-12-08 20:15:45 | 巴幣 4340 | 人氣 21015

這篇原本是在場外回答的,是在10月回答,搬回小屋方便維護,現在Stable diffusion不斷更新後,速度會越來越快。
---

我想先說明一下,測試的目的主要是我一直對自己硬體的工作分配做研究
到底什麼樣狀況下的搭配,速度最快也最符合生產效益

先說結論
  1. 複測,CPU並不影響整體結果,無論速度與效果
  2. 顯卡世代落差有顯著影響
  3. Notebook GPU並沒有比較弱
  4. VRAM對圖片生成效果較不影響,但是對於修正圖片影響很大,至少要2GB RAM,GPU性能很差都能啟動。不過速度上,VRAM影響就很大,按照文件,使用到lowvram或medvram都會大幅下降性能,最差狀況會降10倍性能(以3090測試設定lowvram)。
  5. DRAM沒有16GB無法穩定運作,但32GB與16GB就沒有差異
  6. HDD與SSD只有在首次啟動有影響,後續速度無差異,建議用HDD就好,除非你有多個checkpoint要即時更換使用
  7. 第一次跑跟第二次跑會有速度落差,有時候差一倍
  8. 隨機與限定人物風格,都不影響速度
  9. Extras是依設定而有VRAM要求,例如
    BSRGAN 4倍:3070、1070 才OK!
    SwinIR 4倍:3070~1030 都OK!

其他補充
  1. 測試有指定參考藝術家,此次沒測試不參考藝術家會有什麼差異
  2. 不確定自己訓練的模型是否會有變化
  3. 後續有繼續測試xformers功能,現在已經會自動安裝,速度差異不小,建議要開
    額外寫的文章
    https://forum.gamer.com.tw/Co.php?bsn=60076&sn=88040387

個人心得
txt2img擅長製作各種概念的創作,Extras可以主要是優化風格,而img2img以DDIM的simpling step驗證訓練後,能生成細節

我認為能套用在各職業身分的情境:
  1. 想像驗證:concept artist
    如你職業是concept artist,你腦中可能有大量的想法,如果你想用字詞驗證想像,那最爛的電腦就可以做,以txt2img,Euler a(step 20)大量生成,建議在config設定能一次生100張,或者應用script批次處理不同prompt關鍵字,請參照他們的wiki,個人用 GTX1030搭配自己寫的程式來自動塞入不同關鍵字,有即時需要想的,就是GTX1070。
    補充一下,啟用xformers 後,最經濟的使用變成img2img,因此當你確認prompt後,在做矩陣測試時應該使用1030去跑
  2. 修圖方向驗證: illustrator或Compositor
    如果你職業是illustrator或Compositor,例如你化好一張上色圖,你可以使用Extras跑完再做img2img動作,不過Extras建議拿 "1070" 以上中高階顯卡,低階的會跑非常久,甚至功能開了也不會出現。此外你要訓練出符合自己風格的model,建議就一定要3090以上,個人用 GTX1070跟RTX3090處理,GTX1070合適處理Extra,RTX3090可以跑img2img以及高細節圖片做參考
  3. 嘗試設定與即時驗證: Technical Artist
    如果你是Technical Artist,寫好程式馬上要驗證成敗,就是用接近最好的GPU,我用 RTX3070來配合開發,但如果公司有公式化圖庫需要配合製作自己的model,那還是RTX3090以上。
Environment Artist、Animator或Effect artist沒經歷過不知道,自動3D建模這塊應用還沒能到個人工作室或多數公司,所以我覺得3D那塊可能不好討論。
若你有什麼工作經歷,是否也能一同分享一下寶貴經驗。


分享實測

目前使用Stable Diffusion,並採用NovalAI Model

如果你不知道自己硬體,可以用下面這段語法放到CMD裡面用,或者桌面建一個txt檔案,把內容加上儲存,然後回到桌面,把txt副檔名更名為bat,之後點兩下執行即可


chcp 65001
REM echo "==========CPU Info==========" >> Hardware_Info.txt
wmic cpu get name, numberofcores, numberoflogicalprocessors, maxclockspeed >> Hardware_Info.txt
REM echo "==========RAM Info==========" >> Hardware_Info.txt
wmic computersystem get totalphysicalmemory >> Hardware_Info.txt
REM echo "==========GPU Info==========" >> Hardware_Info.txt
wmic path win32_VideoController get name, videoarchitecture, adapterram >> Hardware_Info.txt


他能生成你硬體資訊到Hardware_Info.txt,如下
---
MaxClockSpeed  Name                                       NumberOfCores  NumberOfLogicalProcessors  
3701           Intel(R) Xeon(R) CPU E3-1230 V2 @ 3.30GHz  4              8                          
TotalPhysicalMemory  
17119744000          
AdapterRAM  Name                              VideoArchitecture  
            Microsoft Remote Display Adapter  5                  
2147483648  NVIDIA GeForce GT 1030            5                  
---

如NVIDIA GeForce GT 1030就是你的顯卡,並且可以知道2GB的RAM,你也可以直接貼整段資訊上來分享


  • txt2img使用Euler a費時測試
初步使用Euler a,一般認為Euler a限制在30以下最好,後面樣本再多都不會提升

補充一下:
感謝後面有人補充
確實如同後面有人說的,寫限制XX最好的說法,不太好,是可以嘗試不同步數來試試,
不過當初會這樣寫主要原因是 “成本與品質” 的角度去思考,因為大多數reddit跟一些討論,大概這問題在8月就吵過一輪,不過最終多數實測各種變化,Euler Ancestral無論何種情境,大概在20步完成學習,30步之後品質就不會提升,不過在30-120步左右,Euler Ancestral 會呈現方式是隨機增加物件,這就確實會有美好的機遇與邂逅。
不過有空我會做些完整實驗來看看,目前我也只是抽樣測試跟看討論。

其他人對各種方法測試如下

---
prompt:
((nipakupa)).artist, original, 1girl, :d, arm at side, bag, bangs, black hair, black jacket, black thighhighs, blue scarf, blurry, blurry background, blush, breasts, bus stop, colored tips, cowboy shot, gradient hair, green eyes, green hair, grey sweater, hair between eyes, jacket, long sleeves, looking at viewer, medium breasts, multicolored hair, neck ribbon, open mouth, outdoors, pleated skirt, ribbon, scarf, school bag, school uniform, shirt, short twintails, shoulder bag, sidelocks, skirt, smile, solo, sweater, teeth, thighhighs, twintails, two-tone hair, upper teeth, white shirt, white skirt, zettai ryouiki, absurdres, commentary request, ((highres)), Kissable lips, pretty face

Negative prompt:
((((ugly)))), (((duplicate))), ((morbid)), ((mutilated)), (((tranny))), (((trans))), (((trannsexual))), (hermaphrodite), [out of frame], extra fingers, mutated hands, ((poorly drawn hands)), ((poorly drawn face)), (((mutation))), (((deformed))), ((ugly)), blurry, ((bad anatomy)), (((bad proportions))), ((extra limbs)), cloned face, (((disfigured))). (((more than 2 nipples))) , out of frame, ugly, extra limbs, (bad anatomy), gross proportions, (malformed limbs), ((missing arms)), ((missing legs)), (((extra arms))), (((extra legs))), mutated hands, (fused fingers), (too many fingers), (((long neck))), ahoge, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry

Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 3488011985, Size: 512x512, Model hash: 925997e9, Clip skip: 2
---


實測性能花費時間的表現:

3070 (Notebook)
Time taken: 15.17s
Time taken: 8.66s
Time taken: 8.19s
Time taken: 8.06s

1070
Time taken: 44.53s
Time taken: 40.78s
Time taken: 40.74s
Time taken: 40.76s

1050 (Notebook)
Time taken: 2m 23.67s
Time taken: 2m 20.60s
Time taken: 2m 21.96s
Time taken: 2m 26.20s

1030
Time taken: 3m 48.16s
Time taken: 3m 26.30s
Time taken: 3m 25.49s
Time taken: 3m 25.49s


  • txt2img使用DDIM費時測試
使用DDIM,建議sampling step至少40以上才有效,越高細節會越多,但超過90通常效果不佳
建議先用40跑一次,確定細節正確後,在左下資訊欄中的seed拿來用,限制這個作品長相後讓她繼續演算細節
```
Steps: 40, Sampler: DDIM, CFG scale: 10, Seed: 547253641, Size: 512x512, Model hash: 925997e9, Clip skip: 2
```

3070 (Notebook)
Time taken: 14.56s
Time taken: 14.93s
Time taken: 14.59s

1070
Time taken: 1m 13.27s
Time taken: 1m 13.19s
Time taken: 1m 13.33s

1050 (Notebook)
Time taken: 2m 56.78s

1030
Time taken: 4m 22.91s

測試中發現,
如果sampling step > 80
3070僅需
1m 27.44s
1070會達到
19m 19.31s
雖然細節肉眼可見提升,但不見得算得好,建議先跑40再以該seed跑90

此外Extras
Upscale: 4, model:BSRGAN  
Upscale: 4, visibility: 1, model:SwinIR_4x
1070 跟3070,都在1~3秒完成
但1050跟1030同樣事情都會超過1~2分鐘,所以拿低階電腦跑Extras是浪費時間,比例超過60倍。


  • txt2img生成結果比較

RTX3070

GTX1070:

GTX1050:

GT1030:

你會發現顯卡對於生成結果並無影響


  • img2img各種效果修正測試

RTX3070:
512^2 (txt2img)

1024^2 (img2img)
透過img2img二次轉換,細節就更加合乎邏輯,不過還是有些地方有些怪怪

GTX1070:
512^2 (txt2img)

1024^2 (img2img)
在Extra 有先做Anime重新演算再丟回img2img
整體來說細節就正常一點,其中肉感與布料紋路都改善不少

我Extra Anime設定是這樣,在setting可以開啟功能,如果還是不會操作建議讀熟Automatic1111的文件,不過用機器學習降噪方案非常多,希望後續有機會分享

在google認知,這是渋谷凜
動漫人物常常長得87%相似,在我腦中這傢伙明明就是妮可

GTX1050
512^2 (txt2img)
沒有辦法向上提升


GT1030
512^2 (txt2img)
沒有辦法向上提升



加速方法

前陣子研究xformers,多數測試認為能增加1.5倍速度,原始教學過程很冗長,不過後來發現他能自動裝xformers

結論 :
快約1.5~3倍,如1070改前40秒,改後14秒。
其中GT1030這種低階顯卡速度,在img2img更快了4倍。
發現僅需 set COMMANDLINE_ARGS= 加上 --xformers (webui-user.bat),啟動時就會自動裝,過程快速而不需要額外學習什麼,只要注意你版本即可
安裝與版本,因為我不知道主程式什麼時候加上自動裝,況且七天前還有youtube上架傳統xformers部署方式 (automatic1111整合的效率真高),因此主程式記得git pull,若不會下指令更新主程式,就建議自己重建一個乾淨的,xformers原先似乎只支援Python 3.10,所以至少裝Python 3.10版,至於CUDA我CUDA是 11.8,跟文件建議的11.3不同,看來沒有運作問題,建議重新啟動,因為img2img當下直接啟用並未看到效果。
其他注意的點:初次第一張快不少,可是還是比較花時間,如果設定連續出圖到一定數量,效益不明顯,新型顯卡影響不大,VRAM小的低階顯卡在txt2img也是增加不明顯。


加上方法
如圖

啟動程式時就會看到她要安裝,要等他完成



txt2img

基於前面測試

Steps: 20, Sampler: Euler , 512X512

--
1070 (沒有更改之前)
Time taken: 44.53s
Time taken: 40.78s

1070 (--xformers)
Time taken: 14.56s
Time taken: 12.24s

--
3070 (沒改之前)
Time taken: 8.66s

3070 (--xformers)
Time taken: 7.87s

--
1050 (沒改之前)
Time taken: 2m 20.60s

1050 (--xformers)
Time taken: 2m 10.05s

--
1030 (沒改之前)
Time taken: 3m 26.30s

1030 (--xformers)
Time taken: 3m 19.59s

經測試來看,txt2img僅對VRAM大的顯卡有直接的影響,GPU快慢影響就比較次要(1070跟3070雖然還是有一倍差距,但不會像之前差到這麼大,反之2GB就幾乎沒有變化)

img2img

因為automatic1111也持續變動程式,實際上有些速度以前快
在啟用xformers之前,我先對1070與1030做了一輪新測試

連續四張圖,Steps: 40, Sampler: Euler a , 576X1024

1070 (沒有更改之前)
Time taken: 1m 56.54s (單張29.135s)

1070 (--xformers)
Time taken: 1m 12.79s (單張18.1975)
不過實際上測試,只出一張只需15秒上下


比較讓我意外的是1030的進步幅度,非常驚人
Steps: 40, Sampler: DDIM, 512X512

1030 (沒改之前)
Time taken: 4m 22.91s

1030 (--xformers)
Time taken: 59.08s

1030在img2img的增長,已經逼近未使用xformers的中階顯卡,但是它的最大問題依舊是VRAM,他沒辦法產生超過 640^2的圖像

所以最大的影響是在img2img? 我沒時間測別的,不過xformers是CUDA記憶體利用的優化方案,所以可能其他功能也會有變化


2022/10/28 補充

嘗試增加
--opt-split-attention

VRAM太小沒影響
1060 3GB (--xformers)
Time taken: 19.88s

1060 3GB (--xformers --opt-split-attention)
Time taken: 19.83s

VRAM夠大就有影響
3070 (沒改之前)
Time taken: 8.66s

3070 (--xformers)
Time taken: 7.87s

3070 (--xformers --opt-split-attention)
Time taken: 4.04s


創作回應

感謝分享
2023-01-19 18:23:23
感謝分享, 我也來試看看新增-xformer 推看看低階顯卡.... (1060 6G)
2023-03-20 09:34:22

相關創作

更多創作