使用 LCM LoRA 4 步完成 SDXL 推理

LCM 模型 (Latent Consistency Model) 通過將原始模型蒸餾為另一個(gè)需要更少步數(shù) (4 到 8 步,而不是原來的 25 到 50 步) 的版本以減少用 Stable Diffusion (或 SDXL) 生成圖像所需的步數(shù)。蒸餾是一種訓(xùn)練過程,其主要思想是嘗試用一個(gè)新模型來復(fù)制源模型的輸出。蒸餾后的模型要么尺寸更小 (如 DistilBERT 或最近發(fā)布的 Distil-Whisper),要么需要運(yùn)行的步數(shù)更少 (本文即是這種情況)。一般來講,蒸餾是一個(gè)漫長且成本高昂的過程,需要大量數(shù)據(jù)、耐心以及一些 GPU 運(yùn)算。
但以上所述皆為過往,今天我們翻新篇了!
今天,我們很高興地公開一種新方法,其可以從本質(zhì)上加速 Stable Diffusion 和 SDXL,效果跟用 LCM 蒸餾過一樣!有了它,我們在 3090 上運(yùn)行?任何?SDXL 模型,不需要 70 秒,也不需要 7 秒,僅需要約 1 秒就行了!在 Mac 上,我們也有 10 倍的加速!聽起來是不是很帶勁?那繼續(xù)往下讀吧!
目錄
方法概述
快有啥用?
快速推理 SDXL LCM LoRA 模型
生成質(zhì)量
引導(dǎo)比例及反向提示
與標(biāo)準(zhǔn) SDXL 模型的生成質(zhì)量對比
其他模型的 LCM LoRA
Diffusers 全集成
測試基準(zhǔn)
已公開發(fā)布的 LCM LoRA 及 LCM 模型
加分項(xiàng):將 LCM LoRA 與常規(guī) SDXL LoRA 結(jié)合起來
如何訓(xùn)練 LCM 模型及 LCM LoRA
資源
致謝
方法概述
到底用了啥技巧?
在使用原始 LCM 蒸餾時(shí),每個(gè)模型都需要單獨(dú)蒸餾。而 LCM LoRA 的核心思想是只對少量適配器 (即 LoRA 層) 進(jìn)行訓(xùn)練,而不用對完整模型進(jìn)行訓(xùn)練。推理時(shí),可將生成的 LoRA 用于同一模型的任何微調(diào)版本,而無需對每個(gè)版本都進(jìn)行蒸餾。如果你已經(jīng)迫不及待地想試試這種方法的實(shí)際效果了,可以直接跳到下一節(jié)試一下推理代碼。如果你想訓(xùn)練自己的 LoRA,流程如下:
從 Hub 中選擇一個(gè)教師模型。如: 你可以使用 SDXL (base),或其任何微調(diào)版或 dreambooth 微調(diào)版,隨你喜歡。
在該模型上 訓(xùn)練 LCM LoRA 模型。LoRA 是一種參數(shù)高效的微調(diào) (PEFT),其實(shí)現(xiàn)成本比全模型微調(diào)要便宜得多。有關(guān) PEFT 的更詳細(xì)信息,請參閱 此博文 或 diffusers 庫的 LoRA 文檔。
將 LoRA 與任何 SDXL 模型和 LCM 調(diào)度器一起組成一個(gè)流水線,進(jìn)行推理。就這樣!用這個(gè)流水線,你只需幾步推理即可生成高質(zhì)量的圖像。
欲知更多詳情,請 下載我們的論文。
快有啥用?
Stable Diffusion 和 SDXL 的快速推理為新應(yīng)用和新工作流打開了大門,僅舉幾例:
更易得: 變快后,生成工具可以被更多人使用,即使他們沒有最新的硬件。
迭代更快: 無論從個(gè)人還是商業(yè)角度來看,在短時(shí)間內(nèi)生成更多圖像或進(jìn)行更多嘗試對于藝術(shù)家和研究人員來說都非常有用。
可以在各種不同的加速器上進(jìn)行生產(chǎn)化部署,包括 CPU。
圖像生成服務(wù)會更便宜。
為了衡量我們所說的速度差異,在 M1 Mac 上用 SDXL (base) 生成一張 1024x1024 圖像大約需要一分鐘。而用 LCM LoRA,我們只需約 6 秒 (4 步) 即可獲得出色的結(jié)果。速度快了一個(gè)數(shù)量級,我們再也無需等待結(jié)果,這帶來了顛覆性的體驗(yàn)。如果使用 4090,我們幾乎可以得到實(shí)時(shí)響應(yīng) (不到 1 秒)。有了它,SDXL 可以用于需要實(shí)時(shí)響應(yīng)的場合。
快速推理 SDXL LCM LoRA 模型
在最新版的?diffusers
?中,大家可以非常容易地用上 LCM LoRA:?
代碼所做的事情如下:
使用 SDXL 1.0 base 模型去實(shí)例化一個(gè)標(biāo)準(zhǔn)的 diffusion 流水線。
應(yīng)用 LCM LoRA。
將調(diào)度器改為 LCMScheduler,這是 LCM 模型使用的調(diào)度器。
結(jié)束!
生成的全分辨率圖像如下所示:

? ?LCM LORA 微調(diào)后的 SDXL 模型用 4 步生成的圖像
生成質(zhì)量
我們看下步數(shù)對生成質(zhì)量的影響。以下代碼將分別用 1 步到 8 步生成圖像:?
生成的 8 張圖像如下所示:

? ?LCM LoRA 1 至 8 步生成的圖像
不出所料,僅使用?1?步即可生成細(xì)節(jié)和紋理欠缺的粗略圖像。然而,隨著步數(shù)的增加,效果改善迅速,通常只需 4 到 6 步就可以達(dá)到滿意的效果。個(gè)人經(jīng)驗(yàn)是,8 步生成的圖像對于我來說有點(diǎn)過飽和及“卡通化”,所以本例中我個(gè)人傾向于選擇 5 步和 6 步生成的圖像。生成速度非??欤阒恍?4 步即可生成一堆圖像,并從中選擇你喜歡的,然后根據(jù)需要對步數(shù)和提示詞進(jìn)行調(diào)整和迭代。
引導(dǎo)比例及反向提示
請注意,在前面的示例中,我們將引導(dǎo)比例?guidance_scale
?設(shè)為?1
?,實(shí)際上就是禁用它。對大多數(shù)提示而言,這樣設(shè)置就可以了,此時(shí)速度最快,但會忽略反向提示。你還可以將其值設(shè)為?1
?到?2
?之間,用于探索反向提示的影響——但我們發(fā)現(xiàn)再大就不起作用了。
與標(biāo)準(zhǔn) SDXL 模型的生成質(zhì)量對比
就生成質(zhì)量而言,本文的方法與標(biāo)準(zhǔn) SDXL 流水線相比如何?我們看一個(gè)例子!
我們可以通過卸掉 LoRA 權(quán)重并切換回默認(rèn)調(diào)度器來將流水線快速恢復(fù)為標(biāo)準(zhǔn) SDXL 流水線:?
然后,我們可以像往常一樣對 SDXL 進(jìn)行推理。我們使用不同的步數(shù)并觀察其結(jié)果:?

? ?SDXL 流水線結(jié)果 (相同的提示和隨機(jī)種子),步數(shù)分別為 1、4、8、15、20、25、30 和 50
如你所見,此示例中的生成的圖像在大約 20 步 (第二行) 之前幾乎毫無用處,且隨著步數(shù)的增加,質(zhì)量仍會不斷明顯提高。最終圖像中的細(xì)節(jié)很不錯(cuò),但獲得這樣的效果需要 50 步。
其他模型的 LCM LoRA
該技術(shù)也適用于任何其他微調(diào)后的 SDXL 或 Stable Diffusion 模型。僅舉一例,我們看看如何在?collage-diffusion
?上運(yùn)行推理,該模型是用 Dreambooth 算法對 Stable Diffusion v1.5 微調(diào)而得。
代碼與我們在前面示例中看到的代碼類似。我們先加載微調(diào)后的模型,然后加載適合 Stable Diffusion v1.5 的 LCM LoRA 權(quán)重。

? ?基于 Dreambooth Stable Diffusion v1.5 模型使用 LCM LoRA,4 步推理
Diffusers 全集成
LCM 在?diffusers
?中的全面集成使得其可以利用?diffusers
?工具箱中的許多特性和工作流,如:
對采用 Apple 芯片的 Mac 提供開箱即用的?
mps
?支持。內(nèi)存和性能優(yōu)化,例如 flash 注意力或?
torch.compile()
?。針對低 RAM 場景的其他內(nèi)存節(jié)省策略,包括模型卸載。
ControlNet 或圖生圖等工作流。
訓(xùn)練和微調(diào)腳本。
測試基準(zhǔn)
本節(jié)列出了 SDXL LCM LoRA 在各種硬件上的生成速度,給大家一個(gè)印象。忍不住再提一句,能如此輕松地探索圖像生成真是太爽了!

上述所有測試的 batch size 均為 1,使用是 Sayak Paul 開發(fā)的 這個(gè)腳本。
對于顯存容量比較大的卡 (例如 A100),一次生成多張圖像,性能會有顯著提高,一般來講生產(chǎn)部署時(shí)會采取增加 batch size 的方法來增加吞吐。
已公開發(fā)布的 LCM LoRA 及 LCM 模型
LCM LoRA 集錦
latent-consistency/lcm-lora-sdxl
。SDXL 1.0 base 的 LCM LoRA 權(quán)重,上文示例即使用了該權(quán)重。latent-consistency/lcm-lora-sdv1-5
。Stable Diffusion 1.5 的 LCM LoRA 權(quán)重。latent-consistency/lcm-lora-ssd-1b
。segmind/SSD-1B
?的 LCM LoRA 權(quán)重,該模型是經(jīng)過蒸餾的 SDXL 模型,它尺寸比原始 SDXL 小 50%,速度快 60%。latent-consistency/lcm-sdxl
。對 SDXL 1.0 base 進(jìn)行全模型微調(diào)而得的一致性模型。latent-consistency/lcm-ssd-1b
。對?segmind/SSD-1B
?進(jìn)行全模型微調(diào)而得的一致性模型。
加分項(xiàng): 將 LCM LoRA 與常規(guī) SDXL LoRA 結(jié)合起來
使用 diffusers + PEFT 集成,你可以將 LCM LoRA 與常規(guī) SDXL LoRA 結(jié)合起來,使其也擁有 4 步推理的超能力。
這里,我們將?CiroN2022/toy_face
?LoRA 與 LCM LoRA 結(jié)合起來:

? ?標(biāo)準(zhǔn) LoRA 和 LCM LoRA 相結(jié)合實(shí)現(xiàn) 4 步快速推理
想要探索更多有關(guān) LoRA 的新想法嗎?可以試試我們的實(shí)驗(yàn)性 LoRA the Explorer (LCM 版本) 空間,在這里你可以把玩社區(qū)的驚人創(chuàng)作并從中獲取靈感!
如何訓(xùn)練 LCM 模型及 LCM LoRA
最新的?diffusers
?中,我們提供了與 LCM 團(tuán)隊(duì)作者合作開發(fā)的訓(xùn)練和微調(diào)腳本。有了它們,用戶可以:
在 Laion 等大型數(shù)據(jù)集上執(zhí)行 Stable Diffusion 或 SDXL 模型的全模型蒸餾。
訓(xùn)練 LCM LoRA,它比全模型蒸餾更簡單。正如我們在這篇文章中所示,訓(xùn)練后,可以用它對 Stable Diffusion 實(shí)現(xiàn)快速推理,而無需進(jìn)行蒸餾訓(xùn)練。
更多詳細(xì)信息,請查閱代碼庫中的 SDXL 或 Stable Diffusion 說明文檔。
我們希望這些腳本能夠激勵(lì)社區(qū)探索實(shí)現(xiàn)自己的微調(diào)。如果你將它們用于自己的項(xiàng)目,請告訴我們!
資源
LCM 項(xiàng)目網(wǎng)頁、論文
LCM LoRA 相關(guān)資源
SDXL 的 LCM LoRA 權(quán)重
Stable Diffusion v1.5 的 LCM LoRA 權(quán)重
Segmind SSD-1B 的 LCM LoRA 權(quán)重
技術(shù)報(bào)告
演示應(yīng)用
4 步推理 SDXL LCM LoRA 模型
近實(shí)時(shí)視頻流
LoRA the Explorer 空間 (實(shí)驗(yàn)性 LCM 版)
PEFT: 簡介、代碼庫
訓(xùn)練腳本
Stable Diffusion 1.5 訓(xùn)練腳本
SDXL 訓(xùn)練腳本
致謝
LCM 團(tuán)隊(duì)完成了 LCM 模型的出色工作,請務(wù)必查閱他們的代碼、報(bào)告和論文。該項(xiàng)目是 diffusers 團(tuán)隊(duì)、LCM 團(tuán)隊(duì)以及社區(qū)貢獻(xiàn)者 Daniel Gu 合作的結(jié)果。我們相信,這證明了開源人工智能的強(qiáng)大力量,它是研究人員、從業(yè)者和探客 (tinkerer) 們探索新想法和協(xié)作的基石。我們還要感謝?@madebyollin
?對社區(qū)的持續(xù)貢獻(xiàn),其中包括我們在訓(xùn)練腳本中使用的?float16
?自編碼器。
英文原文:?https://hf.co/blog/lcm_lora
原文作者: Pedro Cuenca, Suraj Patil, Simian Luo, Daniel Gu, Yiqin Tan, Sayak Paul, Apolinário
譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向?yàn)?transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理。
審校/排版: zhongdongy (阿東)