当前位置:AIGC资讯 > AIGC > 正文

在 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
2
3
4
5
6
7
8
9
10
python -m python_coreml_stable_diffusion.pipeline \
       --prompt "A realistic beautiful natural landscape, 4k resolution, hyper detailed" \
       --model-version=runwayml/stable-diffusion-v1-5  \
       -i ./models \
       -o ./output \
       --compute-unit ALL \
       --seed 640 \
       --guidance-scale=10.5 \
       --num-inference-steps=80 \
       --scheduler=DPMSolverMultistep

命令会执行一段时间,执行完成后,会在当前目录下生成一个 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 使用。

更新时间 2024-03-10