在苹果M芯片上安装Stable Diffusion前端并加载NovelAI模型

Intro
最近AI作画突然特别火,除了NovelAI迭代了几次以后变得厉害之外,很大一部分原因是它们早些时候训练出的模型因为某个远程端口设置的密码是“password”而被泄漏了出来。前两天我也尝试下载了这个模型包,然后按照教程搭建了一遍。虽然过程很艰难,但是最终是可以运行并且加载NovelAI模型的。本期视频会教大家如何在苹果芯片的Mac上搭建Stable Diffusion web UI前端,加载模型,并提供一些常见问题的解决办法。
你可以来Notion获得更好的阅读体验
https://www.notion.so/maltmann/Stable-Diffusion-on-Apple-Silicon-6a63f15bfd824fac9d7cb4bd6ebc9adb
项目来源
https://github.com/CompVis/stable-diffusion
https://github.com/AUTOMATIC1111/stable-diffusion-webui
https://github.com/dylancl/stable-diffusion-webui-mps
本系统基于CompVis的stable-diffusion模型框架和Automatic1111的前端搭建。
需求
在开始之前你至少需要一台使用Apple Silicon并运行macOS的电脑,还要有一个稳定的网络环境连上GitHub。
提前下载好novelaileak模型。可以在这里下载:https://fancade-my.sharepoint.com/:u:/g/personal/maltmann_fancade_onmicrosoft_com/EWrI4OZzaVNBnkiNLuPtR9cBRKjWTxYICstvaziMo03MaQ?e=ljQWGk
开始
步骤
打开Stable Diffusion web UI的仓库,向下翻动找到Installation on Apple Silicon。在苹果芯片上,虽然web UI运行正常,但只有Euler
和 DPM2
两个采样器可以工作。与此同时,如果在之前你已经安装好了Python和Miniconda环境,可能会让之后的脚本执行出现问题。推荐的办法是先卸载Python和Miniconda,之后再通过Homebrew来安装。
Homebrew
我们先从安装Homebrew开始。Homebrew是一个开源的包管理器,可以方便的管理之后所需的依赖。
进入Homebrew的官网 ( https://brew.sh/ ) ,打开终端。
和很多平台一样,macOS的终端默认不走代理,裸连会影响之后脚本的执行。如果你安装了ClashX,那么可以在小猫咪的菜单栏按Command C复制终端代理指令再粘贴。如果你在使用其他软件,可以寻找有没有类似的选项,或在视频简介复制这行指令后修改为自己的代理地址和端口。(终端代理指令一定要在conda环境外部配置)
复制Homebrew的安装指令后在终端执行。
输入管理员密码。
Homebrew会默认将自己安装在opt文件夹中。
接下来等待安装完成。
在这里和之后会遇到的绝大多数问题都将由网络问题导致,如果你希望未来Homebrew不通过代理安装软件可以考虑在终端中执行以下指令:
这会将Homebrew的仓库替换为中科大维护的镜像源。
使用Homebrew安装环境依赖
安装完Homebrew之后,我们开始安装依赖。
在终端中输入以下指令:
这会让Homebrew开始安装Python在内的环境和依赖。
安装完成后继续在终端中输入:
这会跳转到macOS的文稿目录,下载安装脚本并授予执行权限。
如果终端下载出现了问题,你可以去仓库单独下载这个脚本,放进文稿文件夹,并在终端中运行最后一条指令。
Checkpoint 1
现在我们回头检查一次:
你检查了网络,通过终端代理可以连接到GitHub
你已经安装了Homebrew,并通过它安装了一系列环境和依赖
你通过脚本或手动下载,在文稿中出现了setup_mac.sh
使用脚本安装web UI
现在我们运行脚本,输入以下指令:

脚本首先会在用户目录安装miniconda。miniconda是一个开源的软件包和环境管理器。在安装过程中脚本会多次要求确认。在安装完miniconda的同时也会新建一个名为web-ui的虚拟环境,Stable Diffusion的web UI将在这个环境中运行。

miniconda安装完成后,脚本将会克隆本项目的仓库到本地,这个过程会比较漫长。
clone完成后脚本会暂停。此时你可以在文稿中看到项目仓库。
然后麻烦的地方来了。如果你只想使用Stable Diffusion模型来生成三次元图像,可以输入n。这样脚本会引导你在Hugging face拿到token(read权限):
获取token之后,千万别忘了在这里同意协议:
然后再输入token,否则下载不会正常开始。

如果你想使用novelai泄漏的模型,你还是得输入n,还需要在下载完Stable Diffusion模型之后,再把泄漏的模型文件中的model.ckpt单独复制到 “stable-diffusion-webui/models/Stable diffusion” 目录中。其中标有sfw(suitable for work)的模型不会生成涩图。通常使用的模型为前两个。
为什么需要下载Stable Diffusion模型,是因为整个安装脚本是为自家的模型定制的,在上一步模型安装结束后会检查自家的模型有没有在对应的位置。这里不需要覆盖掉Stable Diffusion模型,在Web UI中可以切换模型。
完成这一步后,脚本将会开始克隆其他必要的仓库,这一步同样比较漫长。

你可能会经常在这一步出错,通常由网络问题导致,请多试几次。如果之前的检查点无误,你可以直接按n跳过前两步环境配置。在系统询问是否安装模型时吧提前下载好的sd模型放入models文件夹,然后按y跳过模型下载。

Checkpoint 2
现在我们回头检查一次:
你已经完成了miniconda的安装,在终端输入:
此时环境将会变为(web-ui)。
你已经完成了Stable Diffusion模型的下载。查看“stable-diffusion-webui/models/Stable diffusion” 目录,里面至少有一个名为sd-v1-4.ckpt的文件。
你已经完成了相关仓库的下载。查看“stable-diffusion-webui/repositories” 目录,里面至少有stable-diffusion、taming-transformers、CodeFormer和BLIP四个完整的仓库。
PIP安装依赖
这个脚本的其中一个问题是无法安装所有需要的依赖。
这一部分脚本会自动安装部分依赖和1.13.0.dev20220922版本的Pytorch。
作者解释道最新的Nightly版本会造成性能问题,所以使用了最新的前一个版本,在我写到这里的时候,最新版本已经不会出现类似问题。
在安装完成后脚本会输出:
这意味着PyTorch支持了苹果芯片的硬件加速功能。如果使用纯CPU版本,webUI的安装不会出现问题,但无法生成图像。请注意,只有Nightly版本才支持MPS功能,千万别下错了。

这一切结束后,脚本会在文稿目录下新建一个 “run_webui_mac.sh” 脚本,同时给予运行权限。
Checkpoint 3
现在我们回头检查一次:
脚本使用pip安装了部分依赖并没有报错。
脚本安装完后输出了启用MPS的字符串。
文稿目录下出现了一个名为 “run_webui_mac.sh” 的脚本。
执行运行脚本
脚本运行到这里会自动执行运行脚本。

之后脚本会报错,提示缺少必要的依赖。这里是所有缺失的依赖:
你需要手动安装这些依赖。方法是:
启动web-ui虚拟环境:
conda activate web-ui
使用pip安装缺失的依赖:
安装transformers
你会发现,想要安装transformers还需要Rust编译器。进入终端上的地址(https://rustup.rs),复制Rust的安装指令:
跟随脚本的引导完成安装,并复制两条指令完成环境配置。
安装完成后需要重启终端才能生效。
再次执行运行脚本:
现在脚本应该能正确的运行,加载模型,并在本地端口创建一个前端页面。
在浏览器中输入终端中的地址。
自此你已经完成了Stable Diffusion Web UI的搭建。
如果出现了问题
我们正在重构脚本,致力于创造一个使用国内镜像的一键式部署脚本。在新的脚本发布以后我们也会做一期视频辅助讲解。如果在这片文章遇到了问题不妨稍等一下。
同时你也可以使用Google CoLab在云端搭建环境。主流的教程几乎都使用了NAIFU。建议大家不要在本地环境搭建NAIFU。
如果帮到了你就给我个三连吧。
感谢
Stable Diffusion - https://github.com/CompVis/stable-diffusion
Taming Transformers - https://github.com/CompVis/taming-transformers
Stable Diffusion Web UI - https://github.com/AUTOMATIC1111/stable-diffusion-webui
Stable Diffusion Web UI - MPS - https://github.com/dylancl/stable-diffusion-webui-mps
甘城なつき - https://amashiro.com/