Stable Diffusion提速方法,可以提速80%!

此方法為N卡專屬。非N卡用戶不用往下看了。
方法是
利用wsl2對(duì)于機(jī)器學(xué)習(xí)的優(yōu)化來提速
利用空置的核顯
up配置為i7-12800hx,3070ti Laptop,win11 Pro 22h2。
0.安裝WSL2、CUDA、cuDNN
首先以管理員身份運(yùn)行PowerShell,運(yùn)行下面的指令:
注意!這會(huì)開啟VBS,可能會(huì)影響游戲性能。解決辦法后面會(huì)講。
設(shè)置好后重啟電腦,打開微軟應(yīng)用商店,搜索Ubuntu,選一個(gè)Ubuntu版本下載。最好選擇帶LTS的,就是長期支持,意思就是會(huì)長期維護(hù)的版本。up這里下的是Ubuntu 20.04.5 LTS。
下載完成后打開PowerShell,運(yùn)行下面的指令:
然后打開Ubuntu,第一次運(yùn)行會(huì)提示輸入用戶名和密碼,按要求輸入即可。
下一步就是要下載cuda和cudnn了。這里并不需要在wsl2中安裝nvidia的驅(qū)動(dòng),因?yàn)閚vidia的驅(qū)動(dòng)是和最新版的wsl2相通的。如果不確定,則可運(yùn)行下面的指令來更新wsl:
來到https://developer.nvidia.com/cuda-toolkit-archive下載自己對(duì)應(yīng)版本的cuda。
不知道的可以在Nvidia控制面板里點(diǎn)擊左上角的幫助>系統(tǒng)信息,彈出一個(gè)窗口,再點(diǎn)擊組件頁就可以看到。


由于up的cuda版本是12.1,于是就點(diǎn)開里面的CUDA Toolkit 12.1.0。

點(diǎn)開后按下面的圖依次選擇Linux、x86_64、WSL-Ubuntu、2.0、deb(local)。

然后下面就會(huì)出現(xiàn)安裝命令。

注意!按照網(wǎng)站上顯示的命令安裝而不是up這里的顯示的指令安裝!
在Ubuntu里運(yùn)行安裝指令,其中可能會(huì)提示輸入密碼(Password),將剛剛創(chuàng)建用戶時(shí)的密碼輸入進(jìn)去即可。完成后,cuda便安裝完成。運(yùn)行下面的命令看是否成功安裝:
有類似輸出即安裝成功。

然后到https://developer.nvidia.com/rdp/cudnn-download下載cudnn。

首先點(diǎn)擊右上角注冊一個(gè)賬戶。其中需要填寫問卷,根據(jù)自身情況填寫即可。
然后勾選I?Agree,選擇自己對(duì)應(yīng)的cuda版本下載cudnn。由于up的cuda為12.1,所以點(diǎn)擊12.x。
此時(shí)會(huì)出現(xiàn)cudnn的各種安裝方式。選擇Local Installer for Linux x86_64 (Tar),然后會(huì)自動(dòng)瀏覽器會(huì)彈出下載框。選一個(gè)路徑等待下載完成。

下載完成后,按win+R彈出運(yùn)行窗口,輸入\\wsl.localhost,此時(shí)會(huì)以windows資源管理器訪問wsl2。打開Ubuntu>home>xxx,其中xxx是之前設(shè)置的用戶名。將剛才下好的文件移動(dòng)到此處,然后在Ubuntu命令行窗口里輸入以下指令:
其中yyy是之前下好的文件的名字。
此步驟完成后,cudnn便安裝成功。
1.在wsl2中部署Stable Diffusion
首先下載python環(huán)境的管理工具Anaconda。在wsl2中運(yùn)行下面的指令下載、安裝Anaconda:
安裝時(shí)按q跳過申明,有yes就輸入yes,其它保持默認(rèn)。安裝完成后,輸入下面的命令創(chuàng)建一個(gè)Stable Diffusion運(yùn)行的python環(huán)境:
和前面類似,有y就輸入y。然后運(yùn)行下面的命令檢查虛擬環(huán)境是否創(chuàng)建成功:
出現(xiàn)類似下圖的輸出便是成功。

輸入下面的指令退出python:
然后使用下面的命令將stable-diffusion-webui部署到wsl:
或者如果本機(jī)已經(jīng)有Stable Diffusion,直接用前面提到的方法用windows資源管理器整個(gè)文件夾復(fù)制到wsl里自己的用戶目錄下。
運(yùn)行下面的命令修改Stable Diffusion的配置:
接著輸入 228G 跳到第228行,也就是我們準(zhǔn)備修改的位置,然后按 a 進(jìn)入編輯模式,按照下面的代碼修改對(duì)應(yīng)位置的代碼,按 Esc 退出編輯模式,然后輸入 :wq 保存并退出。
小技巧:按 V 進(jìn)入行選擇模式,然后按 j 選擇對(duì)應(yīng)的行按 d 刪除,按 a 進(jìn)入編輯模式,將下面的代碼復(fù)制,再按 ctrl+v 粘貼。
注意!此處按鍵區(qū)分大小寫,在小寫情況下按 G?實(shí)際要按 shift+g !
退出后,運(yùn)行下面的指令創(chuàng)建輔助啟動(dòng)腳本:
類似地,按 a 進(jìn)入編輯模式,輸入下面的代碼,按 Esc 然后 按 :wq 退出并保存:
若顯存為8G以下,建議根據(jù)下面的參考添加參數(shù):
4-6G: --lowvram
6-8G: --medvram
然后運(yùn)行下面的命令改變權(quán)限:
然后輸入
啟動(dòng)webui。第一次啟動(dòng)會(huì)安裝各種庫,等待安裝完成。出現(xiàn)這段輸出便是啟動(dòng)成功。

翻到前面找到這個(gè)輸出:

inet后面便是wsl的ip地址。up這里的ip是172.22.214.178,也就是在瀏覽器里輸入172.22.214.178:7860就能訪問到stable diffusion了。這個(gè)ip地址在電腦首次啟動(dòng)時(shí)wsl會(huì)改變。根據(jù)自己的輸出改為x.x.x.x:yyyy。

此時(shí)的sd-webui是沒有任何外部插件、模型的??梢酝ㄟ^前面提到的方法將本機(jī)的stable diffusion模型、lora復(fù)制到wsl里。也可以在wsl里用wget命令去c站下載。插件可以通過Extensions界面輸入其git地址來安裝。至于漢化方法,可以搜索其它up的教程。由于up懂英文,就懶得漢化了。
最后需要注意的是底端是否顯示了torch: 2.0.0+cu118和xformers: 0.0.17rc482。torch2.0相比1.x效率略高。xformers則是加速計(jì)算的一個(gè)組件。
2.sd-webui在wsl2中和win11中的速度對(duì)比
使用模型的為ChilloutMix_NiPrunedFp32Fix。

下面為win11下運(yùn)行:


總用時(shí)為4分32秒。
下面為wsl2中運(yùn)行:

訓(xùn)練時(shí)的速度

總用時(shí)
總用時(shí)2分25秒。
可以看到同等參數(shù)下,速度提升達(dá)到80%以上!
從這里我們也可以大概推斷出,在原生Linux下部署能有更快的速度。感興趣的可以試一試,方法應(yīng)該也差不多。
3.利用核顯
此項(xiàng)優(yōu)化優(yōu)先級(jí)不高。可根據(jù)自身情況斟酌。
說是利用核顯,倒不如說是把普通程序放到核顯運(yùn)行,這樣就犧牲內(nèi)存騰出更多的顯存去跑圖片。在筆記本上就是關(guān)閉獨(dú)顯直連,然后在Nvidia控制面板里的全局設(shè)置選擇由核顯輸出就行,再對(duì)個(gè)別游戲單獨(dú)設(shè)置由獨(dú)顯輸出即可。有的筆記本不能動(dòng)態(tài)切換獨(dú)顯直連,要重啟,那么up的建議是不搞。
對(duì)于臺(tái)式機(jī),就是在BIOS里啟用核顯,然后安裝核顯驅(qū)動(dòng)。這里參考其他up的視頻。
4.在不影響WSL2的使用下關(guān)閉VBS
非游戲黨可以忽略此項(xiàng)。游戲黨可能比較介意VBS影響游戲性能,但又想玩AI畫圖。這里給出微軟官方的關(guān)閉方法。先給出鏈接:
https://learn.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage#disabling-virtualization-based-security
up這里的系統(tǒng)語言是英語,并不知道中文界面是怎樣,所以下列英文請參考微軟官方的翻譯。
首先搜索edit group policy,打開后依次打開Computer Configuration?>?Administrative Templates?>?System?>?Device Guard?>?Turn on Virtualization Based Security

選擇Disable,然后點(diǎn)Apply。

接著按win+R打開運(yùn)行,輸入regedit打開注冊表,找到
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\
里的EnableVirtualizationBasedSecurity和RequirePlatformSecurityFeatures
刪除掉即可。如果沒有就不用管。保險(xiǎn)起見可以先右鍵點(diǎn)擊DeviceGuard選擇導(dǎo)出進(jìn)行備份。
最后的最后給出封面。

