在2G显存的MX150显卡上跑StableDiffusion

起因

忽然想玩一下AI作图,然而家里一片Nvidia显卡都没有——都是AMD的集成显卡,pytorch虽然支持AMD,但也要能跑ROCm的少数几款独显——这点AMD比Nvidia差得多了,CUDA能在大部分N卡上跑。本来想淘个带独显的二手笔记本,朋友 slfeng 知道了,说有一台闲置的小米air13是带N卡的可以送我,于是我就占了这么个便宜。

小米Air13带的显卡是Nvidia GeForce MX150,带2GVRAM,理论上是跑不了Stable Diffusion的——官方建议配置是8GVRAM,最低4G。

还好穷人有穷人的办法。

折腾

到手先装了LinuxMint,然后依次安装了CUDA11.8、CUDNN、python3.10等依赖,然后才来手工安装SDWebUI……网传的懒人包都是基于大显存的显卡,而且都是Windows版本,对我来说没有用。

手工安装SDWebUI当然是按官方文档来:

# 先安装python3.10-venv
sudo apt install git python3.10-venv -y
# clone sdwebui的代码
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
cd stable-diffusion-webui
# 创建python环境
python3.10 -m venv venv

然后重点来了,现在直接按文档说的运行webui.sh是不行的,因为VRAM不够,所以需要加一点点参数:

./webui.sh --lowvram --always-batch-cond-uncond

这样就可以在2GVRAM的MX150上跑起来了。

不过这样也只是能跑起来而已,生成图片最大只能512X512,有些大点的模型甚至连这个尺寸也不行,可以试试540X360之类更小的。

需要注意的是,第一次运行期间它会下载一些东西,建议加上代理。不过因为它还需要调用localhost的内容,所以代理配置一定要忽略localhost和127.0.0.1等。

类似这样:

export http_proxy=http://localhost:1234
export no_proxy=localhost,127.0.0.1

使用

启动成功以后打开浏览器访问:http://localhost:7860即可打开页面。

  • Stable Diffusion checkpoint:模型选择
  • txt2img/img2img…: 文生图,图生图等
  • 文生图下面两个大框分别是正向提示词和反向提示词
  • Generation:生成选项
    • Sampling method:采样方法,常用DPM++ SDE Karras等
    • Sampling steps: 采样步数,通常20-30
    • Width/Height: 宽/高,2GVRAM只能到512x512,再大容易爆显存失败
    • Batch count: 一批生成多少图
    • CFG Scale: 数字越小越随机
    • Seed:用于重新生成指定图,-1为随机,生成的图片信息中会包含这个Seed,可以再次使用这个Seed和同样的参数生成此图

在这个硬件配置下,生成一张512x512的图大概需要3分钟

提示词

正向提示词:就是说明一下你想生成什么样的图片。比如:

girl, standing, smile...

反向提示词:就是说明一下你不想生成的图片有什么。比如:

extra digit, fewer digits, cropped, worst quality, low quality...

可以给提示词加括号表示增加权重,括号越多权重越大,比如:

(((missing arms))),(((missing legs))), (((extra arms))),(((extra legs)))

模型

光有SD还是没法用的,你还需要别人训练好的模型——自己训练模型就算了,这个真的需要8GVRAM以上……还不一定够。

下模型当然是去C站HuggingFace也有,不过画图模型还是C站更好用。

用得比较多的模型有:

  • Anything, DreamShaper…这些是画动漫人物的
  • Chilloutmix,RealisticVision…这些是画真人的

一般建议下载.safetensors格式的模型,相对比较安全。下载后放到./models/Stable-diffusion下面,要使用新模型,需要在Stable Diffusion checkpoint那边刷新一下才能在选择列表里看到。

Lora

Lora相当于模型的补丁,通常是用特定的图片集训练一个现有模型后生成,使用相应的Lora可以生成特定的图片。

比如你想生成你嗄的图片,可以在C站找到一个gakki的Lora(友情提醒,实际效果不太好)。

用法跟模型差不多,到C站下载Lora模型放到./models/Lora下面,刷新之后可以在Generation右边找到Lora标签,在其中可以选择你要用到的Lora。参考相应Lora的使用说明,配合该Lora训练时的checkpoint模型。

选择Lora以后会在正向提示词里增加:

<lora:gakkiAutoHeight.bjNf:1>

这个就是Lora专用提示词,其中:1表示权重,可以通过修改这个数字调整权重。

其它

其它还有很多功能我也还在研究,比如Embeding等。

推送到[go4pro.org]