当前位置:首页|资讯|Stable Diffusion|人工智能|微软

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

作者:Unuseless发布时间:2023-04-11

此方法为N卡专属。非N卡用户不用往下看了。

方法是

  • 利用wsl2对于机器学习的优化来提速

  • 利用空置的核显

up配置为i7-12800hx,3070ti Laptop,win11 Pro 22h2。

0.安装WSL2、CUDA、cuDNN

首先以管理员身份运行PowerShell,运行下面的指令:

注意!这会开启VBS,可能会影响游戏性能。解决办法后面会讲。

设置好后重启电脑,打开微软应用商店,搜索Ubuntu,选一个Ubuntu版本下载。最好选择带LTS的,就是长期支持,意思就是会长期维护的版本。up这里下的是Ubuntu 20.04.5 LTS。

下载完成后打开PowerShell,运行下面的指令:

然后打开Ubuntu,第一次运行会提示输入用户名和密码,按要求输入即可。

下一步就是要下载cuda和cudnn了。这里并不需要在wsl2中安装nvidia的驱动,因为nvidia的驱动是和最新版的wsl2相通的。如果不确定,则可运行下面的指令来更新wsl:

来到https://developer.nvidia.com/cuda-toolkit-archive下载自己对应版本的cuda。

不知道的可以在Nvidia控制面板里点击左上角的帮助>系统信息,弹出一个窗口,再点击组件页就可以看到。

up这里是cuda12.1

由于up的cuda版本是12.1,于是就点开里面的CUDA Toolkit 12.1.0。

点开后按下面的图依次选择Linux、x86_64、WSL-Ubuntu、2.0、deb(local)。

然后下面就会出现安装命令。

仅供参考

注意!按照网站上显示的命令安装而不是up这里的显示的指令安装!

在Ubuntu里运行安装指令,其中可能会提示输入密码(Password),将刚刚创建用户时的密码输入进去即可。完成后,cuda便安装完成。运行下面的命令看是否成功安装:

有类似输出即安装成功。

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

首先点击右上角注册一个账户。其中需要填写问卷,根据自身情况填写即可。

然后勾选I Agree,选择自己对应的cuda版本下载cudnn。由于up的cuda为12.1,所以点击12.x。

此时会出现cudnn的各种安装方式。选择Local Installer for Linux x86_64 (Tar),然后会自动浏览器会弹出下载框。选一个路径等待下载完成。

下载完成后,按win+R弹出运行窗口,输入\\wsl.localhost,此时会以windows资源管理器访问wsl2。打开Ubuntu>home>xxx,其中xxx是之前设置的用户名。将刚才下好的文件移动到此处,然后在Ubuntu命令行窗口里输入以下指令:

其中yyy是之前下好的文件的名字。

此步骤完成后,cudnn便安装成功。

1.在wsl2中部署Stable Diffusion

首先下载python环境的管理工具Anaconda。在wsl2中运行下面的指令下载、安装Anaconda:

安装时按q跳过申明,有yes就输入yes,其它保持默认。安装完成后,输入下面的命令创建一个Stable Diffusion运行的python环境:

和前面类似,有y就输入y。然后运行下面的命令检查虚拟环境是否创建成功:

出现类似下图的输出便是成功。

输入下面的指令退出python:

然后使用下面的命令将stable-diffusion-webui部署到wsl:

或者如果本机已经有Stable Diffusion,直接用前面提到的方法用windows资源管理器整个文件夹复制到wsl里自己的用户目录下。

运行下面的命令修改Stable Diffusion的配置:

接着输入 228G 跳到第228行,也就是我们准备修改的位置,然后按 a 进入编辑模式,按照下面的代码修改对应位置的代码,按 Esc 退出编辑模式,然后输入 :wq 保存并退出。

小技巧:按 V 进入行选择模式,然后按 j 选择对应的行按 d 删除,按 a 进入编辑模式,将下面的代码复制,再按 ctrl+v 粘贴。

注意!此处按键区分大小写,在小写情况下按 G 实际要按 shift+g !

退出后,运行下面的指令创建辅助启动脚本:

类似地,按 a 进入编辑模式,输入下面的代码,按 Esc 然后 按 :wq 退出并保存:

若显存为8G以下,建议根据下面的参考添加参数:

4-6G: --lowvram

6-8G: --medvram

然后运行下面的命令改变权限:

然后输入

启动webui。第一次启动会安装各种库,等待安装完成。出现这段输出便是启动成功。

7860为端口,就是后面提到的yyyy

翻到前面找到这个输出:

wsl的ip地址

inet后面便是wsl的ip地址。up这里的ip是172.22.214.178,也就是在浏览器里输入172.22.214.178:7860就能访问到stable diffusion了。这个ip地址在电脑首次启动时wsl会改变。根据自己的输出改为x.x.x.x:yyyy。

看到这个界面就是部署成功了。up这里已经安装了一些插件和模型。

此时的sd-webui是没有任何外部插件、模型的。可以通过前面提到的方法将本机的stable diffusion模型、lora复制到wsl里。也可以在wsl里用wget命令去c站下载。插件可以通过Extensions界面输入其git地址来安装。至于汉化方法,可以搜索其它up的教程。由于up懂英文,就懒得汉化了。

最后需要注意的是底端是否显示了torch: 2.0.0+cu118和xformers: 0.0.17rc482。torch2.0相比1.x效率略高。xformers则是加速计算的一个组件。

2.sd-webui在wsl2中和win11中的速度对比

使用模型的为ChilloutMix_NiPrunedFp32Fix。

参数设置

下面为win11下运行:

训练时的速度
总用时

总用时为4分32秒。

下面为wsl2中运行:


训练时的速度

总用时

总用时2分25秒。

可以看到同等参数下,速度提升达到80%以上!

从这里我们也可以大概推断出,在原生Linux下部署能有更快的速度。感兴趣的可以试一试,方法应该也差不多。

3.利用核显

此项优化优先级不高。可根据自身情况斟酌。

说是利用核显,倒不如说是把普通程序放到核显运行,这样就牺牲内存腾出更多的显存去跑图片。在笔记本上就是关闭独显直连,然后在Nvidia控制面板里的全局设置选择由核显输出就行,再对个别游戏单独设置由独显输出即可。有的笔记本不能动态切换独显直连,要重启,那么up的建议是不搞。

对于台式机,就是在BIOS里启用核显,然后安装核显驱动。这里参考其他up的视频。

4.在不影响WSL2的使用下关闭VBS

非游戏党可以忽略此项。游戏党可能比较介意VBS影响游戏性能,但又想玩AI画图。这里给出微软官方的关闭方法。先给出链接:

https://learn.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage#disabling-virtualization-based-security

up这里的系统语言是英语,并不知道中文界面是怎样,所以下列英文请参考微软官方的翻译。

首先搜索edit group policy,打开后依次打开Computer Configuration > Administrative Templates > System > Device Guard > Turn on Virtualization Based Security

选择Disable,然后点Apply。

接着按win+R打开运行,输入regedit打开注册表,找到

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\DeviceGuard\

里的EnableVirtualizationBasedSecurity和RequirePlatformSecurityFeatures

删除掉即可。如果没有就不用管。保险起见可以先右键点击DeviceGuard选择导出进行备份。


最后的最后给出封面。

这张手画得不是很好



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1