使用 LoRA 進行高效的 Stable Diffusion 微調
Hugging Face 已將低秩適應(LoRA)整合到 diffusers 套件中,使 Stable Diffusion 的微調更快,所需的 VRAM 大幅降低,模型權重僅約 3 MB。此實作讓使用者能在不需全模型微調的高昂計算成本下,將大型擴散模型調整至特定風格或概念。
LoRA 架構與在 Stable Diffusion 中的應用
低秩適應(LoRA)是一項最初由微軟研究人員為大型語言模型(LLM)如 GPT-3 開發的技術。它透過凍結預訓練模型權重,並在 transformer 區塊中注入可訓練的秩分解矩陣來運作。此方法減少了可訓練參數的數量與 GPU 記憶體需求,因為大部分模型權重不會計算梯度。
在 Stable Diffusion 的情境下,LoRA 被應用於 cross‑attention 層。這些層負責建立影像表徵與描述它們的文字提示之間的關係。透過針對這些特定層,LoRA 能達到與全模型微調相當的微調品質,同時更快且計算更有效率。
LoRA 微調的主要優勢
- 降低計算需求: 微調可以在消費級硬體上執行。例如,可使用具 11 GB VRAM 的 NVIDIA 2080 Ti 來建立完整的微調模型。
- 更快的訓練: 可訓練參數的減少使訓練週期顯著加快。
- 極小的權重檔案: 由於原始模型保持凍結,僅需保存注入層的權重。這使得權重檔案約為 3 MB(某些情況下具體為 3.29 MB),大約比原始 UNet 模型小 1,000 倍。
實作與推論工作流程
微調流程
Hugging Face 提供了專用的 LoRA 微調腳本(train_text_to_image_lora.py),可在僅 11 GB GPU 記憶體下運行。一個值得注意的技術細節是 LoRA 通常需要比一般微調更高的學習率;例如,使用 1e-4 的學習率,而全模型微調通常使用約 ~1e-6。
推論與載入
推論過程設計為在未修改的 Stable Diffusion 基礎模型上載入 LoRA 權重。工作流程包括:
- 基礎模型識別: 使用 Hub API 確認訓練時使用的基礎模型(例如
CompVis/stable-diffusion-v1-4或runwayml/stable-diffusion-v1-5)。 - 管線初始化: 使用已識別的基礎模型載入標準的
StableDiffusionPipeline。 - 權重注入: 使用
pipe.unet.load_attn_procs(model_path)從 Hub 直接將 LoRA 權重載入至常規模型權重上。
與 Dreambooth 的相容性
LoRA 與 Dreambooth 相容,Dreambooth 是用於教導 Stable Diffusion 新的特定概念的方法。結合這兩種技術可帶來多項好處:
- 較快的訓練速度,相較於標準 Dreambooth。
- 低資料需求,通常僅需 5 至 10 張主體圖像。
- 可選的文字編碼器微調,以提升對主體的忠實度。
與其他微調方法的比較
雖然有其他方法可用於調整 Stable Diffusion,但 LoRA 依據使用情境提供了明顯的優勢:
- Textual Inversion(文字反轉): 產生類似 LoRA 的小型、易於分享的權重,但通常僅限於單一主體或少數概念。
- LoRA: 適用於通用微調,允許模型適應全新領域或資料集。
- Pivotal Tuning(關鍵微調): 結合 Textual Inversion 取得 token 嵌入,然後使用 LoRA 訓練該嵌入的混合方法。