在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]