最近 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 使用。