此方法为N卡专属。非N卡用户不用往下看了。
方法是
利用wsl2对于机器学习的优化来提速
利用空置的核显
up配置为i7-12800hx,3070ti Laptop,win11 Pro 22h2。
首先以管理员身份运行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的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便安装成功。
首先下载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。第一次启动会安装各种库,等待安装完成。出现这段输出便是启动成功。
翻到前面找到这个输出:
inet后面便是wsl的ip地址。up这里的ip是172.22.214.178,也就是在浏览器里输入172.22.214.178:7860就能访问到stable diffusion了。这个ip地址在电脑首次启动时wsl会改变。根据自己的输出改为x.x.x.x:yyyy。
此时的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则是加速计算的一个组件。
使用模型的为ChilloutMix_NiPrunedFp32Fix。
下面为win11下运行:
总用时为4分32秒。
下面为wsl2中运行:
总用时2分25秒。
可以看到同等参数下,速度提升达到80%以上!
从这里我们也可以大概推断出,在原生Linux下部署能有更快的速度。感兴趣的可以试一试,方法应该也差不多。
此项优化优先级不高。可根据自身情况斟酌。
说是利用核显,倒不如说是把普通程序放到核显运行,这样就牺牲内存腾出更多的显存去跑图片。在笔记本上就是关闭独显直连,然后在Nvidia控制面板里的全局设置选择由核显输出就行,再对个别游戏单独设置由独显输出即可。有的笔记本不能动态切换独显直连,要重启,那么up的建议是不搞。
对于台式机,就是在BIOS里启用核显,然后安装核显驱动。这里参考其他up的视频。
非游戏党可以忽略此项。游戏党可能比较介意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选择导出进行备份。
最后的最后给出封面。