2022.12.08 13:00

Stable Diffusion的魅力太大,蘋果親自下手最佳化在iPad、Mac上也能快速出圖

ADVERTISEMENT

在Stable Diffusion模型走紅之初,就有人嘗試將其移植到蘋果M1 Mac、iPhone 14 Pro等設備上執行,並把教學傳授給大家。 

但令人沒想到的是,前幾天,蘋果竟親自下場了,Step by step教大家如何直接將 Stable Diffusion 模型轉換為自家 iPhone、iPad 和 Mac 可以執行的版本。 

以下是產生結果的範例:

ADVERTISEMENT

蘋果在 macOS 13.1 和 iOS 16.2 中發布了針對 Stable Diffusion 的 Core ML 最佳化,並通過一個程式庫對部署過程進行了詳細講解。 

在三款蘋果設備(M1 iPad Pro 8GB、M1 MacBook Pro 16GB、M2 MacBook Air 8GB)上的測試結果表明,蘋果推出的相關最佳化基本可以保證最新版 Stable Diffusion(SD 2.0)在半分鐘內產生一張解析度為 512x512 的圖。 

ADVERTISEMENT

對於蘋果的這一舉動,不少人感歎,一個開源社群構建的模型已經優秀到可以讓大公司主動採用,確實非常了不起。 

另外,大家也開始猜測,未來,蘋果會不會直接把 Stable Diffusion 放到自己的設備裡? 

為什麼要讓 Stable Diffusion 可以在蘋果設備上運行?

自 2022 年 8 月首次公開發布以來,Stable Diffusion 已經被藝術家、開發人員和愛好者等充滿活力的社群廣泛採用,能夠以最少的文本 prompt 創建前所未有的視覺內容。相應地,社群在幾周內就圍繞這個核心技術構建了一個包含擴展和工具的龐大生態系統。Stable Diffusion 已經變得個性化,而且可以拓展到英語以外的其他語言,這要歸功於像 Hugging Face diffusers 這樣的開源專案。 

ADVERTISEMENT

除了透過文本 prompt 產生圖像,開發人員還發現了 Stable Diffusion 其他創造性的用途,如圖像編輯、修復、補全、提高解析度、風格遷移。隨著 Stable Diffusion 應用的增多,要想打造出任何地方的創意人員都能使用的應用程式,就需要確保開發者能夠有效地利用這項技術,這一點至關重要。 

在所有應用程式中,模型在何處運行是 Stable Diffusion 的一大關鍵問題。有很多原因可以解釋為什麼在設備上部署 Stable Diffusion 比基於伺服器的方法更可取。首先,終端使用者的隱私可以受到保護,因為使用者提供的作為模型輸入的任何資料都保留在使用者自己的設備上。 

其次,在初次下載之後,使用者不需要連接網路就可以使用該模型。最後,在本地部署此模型能讓開發人員減少或消除伺服器方面的成本。 

ADVERTISEMENT

用 Stable Diffusion 產出可觀的結果需要經過長時間的反覆運算,因此在設備上部署模型的核心挑戰之一在於產生結果的速率。這需要執行一個複雜的流程,包括 4 個不同的神經網路,總計約 12.75 億個參數。要瞭解更多關於如何最佳化這種大小和複雜性的模型,以在 Apple Neural Engine 上運行,可以參閱以前的文章:Deploying Transformers on the Apple Neural Engine。

上文中概述的最佳化原則可以推廣到 Stable Diffusion,儘管它比文中研究的模型大 18 倍。為 Stable Diffusion 最佳化 Core ML 和簡化模型轉換,可以讓開發者更容易在他們的應用程式中以保護隱私和經濟可行的方式利用該技術,並使其在 Apple Silicon 上展現出的性能達到最佳狀態。 

這次發布的版本包括一個 Python 包,用於使用 diffusers 和 coremltools 將 Stable Diffusion 模型從 PyTorch 轉換到 Core ML,以及一個 Swift 包來部署模型。請存取 Core ML Stable Diffusion 程式碼儲存庫以啟動,並獲取關於基準測試和部署的詳細說明。 

專案介紹

整個程式碼庫包括: 

  • python_coreml_stable_diffusion,一個 Python 包,用於將 PyTorch 模型轉換為 Core ML 格式,並使用 Python 版的 Hugging Face diffusers 執行圖像產生; 
  • StableDiffusion,一個 Swift 包,開發者可以把它作為依賴包添加到他們的 Xcode 專案中,在他們的應用程式中部署圖像產生功能。Swift 包依賴於 python_coreml_stable_diffusion 產生的 Core ML 模型檔案。 

將模型轉換為 Core ML 版本 

步驟 1:創建 Python 環境並安裝依賴包: 

步驟 2:登錄或註冊 Hugging Face 帳戶,產生用戶存取權杖,並使用權杖通過在終端視窗運行 huggingface-cli login 來設置 Hugging Face API 存取。

步驟 3:找到想在 Hugging Face Hub 上使用的 Stable Diffusion 版本,接受使用條款。默認型號版本為 “CompVis/stable-diffusion-v1-4”。

步驟 4:從終端執行以下命令產生 Core ML 模型檔 (.mlpackage)

M1 MacBook Pro 一般需要 15-20 分鐘。成功執行後,構成 Stable Diffusion 的 4 個神經網路模型將從 PyTorch 轉換為 Core ML 版 (.mlpackage),並保存到指定的 < output-mlpackages-directory>. 

用 Python 產生圖像

使用基於 diffusers 的示例 Python 管道運行文本到圖像產生。

使用 Swift 產生圖像 

構建 Swift 專案需要:

  • macOS 13 或更新版本
  • 安裝了命令列工具的 Xcode 14.1 或更新版本。
  • Core ML 模型和 tokenization 資源。

如果將此模型部署到: 

  • iPhone: iOS 16.2 及以上版本和 iPhone 12 及以上版本
  • iPad: iPadOS 16.2 或更新版本和 M1 或更新版本
  • Mac: macOS 13.1 或更新版本和 M1 或更新版本 

Swift 包包含兩個產品:StableDiffusion 庫和 StableDiffusionSample 命令列工具。這兩個產品都需要提供 Core ML 模型和 tokenization 資源。

性能基準測試

標準 CompVis/stable-diffusion-v1-4 基準。該基準測試由蘋果公司在 2022 年 11 月使用 iOS 16.2、iPadOS 16.2 和 macOS 13.1 的公開測試版進行。

針對 macOS 設備,執行的程式是 python_coreml_stable_diffusion。對於 iOS 和 ipad 設備,有一個建立在 StableDiffusion Swift 包上的最小 Swift 測試應用程式。

圖像產生過程遵循標準配置: 

50 個推理步驟,512x512 輸出圖像解析度,77 文本 token 序列長度,無分類器引導 (unet 批大小為 2)。 

資料來源:

ADVERTISEMENT