日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

使用 LCM LoRA 4 步完成 SDXL 推理

發布時間:2023/11/21 windows 72 coder
生活随笔 收集整理的這篇文章主要介紹了 使用 LCM LoRA 4 步完成 SDXL 推理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LCM 模型 通過將原始模型蒸餾為另一個需要更少步數 (4 到 8 步,而不是原來的 25 到 50 步) 的版本以減少用 Stable Diffusion (或 SDXL) 生成圖像所需的步數。蒸餾是一種訓練過程,其主要思想是嘗試用一個新模型來復制源模型的輸出。蒸餾后的模型要么尺寸更小 (如 DistilBERT 或最近發布的 Distil-Whisper),要么需要運行的步數更少 (本文即是這種情況)。一般來講,蒸餾是一個漫長且成本高昂的過程,需要大量數據、耐心以及一些 GPU 運算。

但以上所述皆為過往,今天我們翻新篇了!

今天,我們很高興地公開一種新方法,其可以從本質上加速 Stable Diffusion 和 SDXL,效果跟用 LCM 蒸餾過一樣!有了它,我們在 3090 上運行 任何 SDXL 模型,不需要 70 秒,也不需要 7 秒,僅需要約 1 秒就行了!在 Mac 上,我們也有 10 倍的加速!聽起來是不是很帶勁?那繼續往下讀吧!

目錄

  • 方法概述
  • 快有啥用?
  • 快速推理 SDXL LCM LoRA 模型
    • 生成質量
    • 引導比例及反向提示
    • 與標準 SDXL 模型的生成質量對比
    • 其他模型的 LCM LoRA
    • Diffusers 全集成
  • 測試基準
  • 已公開發布的 LCM LoRA 及 LCM 模型
  • 加分項:將 LCM LoRA 與常規 SDXL LoRA 結合起來
  • 如何訓練 LCM 模型及 LCM LoRA
  • 資源
  • 致謝

方法概述

到底用了啥技巧?

在使用原始 LCM 蒸餾時,每個模型都需要單獨蒸餾。而 LCM LoRA 的核心思想是只對少量適配器 (即 LoRA 層) 進行訓練,而不用對完整模型進行訓練。推理時,可將生成的 LoRA 用于同一模型的任何微調版本,而無需對每個版本都進行蒸餾。如果你已經迫不及待地想試試這種方法的實際效果了,可以直接跳到 下一節 試一下推理代碼。如果你想訓練自己的 LoRA,流程如下:

  1. 從 Hub 中選擇一個教師模型。如: 你可以使用 SDXL (base),或其任何微調版或 dreambooth 微調版,隨你喜歡。
  2. 在該模型上 訓練 LCM LoRA 模型。LoRA 是一種參數高效的微調 (PEFT),其實現成本比全模型微調要便宜得多。有關 PEFT 的更詳細信息,請參閱 此博文 或 diffusers 庫的 LoRA 文檔。
  3. 將 LoRA 與任何 SDXL 模型和 LCM 調度器一起組成一個流水線,進行推理。就這樣!用這個流水線,你只需幾步推理即可生成高質量的圖像。

欲知更多詳情,請 下載我們的論文。

快有啥用?

Stable Diffusion 和 SDXL 的快速推理為新應用和新工作流打開了大門,僅舉幾例:

  • 更易得: 變快后,生成工具可以被更多人使用,即使他們沒有最新的硬件。
  • 迭代更快: 無論從個人還是商業角度來看,在短時間內生成更多圖像或進行更多嘗試對于藝術家和研究人員來說都非常有用。
  • 可以在各種不同的加速器上進行生產化部署,包括 CPU。
  • 圖像生成服務會更便宜。

為了衡量我們所說的速度差異,在 M1 Mac 上用 SDXL (base) 生成一張 1024x1024 圖像大約需要一分鐘。而用 LCM LoRA,我們只需約 6 秒 (4 步) 即可獲得出色的結果。速度快了一個數量級,我們再也無需等待結果,這帶來了顛覆性的體驗。如果使用 4090,我們幾乎可以得到實時響應 (不到 1 秒)。有了它,SDXL 可以用于需要實時響應的場合。

快速推理 SDXL LCM LoRA 模型

在最新版的 diffusers 中,大家可以非常容易地用上 LCM LoRA:

from diffusers import DiffusionPipeline, LCMScheduler
import torch

model_id = "stabilityai/stable-diffusion-xl-base-1.0"
lcm_lora_id = "latent-consistency/lcm-lora-sdxl"

pipe = DiffusionPipeline.from_pretrained(model_id, variant="fp16")

pipe.load_lora_weights(lcm_lora_id)
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.to(device="cuda", dtype=torch.float16)

prompt = "close-up photography of old man standing in the rain at night, in a street lit by lamps, leica 35mm summilux"
images = pipe(
    prompt=prompt,
    num_inference_steps=4,
    guidance_scale=1,
).images[0]

代碼所做的事情如下:

  • 使用 SDXL 1.0 base 模型去實例化一個標準的 diffusion 流水線。
  • 應用 LCM LoRA。
  • 將調度器改為 LCMScheduler,這是 LCM 模型使用的調度器。
  • 結束!

生成的全分辨率圖像如下所示:


LCM LORA 微調后的 SDXL 模型用 4 步生成的圖像

生成質量

我們看下步數對生成質量的影響。以下代碼將分別用 1 步到 8 步生成圖像:

images = []
for steps in range(8):
    generator = torch.Generator(device=pipe.device).manual_seed(1337)
    image = pipe(
        prompt=prompt,
        num_inference_steps=steps+1,
        guidance_scale=1,
        generator=generator,
    ).images[0]
    images.append(image)

生成的 8 張圖像如下所示:


LCM LoRA 1 至 8 步生成的圖像

不出所料,僅使用 1 步即可生成細節和紋理欠缺的粗略圖像。然而,隨著步數的增加,效果改善迅速,通常只需 4 到 6 步就可以達到滿意的效果。個人經驗是,8 步生成的圖像對于我來說有點過飽和及“卡通化”,所以本例中我個人傾向于選擇 5 步和 6 步生成的圖像。生成速度非常快,你只需 4 步即可生成一堆圖像,并從中選擇你喜歡的,然后根據需要對步數和提示詞進行調整和迭代。

引導比例及反向提示

請注意,在前面的示例中,我們將引導比例 guidance_scale 設為 1 ,實際上就是禁用它。對大多數提示而言,這樣設置就可以了,此時速度最快,但會忽略反向提示。你還可以將其值設為 12 之間,用于探索反向提示的影響——但我們發現再大就不起作用了。

與標準 SDXL 模型的生成質量對比

就生成質量而言,本文的方法與標準 SDXL 流水線相比如何?我們看一個例子!

我們可以通過卸掉 LoRA 權重并切換回默認調度器來將流水線快速恢復為標準 SDXL 流水線:

from diffusers import EulerDiscreteScheduler

pipe.unload_lora_weights()
pipe.scheduler = EulerDiscreteScheduler.from_config(pipe.scheduler.config)

然后,我們可以像往常一樣對 SDXL 進行推理。我們使用不同的步數并觀察其結果:

images = []
for steps in (1, 4, 8, 15, 20, 25, 30, 50):
    generator = torch.Generator(device=pipe.device).manual_seed(1337)
    image = pipe(
        prompt=prompt,
        num_inference_steps=steps,
        generator=generator,
    ).images[0]
    images.append(image)


SDXL 流水線結果 (相同的提示和隨機種子),步數分別為 1、4、8、15、20、25、30 和 50

如你所見,此示例中的生成的圖像在大約 20 步 (第二行) 之前幾乎毫無用處,且隨著步數的增加,質量仍會不斷明顯提高。最終圖像中的細節很不錯,但獲得這樣的效果需要 50 步。

其他模型的 LCM LoRA

該技術也適用于任何其他微調后的 SDXL 或 Stable Diffusion 模型。僅舉一例,我們看看如何在 collage-diffusion 上運行推理,該模型是用 Dreambooth 算法對 Stable Diffusion v1.5 微調而得。

代碼與我們在前面示例中看到的代碼類似。我們先加載微調后的模型,然后加載適合 Stable Diffusion v1.5 的 LCM LoRA 權重。

from diffusers import DiffusionPipeline, LCMScheduler
import torch

model_id = "wavymulder/collage-diffusion"
lcm_lora_id = "latent-consistency/lcm-lora-sdv1-5"

pipe = DiffusionPipeline.from_pretrained(model_id, variant="fp16")
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights(lcm_lora_id)
pipe.to(device="cuda", dtype=torch.float16)

prompt = "collage style kid sits looking at the night sky, full of stars"

generator = torch.Generator(device=pipe.device).manual_seed(1337)
images = pipe(
    prompt=prompt,
    generator=generator,
    negative_prompt=negative_prompt,
    num_inference_steps=4,
    guidance_scale=1,
).images[0]
images


基于 Dreambooth Stable Diffusion v1.5 模型使用 LCM LoRA,4 步推理

Diffusers 全集成

LCM 在 diffusers 中的全面集成使得其可以利用 diffusers 工具箱中的許多特性和工作流,如:

  • 對采用 Apple 芯片的 Mac 提供開箱即用的 mps 支持。
  • 內存和性能優化,例如 flash 注意力或 torch.compile()
  • 針對低 RAM 場景的其他內存節省策略,包括模型卸載。
  • ControlNet 或圖生圖等工作流。
  • 訓練和微調腳本。

測試基準

本節列出了 SDXL LCM LoRA 在各種硬件上的生成速度,給大家一個印象。忍不住再提一句,能如此輕松地探索圖像生成真是太爽了!

硬件 SDXL LoRA LCM (4 步) 標準 SDXL (25 步)
Mac, M1 Max 6.5s 64s
2080 Ti 4.7s 10.2s
3090 1.4s 7s
4090 0.7s 3.4s
T4 (Google Colab Free Tier) 8.4s 26.5s
A100 (80 GB) 1.2s 3.8s
Intel i9-10980XE CPU (共 36 核,僅用 1 核) 29s 219s

上述所有測試的 batch size 均為 1,使用是 Sayak Paul 開發的 這個腳本。

對于顯存容量比較大的卡 (例如 A100),一次生成多張圖像,性能會有顯著提高,一般來講生產部署時會采取增加 batch size 的方法來增加吞吐。

已公開發布的 LCM LoRA 及 LCM 模型

  • LCM LoRA 集錦

    • latent-consistency/lcm-lora-sdxl。SDXL 1.0 base 的 LCM LoRA 權重,上文示例即使用了該權重。
    • latent-consistency/lcm-lora-sdv1-5。Stable Diffusion 1.5 的 LCM LoRA 權重。
    • latent-consistency/lcm-lora-ssd-1bsegmind/SSD-1B 的 LCM LoRA 權重,該模型是經過蒸餾的 SDXL 模型,它尺寸比原始 SDXL 小 50%,速度快 60%。
  • latent-consistency/lcm-sdxl。對 SDXL 1.0 base 進行全模型微調而得的一致性模型。

  • latent-consistency/lcm-ssd-1b。對 segmind/SSD-1B 進行全模型微調而得的一致性模型。

加分項: 將 LCM LoRA 與常規 SDXL LoRA 結合起來

使用 diffusers + PEFT 集成,你可以將 LCM LoRA 與常規 SDXL LoRA 結合起來,使其也擁有 4 步推理的超能力。

這里,我們將 *N2022/toy_face LoRA 與 LCM LoRA 結合起來:

from diffusers import DiffusionPipeline, LCMScheduler
import torch

model_id = "stabilityai/stable-diffusion-xl-base-1.0"
lcm_lora_id = "latent-consistency/lcm-lora-sdxl"
pipe = DiffusionPipeline.from_pretrained(model_id, variant="fp16")
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.load_lora_weights(lcm_lora_id)
pipe.load_lora_weights("*N2022/toy-face", weight_name="toy_face_sdxl.safetensors", adapter_name="toy")

pipe.set_adapters(["lora", "toy"], adapter_weights=[1.0, 0.8])
pipe.to(device="cuda", dtype=torch.float16)

prompt = "a toy_face man"
negative_prompt = "blurry, low quality, render, 3D, oversaturated"
images = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    num_inference_steps=4,
    guidance_scale=0.5,
).images[0]
images


標準 LoRA 和 LCM LoRA 相結合實現 4 步快速推理

想要探索更多有關 LoRA 的新想法嗎?可以試試我們的實驗性 LoRA the Explorer (LCM 版本) 空間,在這里你可以把玩社區的驚人創作并從中獲取靈感!

如何訓練 LCM 模型及 LCM LoRA

最新的 diffusers 中,我們提供了與 LCM 團隊作者合作開發的訓練和微調腳本。有了它們,用戶可以:

  • 在 Laion 等大型數據集上執行 Stable Diffusion 或 SDXL 模型的全模型蒸餾。
  • 訓練 LCM LoRA,它比全模型蒸餾更簡單。正如我們在這篇文章中所示,訓練后,可以用它對 Stable Diffusion 實現快速推理,而無需進行蒸餾訓練。

更多詳細信息,請查閱代碼庫中的 SDXL 或 Stable Diffusion 說明文檔。

我們希望這些腳本能夠激勵社區探索實現自己的微調。如果你將它們用于自己的項目,請告訴我們!

資源

  • LCM 項目網頁、論文

  • LCM LoRA 相關資源

    • SDXL 的 LCM LoRA 權重
    • Stable Diffusion v1.5 的 LCM LoRA 權重
    • Segmind SSD-1B 的 LCM LoRA 權重
    • 技術報告
  • 演示應用

    • 4 步推理 SDXL LCM LoRA 模型
    • 近實時視頻流
  • LoRA the Explorer 空間 (實驗性 LCM 版)

  • PEFT: 簡介、代碼庫

  • 訓練腳本

    • Stable Diffusion 1.5 訓練腳本
    • SDXL 訓練腳本

致謝

LCM 團隊 完成了 LCM 模型的出色工作,請務必查閱他們的代碼、報告和論文。該項目是 diffusers 團隊、LCM 團隊以及社區貢獻者 Daniel Gu 合作的結果。我們相信,這證明了開源人工智能的強大力量,它是研究人員、從業者和探客 (tinkerer) 們探索新想法和協作的基石。我們還要感謝 @madebyollin 對社區的持續貢獻,其中包括我們在訓練腳本中使用的 float16 自編碼器。


英文原文: https://hf.co/blog/lcm_lora

原文作者: Pedro Cuenca,Suraj Patil,Simian Luo,Daniel Gu,Yiqin Tan,Sayak Paul,Apolinário

譯者: Matrix Yao (姚偉峰),英特爾深度學習工程師,工作方向為 transformer-family 模型在各模態數據上的應用及大規模模型的訓練推理。

審校/排版: zhongdongy (阿東)

總結

以上是生活随笔為你收集整理的使用 LCM LoRA 4 步完成 SDXL 推理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。