在 M1/M2 MacOS 上使用 Diffusers 运行 Stable Diffusion 模型
最近 AI 大热,从 ChatGPT 到 Stable Diffusion,各种 AI 生成模型层出不穷,作为凑热闹爱好者,也在不停尝试玩一玩各种模型。近期对于 Stable Diffusion 模型比较感兴趣,之前也看到了很多在苹果电脑上运行 Stable Diffusion 的文章,碰巧前段时间关注到了 Apple 开源的一个在 M1/M2 芯片上使用 CoreML 运行 Stable Diffusion 的项目 ,于是就在这里介绍下如何快速上手这个项目。
环境
官方推荐的运行环境如下:
Python | macOS | Xcode | iPadOS,iOS |
---|---|---|---|
3.8 | 13.1 | 14.2 | 16.2 |
步骤
conda 环境
这里我们使用 conda 来管理运行环境,所以需要首先安装 conda,我使用了最无脑的安装方式 —— Homebrew
1 | brew install anaconda |
安装完成后,即可按照文档中提供的方式创建运行环境,这里创建一个 Python 3.8 的环境,命名为 coreml_stable_diffusion
1 | conda create -n coreml_stable_diffusion python=3.8 -y |
创建完成后,激活环境
1 | conda activate coreml_stable_diffusion |
Clone 项目
接下来克隆 ml-stable-diffusion 项目到本地了
1 | git clone https://github.com/apple/ml-stable-diffusion.git |
这个项目包含两个部分,一个是将 PyTorch 模型转换为 CoreML 模型的工具,并且可以使用 HuggingFace Diffusers 生成图片。另一部分是一个可以集成在 XCode 项目中的 Swift Package。
这里我们主要使用第一个部分,将 HuggingFace 上的模型转换为 CoreML 模型,然后使用转换后的模型生成图片。
接下来进入项目目录开始安装依赖
1 | pip install -r requirements.txt |
至此,环境准备就完成了,接下来就是将 HuggingFace 上的模型转换为 CoreML 模型,然后使用转换后的模型生成图片。
转换模型
在转换模型前我们需要先从 HuggingFace 上下载模型,所以首先需要登录 HuggingFace,然后创建一个 Token,具体的操作方法可以参考这里 。
如果没有登录 HuggingFace,可能会遇到以下报错信息:
OSError: Can’t load config for ‘runwayml/stable-diffusion-v1-5’. If you were trying to load it from ‘https://huggingface.co/models ‘, make sure you don’t have a local directory with the same name. Otherwise, make sure ‘runwayml/stable-diffusion-v1-5’ is the correct path to a directory containing a model_index.json file
接下来使用转换工具将模型转换为 CoreML 模型
1 | python -m python_coreml_stable_diffusion.torch2coreml --convert-unet --convert-text-encoder --convert-vae-decoder --convert-safety-checker --model-version=runwayml/stable-diffusion-v1-5 -o ./models |
这里需要注意的是,转换工具默认使用的模型是 CompVis/stable-diffusion-v1-4
,这里我们使用 --model-version
指定了 runwayml/stable-diffusion-v1-5
(只是因为我习惯用这个-.-)。
转换完成后,会在当前目录下生成一个 models
目录,里面包含了转换后的 CoreML 模型。(还挺大的!)
生成图片
接下来就是使用转换后的模型生成图片了,这里我们使用 python_coreml_stable_diffusion
工具来生成图片。
1 | python -m python_coreml_stable_diffusion.pipeline \ |
命令会执行一段时间,执行完成后,会在当前目录下生成一个 output
目录,里面包含了生成的图片。
这里我们介绍下命令中的参数:
--prompt
:指定生成图片的提示语,可以是任意的文本。--model-version
:指定使用的模型,这里我们使用的是runwayml/stable-diffusion-v1-5
。-i
:指定模型所在的目录,这里我们使用的是./models
。-o
:指定生成图片的输出目录,这里我们使用的是./output
。--compute-unit
:指定使用的计算单元,这里我们使用的是ALL
,即使用 CPU 和 GPU。--seed
:指定随机种子,这里我们使用的是640
。--guidance-scale
:指定生成图片的尺寸,这里我们使用的是10.5
。--num-inference-steps
:指定生成图片的步数,这里我们使用的是80
。--scheduler
:指定生成图片的调度器,这里我们使用的是DPMSolverMultistep
。
至此我们已经在本地运行 Stable Diffusion 模型生成了一张图片了。
最后
当然,如果觉得上面这些步骤太麻烦,也可以直接下载 HuggingFace 的 Diffusers App 使用。
- 本文标题:在 M1/M2 MacOS 上使用 Diffusers 运行 Stable Diffusion 模型
- 本文作者:kenticny
- 创建时间:2023-03-22 01:07:18
- 本文链接:https://luyun.io/2023/03/22/stable-diffusion-on-macos/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!