Apple官方優(yōu)化Stable Diffusion繪畫教程
Apple官方優(yōu)化Stable Diffusion繪畫教程
蘋果為M1芯片優(yōu)化Stable Diffusion模型,其中Mac Studio (M1 Ultra, 64-core GPU)生成512*512的圖像時(shí)間為9秒。想要1秒出圖,可以在線體驗(yàn)3090顯卡AI繪畫。
AI繪圖在線體驗(yàn)
二次元繪圖
在線體驗(yàn)地址:http://acg.aiartwork.online/

中文輸入繪圖
在線體驗(yàn)地址:http://taiyi.aiartwork.online/

CoreML Stable Diffusion
蘋果官方發(fā)布Python 包,用于使用 diffusers 和 coremltools 將 Stable Diffusion 模型從 PyTorch 轉(zhuǎn)換到 Core ML,以及一個(gè) Swift 包來(lái)部署模型。請(qǐng)?jiān)L問(wèn) Core ML Stable Diffusion 代碼存儲(chǔ)庫(kù)以啟動(dòng),并獲取關(guān)于基準(zhǔn)測(cè)試和部署的詳細(xì)說(shuō)明。
項(xiàng)目地址

使用 Core ML 在 Apple Silicon 上運(yùn)行stable-diffusion

該存儲(chǔ)庫(kù)包括:
python_coreml_stable_diffusion
,一個(gè) Python 包,用于將 PyTorch 模型轉(zhuǎn)換為 Core ML 格式并在 Python 中使用 Hugging Facestable-diffusion圖像生成StableDiffusion
,一個(gè) Swift 包,開(kāi)發(fā)人員可以將其作為依賴項(xiàng)添加到他們的 Xcode 項(xiàng)目中,以在他們的應(yīng)用程序中部署圖像生成功能。Swift 包依賴于由生成的 Core ML 模型文件python_coreml_stable_diffusion
如果您在安裝或運(yùn)行時(shí)遇到問(wèn)題,請(qǐng)參閱常見(jiàn)問(wèn)題解答部分。
示例結(jié)果
Hugging Face Hub上有多種版本的 Stable Diffusion?。以下是其中三個(gè)模型的示例結(jié)果:
--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
有關(guān)詳細(xì)信息,請(qǐng)參閱性能基準(zhǔn)部分的重要說(shuō)明。
將模型轉(zhuǎn)換為 Core ML
第一步:創(chuàng)建Python環(huán)境并安裝依賴:
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 步:登錄或注冊(cè)您的Hugging Face 帳戶,生成用戶訪問(wèn)令牌huggingface-cli login
并使用此令牌通過(guò)在終端窗口中運(yùn)行來(lái)設(shè)置 Hugging Face API 訪問(wèn)。
第 3 步:導(dǎo)航至您想在Hugging Face Hub上使用的 Stable Diffusion 版本并接受其使用條款。默認(rèn)模型版本為CompVis/stable-diffusion-v1-4。用戶可以按照下一步中的描述更改模型版本。
第 4 步:從終端執(zhí)行以下命令以生成 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 下載數(shù) GB 的 PyTorch 檢查點(diǎn)。
在 M1 MacBook Pro 上,這通常需要 15-20 分鐘。成功執(zhí)行后,構(gòu)成 Stable Diffusion 的 4 個(gè)神經(jīng)網(wǎng)絡(luò)模型將從 PyTorch 轉(zhuǎn)換為 Core ML (?.mlpackage
) 并保存到指定的<output-mlpackages-directory>
.?一些額外的值得注意的論點(diǎn):
--model-version
: 模型版本默認(rèn)為CompVis/stable-diffusion-v1-4。開(kāi)發(fā)人員可以指定Hugging Face Hub上可用的其他版本,例如stabilityai/stable-diffusion-2-base?&?runwayml/stable-diffusion-v1-5。--bundle-resources-for-swift-cli
:編譯所有 4 個(gè)模型并將它們與用于文本標(biāo)記化的必要資源捆綁在一起,這些資源<output-mlpackages-directory>/Resources
應(yīng)作為輸入提供給 Swift 包。對(duì)于基于擴(kuò)散器的 Python 管道,此標(biāo)志不是必需的。--chunk-unet
:將 Unet 模型分成兩個(gè)大致相等的塊(每個(gè)塊的權(quán)重小于 1GB)以進(jìn)行移動(dòng)友好部署。這是在 iOS 和 iPadOS 上部署 ANE所必需的。這不是 macOS 所必需的。Swift CLI 能夠使用 Unet 模型的分塊版本和常規(guī)版本,但優(yōu)先考慮前者。請(qǐng)注意,chunked unet 與 Python 管道不兼容,因?yàn)?Python 管道僅適用于 macOS。分塊僅適用于使用 Swift 的設(shè)備上部署。--attention-implementation
:默認(rèn)為在 Apple Neural Engine 上部署 Transformers 中SPLIT_EINSUM
描述的實(shí)現(xiàn)。將切換到應(yīng)該用于非 ANE 部署的替代方案。請(qǐng)參閱性能基準(zhǔn)部分以獲得進(jìn)一步的指導(dǎo)。--attention-implementation ORIGINAL
--check-output-correctness
:將原始 PyTorch 模型的輸出與最終 Core ML 模型的輸出進(jìn)行比較。此標(biāo)志會(huì)顯著增加 RAM 消耗,因此建議僅用于調(diào)試目的。
使用 Python 生成圖像
使用基于stable_diffusion的示例 Python 管道運(yùn)行文本到圖像生成:
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
有關(guān)所有可用參數(shù),請(qǐng)參閱幫助菜單:python -m python_coreml_stable_diffusion.pipeline -h
。一些值得注意的論點(diǎn):
-i
:應(yīng)該指向上面"將模型轉(zhuǎn)換為 Core ML?"部分的-o
第 4 步中的目錄。--model-version
:如果您在將模型轉(zhuǎn)換為 Core ML 時(shí)覆蓋默認(rèn)模型版本,則需要在此處指定相同的模型版本。--compute-unit
:請(qǐng)注意,此特定實(shí)現(xiàn)的最高性能計(jì)算單元可能因不同的硬件而異。CPU_AND_GPU
或者CPU_AND_NE
可能比ALL
.?請(qǐng)參閱性能基準(zhǔn)部分以獲得進(jìn)一步的指導(dǎo)。--scheduler
: 如果你想嘗試不同的調(diào)度器,你可以在這里指定。有關(guān)可用選項(xiàng),請(qǐng)參閱幫助菜單。您還可以指定自定義推理步驟數(shù)--num-inference-steps
,默認(rèn)為 50。
使用 Swift 生成圖像
系統(tǒng)要求
構(gòu)建 Swift 項(xiàng)目需要:
macOS 13 或更新版本
安裝了命令行工具的 Xcode 14.1 或更高版本。請(qǐng)檢查developer.apple.com以獲取最新版本。
核心 ML 模型和標(biāo)記化資源。請(qǐng)參閱上面
--bundle-resources-for-swift-cli
的將模型轉(zhuǎn)換為 Core ML部分
如果將此模型部署到:
蘋果手機(jī)
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>
輸出將根據(jù)提示和隨機(jī)種子命名:例如</path/to/output/image>/a_photo_of_an_astronaut_riding_a_horse_on_mars.93.final.png
請(qǐng)使用--help
flag 了解批處理生成等。
庫(kù)使用示例
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包詳情
這個(gè) Swift 包包含兩個(gè)產(chǎn)品:
StableDiffusion
LibStableDiffusionSample
命令行工具
這兩種產(chǎn)品都需要提供 Core ML 模型和標(biāo)記化資源。通過(guò)目錄路徑指定資源時(shí),該目錄必須包含以下內(nèi)容:
TextEncoder.mlmodelc
(文本嵌入模型)Unet.mlmodelc
或UnetChunk1.mlmodelc
&?UnetChunk2.mlmodelc
(去噪自動(dòng)編碼器模型)VAEDecoder.mlmodelc
(圖像解碼器模型)vocab.json
(分詞器詞匯文件)merges.text
(合并字節(jié)對(duì)編碼文件)
可選地,它還可以包括安全檢查器模型,某些版本的 Stable Diffusion 包括:
SafetyChecker.mlmodelc
請(qǐng)注意,首先檢查 Unet 的分塊版本。只有當(dāng)它不存在時(shí)才會(huì)Unet.mlmodelc
加載完整的。iOS 和 iPadOS 需要分塊,而 macOS 則不需要。