Apple官方优化Stable Diffusion绘画教程
Apple官方优化Stable Diffusion绘画教程
苹果为M1芯片优化Stable Diffusion模型,其中Mac Studio (M1 Ultra, 64-core GPU)生成512*512的图像时间为9秒。想要1秒出图,可以在线体验3090显卡AI绘画。
AI绘图在线体验
二次元绘图
在线体验地址:http://acg.aiartwork.online/

中文输入绘图
在线体验地址:http://taiyi.aiartwork.online/

CoreML Stable Diffusion
苹果官方发布Python 包,用于使用 diffusers 和 coremltools 将 Stable Diffusion 模型从 PyTorch 转换到 Core ML,以及一个 Swift 包来部署模型。请访问 Core ML Stable Diffusion 代码存储库以启动,并获取关于基准测试和部署的详细说明。
项目地址

使用 Core ML 在 Apple Silicon 上运行stable-diffusion

该存储库包括:
python_coreml_stable_diffusion
,一个 Python 包,用于将 PyTorch 模型转换为 Core ML 格式并在 Python 中使用 Hugging Facestable-diffusion图像生成StableDiffusion
,一个 Swift 包,开发人员可以将其作为依赖项添加到他们的 Xcode 项目中,以在他们的应用程序中部署图像生成功能。Swift 包依赖于由生成的 Core ML 模型文件python_coreml_stable_diffusion
如果您在安装或运行时遇到问题,请参阅常见问题解答部分。
示例结果
Hugging Face Hub上有多种版本的 Stable Diffusion 。以下是其中三个模型的示例结果:
--model-version
stabilityai/stable-diffusion-2-baseCompVis/stable-diffusion-v1-4runwayml/stable-diffusion-v1-5输出

M1 iPad Pro 8GB 延迟(秒)293838M1 MacBook Pro 16GB 延迟(秒)243535M2 MacBook Air 8GB 延迟(秒)182323
有关详细信息,请参阅性能基准部分的重要说明。
将模型转换为 Core ML
第一步:创建Python环境并安装依赖:
ounter(line
ounter(line
ounter(line
ounter(line
conda create -n coreml_stable_diffusion python=3.8 -y
conda activate coreml_stable_diffusion
cd /path/to/cloned/ml-stable-diffusion/repository
pip install -e .
第 2 步:登录或注册您的Hugging Face 帐户,生成用户访问令牌huggingface-cli login
并使用此令牌通过在终端窗口中运行来设置 Hugging Face API 访问。
第 3 步:导航至您想在Hugging Face Hub上使用的 Stable Diffusion 版本并接受其使用条款。默认模型版本为CompVis/stable-diffusion-v1-4。用户可以按照下一步中的描述更改模型版本。
第 4 步:从终端执行以下命令以生成 Core ML 模型文件 ( .mlpackage
)
ounter(line
python -m python_coreml_stable_diffusion.torch2coreml --convert-unet --convert-text-encoder --convert-vae-decoder --convert-safety-checker -o <output-mlpackages-directory>
警告:此命令将从 Hugging Face 下载数 GB 的 PyTorch 检查点。
在 M1 MacBook Pro 上,这通常需要 15-20 分钟。成功执行后,构成 Stable Diffusion 的 4 个神经网络模型将从 PyTorch 转换为 Core ML ( .mlpackage
) 并保存到指定的<output-mlpackages-directory>
. 一些额外的值得注意的论点:
--model-version
: 模型版本默认为CompVis/stable-diffusion-v1-4。开发人员可以指定Hugging Face Hub上可用的其他版本,例如stabilityai/stable-diffusion-2-base & runwayml/stable-diffusion-v1-5。--bundle-resources-for-swift-cli
:编译所有 4 个模型并将它们与用于文本标记化的必要资源捆绑在一起,这些资源<output-mlpackages-directory>/Resources
应作为输入提供给 Swift 包。对于基于扩散器的 Python 管道,此标志不是必需的。--chunk-unet
:将 Unet 模型分成两个大致相等的块(每个块的权重小于 1GB)以进行移动友好部署。这是在 iOS 和 iPadOS 上部署 ANE所必需的。这不是 macOS 所必需的。Swift CLI 能够使用 Unet 模型的分块版本和常规版本,但优先考虑前者。请注意,chunked unet 与 Python 管道不兼容,因为 Python 管道仅适用于 macOS。分块仅适用于使用 Swift 的设备上部署。--attention-implementation
:默认为在 Apple Neural Engine 上部署 Transformers 中SPLIT_EINSUM
描述的实现。将切换到应该用于非 ANE 部署的替代方案。请参阅性能基准部分以获得进一步的指导。--attention-implementation ORIGINAL
--check-output-correctness
:将原始 PyTorch 模型的输出与最终 Core ML 模型的输出进行比较。此标志会显着增加 RAM 消耗,因此建议仅用于调试目的。
使用 Python 生成图像
使用基于stable_diffusion的示例 Python 管道运行文本到图像生成:
ounter(line
python -m python_coreml_stable_diffusion.pipeline --prompt "a photo of an astronaut riding a horse on mars" -i <output-mlpackages-directory> -o </path/to/output/image> --compute-unit ALL --seed 93
有关所有可用参数,请参阅帮助菜单:python -m python_coreml_stable_diffusion.pipeline -h
。一些值得注意的论点:
-i
:应该指向上面"将模型转换为 Core ML "部分的-o
第 4 步中的目录。--model-version
:如果您在将模型转换为 Core ML 时覆盖默认模型版本,则需要在此处指定相同的模型版本。--compute-unit
:请注意,此特定实现的最高性能计算单元可能因不同的硬件而异。CPU_AND_GPU
或者CPU_AND_NE
可能比ALL
. 请参阅性能基准部分以获得进一步的指导。--scheduler
: 如果你想尝试不同的调度器,你可以在这里指定。有关可用选项,请参阅帮助菜单。您还可以指定自定义推理步骤数--num-inference-steps
,默认为 50。
使用 Swift 生成图像
系统要求
构建 Swift 项目需要:
macOS 13 或更新版本
安装了命令行工具的 Xcode 14.1 或更高版本。请检查developer.apple.com以获取最新版本。
核心 ML 模型和标记化资源。请参阅上面
--bundle-resources-for-swift-cli
的将模型转换为 Core ML部分
如果将此模型部署到:
苹果手机
iOS 16.2 或更新版本
iPhone 12 或更新版本
iPad
iPadOS 16.2 或更新版本
M1 或更新版本
苹果电脑
macOS 13.1 或更新版本
M1 或更新版本
CLI 用法示例
ounter(line
swift run StableDiffusionSample "a photo of an astronaut riding a horse on mars" --resource-path <output-mlpackages-directory>/Resources/ --seed 93 --output-path </path/to/output/image>
输出将根据提示和随机种子命名:例如</path/to/output/image>/a_photo_of_an_astronaut_riding_a_horse_on_mars.93.final.png
请使用--help
flag 了解批处理生成等。
库使用示例
ounter(line
ounter(line
ounter(line
ounter(line
import StableDiffusion
...
let pipeline = try StableDiffusionPipeline(resourcesAt: resourceURL)
let image = try pipeline.generateImages(prompt: prompt, seed: seed).first
Swift包详情
这个 Swift 包包含两个产品:
StableDiffusion
LibStableDiffusionSample
命令行工具
这两种产品都需要提供 Core ML 模型和标记化资源。通过目录路径指定资源时,该目录必须包含以下内容:
TextEncoder.mlmodelc
(文本嵌入模型)Unet.mlmodelc
或UnetChunk1.mlmodelc
&UnetChunk2.mlmodelc
(去噪自动编码器模型)VAEDecoder.mlmodelc
(图像解码器模型)vocab.json
(分词器词汇文件)merges.text
(合并字节对编码文件)
可选地,它还可以包括安全检查器模型,某些版本的 Stable Diffusion 包括:
SafetyChecker.mlmodelc
请注意,首先检查 Unet 的分块版本。只有当它不存在时才会Unet.mlmodelc
加载完整的。iOS 和 iPadOS 需要分块,而 macOS 则不需要。