一、 引言
相继在两个云平台 kaggle 和 autodl 上部署了 stable diffusion 后,这周决定再在 mac 本地部署一下 stable diffusion!
其实看 stable diffusion webui 的 github 官网,步骤还是比较清晰简单的。
但实际部署过程中,确实还是遇到了不少问题,所以顺便将踩过的坑一一记录了下来,应该涵盖了大部分同学都会遇到的问题,是的,全帮你们填平了,有的问题还给出了多种解决方案。
所以,mac 党的朋友,想在本地部署 stable diffusion,拿着这份保姆级教程,直接冲就完事!
二、 mac 的配置
macbook pro(2021 年)
芯片:apple m1 pro
核总数:8 + 14
内存:16gb
存储:512gb
macos:ventura 13.3.1
这个配置下,出图的效率怎么样呢?
文章的第五部分「性能测试」中,基于同一模型、不同采样方法,在进行了多组测试后,出图效率简单记录了一下,大家可以参考~
三、 安装步骤
1. 安装 homebrew
方式一:官方安装(可能会因网络问题导致失败)
/bin/bash -c "$(curl -fssl https://raw.githubusercontent.com/homebrew/install/head/install.sh)"
输入 brew -v
验证 homebrew 是否安装成功:出现版本号说明 homebrew 已经安装成功了。
补充知识:
- homebrew 官网:https://brew.sh/
- 通过官网方式安装的,卸载 homebrew 的方式如下(注意:如果是国内镜像安装的,不用这个命令卸载):
/bin/bash -c "$(curl -fssl https://raw.githubusercontent.com/homebrew/install/master/uninstall.sh)"
方式二:国内镜像安装
如果用第一种方式输入命令没有反应,或者是安装过程中出错了,多数是因为网络问题。可以用国内镜像进行 homebrew 的安装。
/bin/bash -c "$(curl -fssl https://gitee.com/cunkai/homebrewcn/raw/master/homebrew.sh)"
core、cask、services 是 homebrew 的其他组件,应该不是部署 stable diffusion webui 必须的。为了保险起见,这里直接都装了。
有些电脑 xcode 和 git 混乱,再运行一次,此处如果有 error 正常。
安装成功后,需要重启终端或者运行 source /users/your_user_name/.zprofile
才能生效。
输入 brew -v
验证 homebrew 是否安装成功:出现版本号说明 homebrew 已经安装成功了。
补充知识
-
如果之前安装过 homebrew,会将之前的 homebrew 备份在桌面的 old_homebrew 文件夹里。如果里面没有你需要的可以删除。
-
常用命令
- 查看版本:brew -v
- 更新 brew 版本:brew update
- 查找:brew search xxx(其中 xxx 替换为要查找的关键字)
- 安装:brew install xxx
- 查看本地软件库列表:brew ls
-
卸载 homebrew 如果是通过国内镜像安装的 homebrew,用这个命令卸载:
/bin/zsh -c "$(curl -fssl https://gitee.com/cunkai/homebrewcn/raw/master/homebrewuninstall.sh)"
-
安装位置 在 mac m1 上,homebrew 的安装位置不是在以前的 /usr/local/,而是在 /opt/homebrew,这个大家注意。
-
如果安装过程中还遇到了其他问题,可以看文章的第四部分 可能会遇到的问题,看看有没有解释。
2. 安装 python 等环境依赖
cmake、protobuf、rust、python@3.10、git、wget,这些都是在后面安装 stable diffusion webui 时需要用到的依赖,这里通过一条命令直接安装了。
brew install cmake protobuf rust python@3.10 git wget
stable diffusion webui 的 github 中建议使用 3.10.6,因为高版本的 python 不支持 torch:
文章写于 2023 年 7 月,后续应该会支持吧~
3. 克隆
上一步执行成功后,我们进行 stable diffusino webui 的克隆。
git clone https://github.com/automatic1111/stable-diffusion-webui
这一步可能会遇到下载不下来,或者下载过程中出错的问题,可以看文章的第四部分 可能会遇到的问题,看看有没有解释。
如果依然没有解决,直接,干脆,进到 sdw github 主页,直接下载 zip 到本地,然后解压就好了。
4. 下载模型
这里包括三大类:大模型、lora 模型以及 vae 模型。(当然还有其他细分小模型,后续介绍)
这一步可以先扔一个大模型上去,后续有需要可以再慢慢下载其他的。
不想自己下载的话,可以找我要网盘链接。
大模型
放在 stable-diffusion-webui/models/stable-diffusion 下面
文件后缀:ckpt 或者 safetensors
lora 模型
放在 stable-diffusion-webui/models/lora 下面(在没有执行 ./webui.sh 前,是没有 lora 这个目录的,可以先不放)
vae 模型
variational auto encoder
可以简单理解为滤镜
放在 stable-diffusion-webui/models/vae 下面
下载方式一:从 c 站下载(需要特殊网络)
选中「models」-「筛选」- 选择「model types」(是大模型、还是 lora、还是 vae等) - 然后选择一个模型点进去。
如果知道要下载的模型的名称的话,也可以直接在搜索框搜索模型名字,然后点进模型。
直接点「download」按钮进行下载。
下载方式二:从 huggingface 下载
如果登不上 c 站,可以试试 huggingface,方式也比较简单。
选择「text-to-image」,按下载量排序,我们选第一个下载量最多的,然后点进去。
切换到「files and versions」,下面四个后缀为 satetensors 或 ckpt 的就是大模型了,随意下载一个就好。
其中 v1-5-pruned-emaonly 比较小,4 个多 gb,需要的显存少,适合于推理。
v1-5-pruned 比较小,7个多 gb,需要的更多的显存,适合于微调。
5. 启动 webui
进到 stable diffusion webui 对应的安装目录:
cd stable-diffusion-webui
启动 stable diffusion webui:
./webui.sh
第一次启动,会下载一些组件库和依赖,可能会比较慢,大家耐心等待。
当然出错最多的也是在启动 webui 这个过程。这个过程中会遇到各种各样的报错。我们需要多次停下、解决、再重新执行 ./webui.sh
。
不过不用担心之前的安装都白费了,因为它会从你上次安装到的地方接着往下安装。
如果安装过程中报错了,可以看文章的第四部分「可能会遇到的问题」,看看有没有相应的解释。
当出现 running on local url: http://127.0.0.1:7860 的时候,说明 stable diffusion webui 已经启动好了。
在浏览器中输入 http://127.0.0.1:7860 就可以看到 stable diffusion webui 的界面了。
温馨提示
-
在运行过程中,不要关闭 terminal,否则页面就打不开了。
-
下次再启动,进到 stable diffusion webui 对应的目录,执行
./webui.sh
即可。 -
如果安装过程中报错了,可以看文章的第四部分「可能会遇到的问题」,看看有没有解释。
四、 可能会遇到的问题
1. 用国内镜像安装 homebrew 可能出现的问题
问题描述
解决
大概翻译一下,意思是说,在 “/opt/homebrew/library/taps/homebrew/homebrew-core” 的仓库中检测到可疑的所有权,若要为此目录添加异常,请调用:
git config --global --add safe.directory /opt/homebrew/library/taps/homebrew/homebrew-core。
下面另一个错误,也是类似的意思。所以我们只需要按照上面的提示,在命令行中输入这两行,就完美解决了。当再执行 brew -v 就不报错了!
git config --global --add safe.directory /opt/homebrew/library/taps/homebrew/homebrew-core
git config --global --add safe.directory /opt/homebrew/library/taps/homebrew/homebrew-cask
2. http/2 stream 1 was not closed cleanly before end of the underlying stream
问题描述
在 git clone 的时候报:
致命错误:无法访问 ‘https://github.com/automatic1111/stable-diffusion-webui/’:http/2 stream 1 was not closed cleanly before end of the underlying stream
解决:将通信协议改成 http/1.1
git config --global http.version http/1.1
将通信协议改成 http/1.1 之后,发现可以正常下载了。
3. couldn’t install torch.
在执行完 ./webui.sh
后报 “runtimeerror: couldn’t install torch.”
在 modules/launch_utils.py 中看到了这段注释:
这段注释是说,如果遇到了 “runtimeerror: couldn’t install torch.” 或者其他问题,可能是 python 版本的问题,升级或者降级到 3.10 的最新版本,然后删掉 webui 目录下的 venv 目录再重试。
但是上面我们明明执行过 brew install cmake protobuf rust python@3.10 git wget
这个命令,其中安装了 python 3.10 呀。按理说不应该呀。
怀着怀疑的态度我在命令行里输入 python3 -v
进行查看。
咦,一看不得了,这版本咋是 3.9.6?
这个 3.9 的 python 版本,应该是 mac 自带的 python。可能就是因为这个原因导致启动时下载库出错。
于是又从 python 官网下载了 python 3.10.10 这个版本。按提示傻瓜式安装就好了。之后还配置了一下环境变量。
# 编辑 ~/.bash_profile
vim ~/.bash_profile
文件中加入这三行
path="/opt/homebrew/bin/:${path}"
export path=${path}
alias python="/opt/homebrew/bin/python3.10"
# 使配置生效
source ~/.bash_profile
这时版本就成 3.10.10 了。
然后删掉 webui 目录下的 venv 目录,再执行 ./webui.sh
,终于不报错了!就是下的有些慢~
4. couldn’t install gfpgan.
在执行完 ./webui.sh
后报 “runtimeerror: couldn’t install gfpgan.”
其实是因为没有下载下来 gfpgan。我们可以从报错信息中找到下载链接,如下图中横线部分,然后 copy 这个链接到浏览器中进行下载,然后将下载好的 zip 文件加压,并将目录名改成 gfpgan,然后拖到 stable-diffusion-webui 这个目录下就好了。当再次执行 ./webui.sh
时,发现已经跨过 gfpgan,继续下载其他依赖了。完美解决!
5. couldn’t install clip.
在执行完 ./webui.sh
后报 “runtimeerror: couldn’t install clip.”
可以手动下载后安装,就像解决 “couldn’t install gfpgan” 这个问题一样。但是这里我们换一种解决方式。
打开 modules/launch_utils.py,搜索 https://github.com/ ,在每一处前面都加上 https://ghproxy.com/ ,加完后是这样的 https://ghproxy.com/https://github.com/xxxxx ,如下图。
一共是 7 处,修改完成后保存。再执行 ./webui.sh
,就没有问题了。
看 prepare_environment()
这个方法里,一共定义了 7 处下载地址,如果不用添加代理的方式,大概率接下来在下载 k-diffusion、codeformer、blip 的时候,也是会报错的。所以这里一起改掉,万事大吉!
这种方法也可以解决以下报错:
couldn’t install k-diffusion
couldn’t install codeformer
couldn’t install blip
6. couldn’t install k-diffusion
见 5 解决方法。
7. couldn’t install codeformer
见 5 解决方法。
8. couldn’t install blip
见 5 解决方法。
五、 性能测试
大模型:dreamshaper
euler:出一张 512 * 512 的图,约 20 ~ 30s
dpm++ sde karras:出一张 512 * 512 的图,约 1 ~ 1.5 min
六、 结束语
stable diffusion 本地部署相对于 stable diffusion 云部署,最大的两个优点就是:
更自由(懂的都懂)!
不花钱,完全免费!
kaggle 虽然每月可白嫖 30 个小时的算力,但太容易被封,稍微画得上头一些,就被封了。我的账号就被祭了。
kaggle 被封后,又转战到了 autodl,相比于 kaggle 来说,不那么容易被封,但是需要花钱。大部分机器实例在 1~2 元 / 小时,也不算贵,但是用完后一旦忘记给实例关机,一天几十就出去了。呃,这。。。
所以这周,一顿操作猛如虎,终于在 mac 上成功部署了 stable diffusion,实现了 stable diffusion 自由!也将所有踩过的坑,一一填平并记录了下来。希望可以帮到想在 mac 上部署 stable diffusion 的同学。
其实在 mac 本地部署 stable diffusion 遇到的大部分问题,基本都是网络造成的。每个人的电脑配置及网络环境都不一样,所以有时会遇到试了好几个解决方案都无法解决的情况。其实我也是。网友说他这么改成功了,而我那么改,依然不起作用。
所以最后想对大家说的是,耐心一点,再耐心一点,方法总是有的,问题总会解决!
大家加油!
觉得文章有帮助,记得点赞收藏关注一下呦~
我是程序员x小鹿,前互联网大厂程序员,自由职业 2 年+,一名 aigc 爱好者,欢迎一起交流~
发表评论