最近开源社区里最火的项目肯定有Stable Diffussion
一个席位。作为一个AI通过文本描述绘画
的开源项目,其优秀的生成结果和极快的生成速度也让它在AI绘画
项目中一夜封神。
不过遗憾的是,这类AI项目要在苹果公司的自研芯片m1/m2上运行有点麻烦。虽然技术社区有一些文档和教程,但要真正跟着教程把项目所需的环境部署好,还是要爬很多坑的。我把整个爬坑的过程记录下来,希望能对所有使用m1/m2芯片mac的朋友有所帮助。大家都应该体验下这个如此有趣的项目。
注意:学会科学上网是必须的,不然各种依赖的安装速度能慢哭你。
微信的规则进行了调整
希望大家阅读时点点 “ 在看 ”
觉得不错也请点个 “ 分享 ”
这样大帅的文章才能继续出现在你的订阅列表里
1. Python环境
我们需要Python3.10
来运行Stable Diffusion
。如何确定你电脑中Python
的版本呢?
打开终端输入:
代码语言:javascript复制python3 -V
#output Python 3.10.6
如果输出的Python
版本是3.10及以上的话,就可以继续下一步了。如果还不是的话,就需要我们更新Python
。
我们可以通过安装Homebrew来安装或更新Python。
代码语言:javascript复制brew update
brew install python
在进行下面的步骤前,请务必确保你电脑中Python
版本大于3.10。
2. 克隆仓库以及安装依赖
首先我们需要克隆Stable Diffusion
这个项目仓库
git clone -b apple-silicon-mps-support https://github.com/bfirsh/stable-diffusion.git
cd stable-diffusion
mkdir -p models/ldm/stable-diffusion-v1/
然后创建并激活python
的虚拟环境
python3 -m pip install virtualenv
python3 -m virtualenv venv
source venv/bin/activate
注意以下这行代码
代码语言:javascript复制source venv/bin/activate
每次我们打开终端想要运行Stable Diffusion
的时候,都需要先使用它!
接下来,安装此项目所需的依赖
代码语言:javascript复制pip install -r requirements.txt
在安装过程中如果看到一些错误类似Failed building wheel for onnx
,我们可以通过brew安装这些系统包来解决
brew install Cmake protobuf rust
3. 下载权重包
前往 Hugging Face repository ,点击Access repository
按钮。(可能需要先注册一个账号)
然后在该页面上下载sd-v1-4.ckpt
(约4 GB大小),将其重命名为model.ckpt
并保存至上面创建的目录models/ldm/stable-diffusion-v1
中。
*请确保以下路径的有效性models/ldm/stable-diffusion-v1/model.ckpt
4. 快乐的玩耍
如果以上步骤都没有报错(这不太可能!),那么我们就可以在终端中输入以下内容让AI为我们绘画了
代码语言:javascript复制python scripts/txt2img.py
--prompt "a monkey riding a horse in outer space, like a knight"
--n_samples 1 --n_iter 1 --plms
其中prompt
参数最为关键,AI会通过这个参数中的文字描述来进行绘画,你怎么描述,它就怎么画!
比如:
代码语言:javascript复制python scripts/txt2img.py
--prompt "Asia girl, glossy eyes, face, long hair, fantasy, elegant, highly detailed, digital painting, artstation, concept art, smooth, illustration, renaissance, flowy, melting, round moons, rich clouds, very detailed, volumetric light, mist, fine art, textured oil over canvas, epic fantasy art, very colorful, ornate intricate scales, fractal gems, 8 k, hyper realistic, high contrast"
--plms --ddim_steps 100 --H 512 --W 512 --seed 8
我的m1 max 64G内存需要花20秒左右,在运行结束之后,就可以去outputs/txt2img-samples/
查看AI绘制的画作了。
下面所有的图都是AI通过这个描述画出来的,我觉得这个技术可以称之为“脑补技术”。
我遇到的坑,以及解决办法
- 在
pip install -r requirements.txt
这一步里,安装依赖taming-transformers
时始终报错。
解决办法:不管它,直接开始运行。
- 手动安装所有遗漏的依赖
由于
pip install -r requirements.txt
时报错了,所以有一些依赖没有安装上。在运行的时候会这些缺失的依赖会一一提示
ModuleNotFoundError: No module named 'PIL'
代码语言:javascript复制每当遇到这类问题的时候,我们都手动安装一下依赖包
代码语言:javascript复制pip install pillow
代码语言:javascript复制需要注意的是,提示缺失的依赖包名称和安装时的名称并不完全一致,比如`PIL`实际的包名称叫`pillow`,`imwatermark`叫做`invisible-watermark`等。
NotImplementedError: The operator 'aten::index.Tensor' is not current implemented for the MPS device
遇到这个问题时,我们需要设置一个环境变量PYTORCH_ENABLE_MPS_FALLBACK
,值为1
export PYTORCH_ENABLE_MPS_FALLBACK=1
附:全部可配参数,大家玩得开心:P
代码语言:javascript复制usage: txt2img.py [-h] [--prompt [PROMPT]] [--outdir [OUTDIR]] [--skip_grid] [--skip_save] [--ddim_steps DDIM_STEPS] [--plms] [--laion400m] [--fixed_code] [--ddim_eta DDIM_ETA]
[--n_iter N_ITER] [--H H] [--W W] [--C C] [--f F] [--n_samples N_SAMPLES] [--n_rows N_ROWS] [--scale SCALE] [--from-file FROM_FILE] [--config CONFIG] [--ckpt CKPT]
[--seed SEED] [--precision {full,autocast}]
optional arguments:
-h, --help show this help message and exit
--prompt [PROMPT] the prompt to render
--outdir [OUTDIR] dir to write results to
--skip_grid do not save a grid, only individual samples. Helpful when evaluating lots of samples
--skip_save do not save individual samples. For speed measurements.
--ddim_steps DDIM_STEPS
number of ddim sampling steps
--plms use plms sampling
--laion400m uses the LAION400M model
--fixed_code if enabled, uses the same starting code across samples
--ddim_eta DDIM_ETA ddim eta (eta=0.0 corresponds to deterministic sampling
--n_iter N_ITER sample this often
--H H image height, in pixel space
--W W image width, in pixel space
--C C latent channels
--f F downsampling factor
--n_samples N_SAMPLES
how many samples to produce for each given prompt. A.k.a. batch size
--n_rows N_ROWS rows in the grid (default: n_samples)
--scale SCALE unconditional guidance scale: eps = eps(x, empty) scale * (eps(x, cond) - eps(x, empty))
--from-file FROM_FILE
if specified, load prompts from this file
--config CONFIG path to config which constructs model
--ckpt CKPT path to checkpoint of model
--seed SEED the seed (for reproducible sampling)
--precision {full,autocast}
evaluate at this precision
代码语言:javascript复制
代码语言:javascript复制
代码语言:javascript复制
微信的规则进行了调整
希望大家阅读时点点 “ 在看 ”
觉得不错也请点个 “ 分享 ”
这样大帅的文章才能继续出现在你的订阅列表里