Disco Diffusion本地运行纪实
这还真是为了一碟醋,包了一盘饺子。
Disco Diffusion这个AI绘画项目提供了无限可能,奈何通常情况下的在线运行要解决连接谷歌服务器的问题,此前从GITHUB上下载了这个开源项目的python脚本和对应的模型,用我的XPS13上的VSCODE调通跑起来了。由于没有N家的独立显卡,只能用CPU运行,奈何六代酷睿和8G的内存实在支撑不起这样的运算,out of memory是必然的结果。我不打游戏,又听闻现在的显卡涨价得没有天理,于是在D版收了一块Nvidia Tesla M40的二手计算卡,收了才发现我得有个PCI 16X的插槽来安装它,而我已经不用台机十多年了......可以用雷电口的外置显卡,然而一个外置显卡坞并不比一台便宜的台机便宜,且通过雷电口连接由于通信速率的关系实际算力还要打个对折,所以这次双十一,用1600左右拼了一台5600U的台机。
组装这台机器也算是命运多舛。拼起来上电主板呼吸灯能亮,但CPU风扇总是转一会就停,显示屏不亮,刷BIOS、拔电池、换内存卡槽都不行,不知哪儿出了毛病,好在CPU和主板是在一家买的,干脆打包发回去请他们检测,结果回复是好的。重新装机还是不行,反复实验才发现是SATA口的SSD我只插了数据线没有插电源线......开机了也装了系统,但经不住京东便宜NVME SSD的诱惑,买了一条重装系统又折腾半天。用M40的计算卡要解决三个问题:一是这块卡的电源接口是CPU接口定义,接电源的显卡头要转接线;二是原卡无风扇,是借助服务器中的高速暴力风扇散热的,装机还得增加散热风扇,去掉原装散热器上显卡用三风扇工程太大,最终用的是3D打印的风道风扇,只是装上后显卡通长达到320mm以上,一般机箱可能没有那么长;三是装驱动,这倒是最简单的,无非是最后在终端界面中用nvidia-smi -dm 0将卡的工作模式改为WDDM。
VSCODE跑Disco Diffusion也是经过了一番调试。从Github上把整个项目克隆下来后,原来是运行python脚本,后来发现VSCODE可以直接运行谷歌笔记本文件,也就是.ipynb文件,这个笔记本文件和网页上显示的格式相同,十分方便于理解和修改。本地运行完全可行,安装相应的模块和依赖即可,只是其中有两个大坑:一是调试时会提示infer模块,但你用pip安装infer模块后仍然报错,原因是这个infer是AdaBins中的,要将源代码中的from infer import InferenceHelper 改为from AdaBins.infer import InferenceHelper ;二是相同的问题,from midas.dpt_depth import DPTDepthModel等四个语句都要改为from MiDaS.midas.dpt_depth import DPTDepthModel等,增加MiDaS.
本地跑确实随心所欲,就是风扇有点响,处理还是有点慢。这个脚本还是十分消耗GPU算力的,启用第二模型时可以算到19201088的尺寸,此时大约60-70分钟一张,但是不启用第二模型时10241024都会出现out of memory。动画处理尤其慢,我跑了50个小时还没算完200帧的720P动画,而且从150帧以后,画面变暗,不知是否算法缺陷缘故。