最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

使用 LoRA 進行 Stable Diffusion 的高效參數(shù)微調(diào)

2023-02-10 12:01 作者:HuggingFace  | 我要投稿

LoRA: Low-Rank Adaptation of Large Language Models 是微軟研究員引入的一項新技術(shù),主要用于處理大模型微調(diào)的問題。目前超過數(shù)十億以上參數(shù)的具有強能力的大模型 (例如 GPT-3) 通常在為了適應(yīng)其下游任務(wù)的微調(diào)中會呈現(xiàn)出巨大開銷。 LoRA 建議凍結(jié)預(yù)訓(xùn)練模型的權(quán)重并在每個 Transformer 塊中注入可訓(xùn)練層 (秩-分解矩陣)。因為不需要為大多數(shù)模型權(quán)重計算梯度,所以大大減少了需要訓(xùn)練參數(shù)的數(shù)量并且降低了 GPU 的內(nèi)存要求。研究人員發(fā)現(xiàn),通過聚焦大模型的 Transformer 注意力塊,使用 LoRA 進行的微調(diào)質(zhì)量與全模型微調(diào)相當(dāng),同時速度更快且需要更少的計算。

LoRA 論文預(yù)印本鏈接:https://arxiv.org/abs/2106.09685

用于 Diffusers 的 LoRA ??

盡管 LoRA 最初是為大模型提出的,并在 transformer 塊上進行了演示,但該技術(shù)也可以應(yīng)用于其他地方。在微調(diào) Stable Diffusion 的情況下,LoRA 可以應(yīng)用于將圖像表示與描述它們的提示相關(guān)聯(lián)的交叉注意層。下圖的細節(jié) (摘自Stable Diffusion 論文) 并不重要,只需要注意黃色塊是負責(zé)建立圖文之間的關(guān)系表示就行。

Stable Diffusion 論文地址:https://arxiv.org/abs/2112.10752

潛在擴散架構(gòu)

據(jù)我們所知,Simo Ryu (GitHub 用戶名 @cloneofsimo) 是第一個提出適用于 Stable Diffusion 的 LoRA 實現(xiàn)的人。如果想查看相關(guān)示例和許多其他有趣的討論和見解。請一定要看看他們的 GitHub 項目。

Simo Ryu 等實現(xiàn)的 LoRA 項目地址:https://github.com/cloneofsimo/lora

為了將 LoRA 的可訓(xùn)練矩陣注入到與交叉注意力層一樣深的模型中,過去人們需要以富有想象力 (但脆弱) 的方式破解 diffusers 的源代碼。如果 Stable Diffusion 向我們展示了一件事,那就是社區(qū)總是會想出辦法來改變和調(diào)整模型以達到創(chuàng)造性目的,我們喜歡這樣!由于許多其他原因,提供操縱交叉注意力層的靈活性可能是有益的,例如更容易采用 xFormers 等優(yōu)化技術(shù)。 Prompt-to-Prompt 等其他創(chuàng)意項目可以使用一些簡單的方法來訪問這些層,因此我們決定 為用戶提供一種通用的方法來做到這一點。自 12 月下旬以來,我們一直在測試,并在我們的 diffusers 中正式發(fā)布。

  • Diffusers 源代碼鏈接: https://github.com/huggingface/diffusers

  • xFormers 項目地址:https://github.com/facebookresearch/xformers

  • Prompt-to-Prompt 論文預(yù)印本地址:https://arxiv.org/abs/2208.01626

我們一直在與 @cloneofsimo 合作,為 Dreambooth 和全微調(diào)方法提供 Diffusions 中的 LoRA 訓(xùn)練支持!這些技術(shù)提供了以下好處:

  • 更快的訓(xùn)練速度

  • 計算要求較低。我們可以在具有 11 GB VRAM 的 2080 Ti 中創(chuàng)建一個全微調(diào)模型!

  • 小了很多的訓(xùn)練模型。由于原始模型已凍結(jié),我們注入了新層進行訓(xùn)練,因此我們可以將新層的權(quán)重保存為大小約為 3 MB 的單個文件。這比 UNet 模型的原始大小小一千倍

我們對最后一點特別興奮。為了讓用戶分享他們出色的微調(diào)或 dreamboothed 模型,他們必須分享最終模型的完整副本。其他想要試用它們的用戶必須在他們最喜歡的 UI 中下載經(jīng)過微調(diào)的權(quán)重,這會增加大量存儲和下載成本。截至今天,大約有 1,000 個 Dreambooth 模型在 Dreambooth 概念庫中注冊,可能還有更多未在庫中注冊。

由社區(qū)統(tǒng)計的 Dreambooth 概念庫清單:https://huggingface.co/sd-dreambooth-library

使用 LoRA,現(xiàn)在可以發(fā)布 單個 3.29 MB 文件 以允許其他人使用你的微調(diào)模型。

(感謝 GitHub 用戶 @mishig25,他是我了解到的首個在平常對話中將 dreamboothing 作為動詞的人)。

LoRA 微調(diào)

Stable Diffusion 的全模型微調(diào)過去既緩慢又困難,這也是 Dreambooth 或 Textual Inversion 等輕量級方法變得如此流行的部分原因。使用 LoRA,在自定義數(shù)據(jù)集上微調(diào)模型要容易得多。

Diffusers 現(xiàn)在提供了一個 LoRA 微調(diào)腳本,可以在低至 11 GB 的 GPU RAM 中運行而無需借助到諸如 8-bit 優(yōu)化器之類的技巧。這里展示了您如何借助它來使用 Lambda Labs Pokémon 數(shù)據(jù)集 微調(diào)模型:

  • LoRA 微調(diào)腳本地址:https://github.com/huggingface/diffusers/blob/main/examples/text_to_image/train_text_to_image_lora.py

  • Lambda Labs Pokémon 數(shù)據(jù)集:?https://huggingface.co/datasets/lambdalabs/pokemon-blip-captions

這里需要注意的一件事是學(xué)習(xí)率為“1e-4”,遠大于常規(guī)微調(diào)的通常學(xué)習(xí)率(通常為“~1e-6”的數(shù)量級)。這是上次運行的 W&B dashboard,在 2080 Ti GPU (11 GB 內(nèi)存)。我沒有嘗試優(yōu)化超參數(shù),所以請自行嘗試!Sayak 在 T4 (16 GB 內(nèi)存) 上又跑了一次,這是 他的最終模型,這里是使用它的演示空間。

  • W&B dashboard 鏈接:https://wandb.ai/pcuenq/text2image-fine-tune/runs/b4k1w0tn?workspace=user-pcuenq

  • Sayak 的最終模型地址:https://huggingface.co/sayakpaul/sd-model-finetuned-lora-t4

  • 使用了 Sayak 模型的演示空間:https://huggingface.co/spaces/pcuenq/lora-pokemon

Sayak 的 LoRA 模型輸出示例

有關(guān) diffuser 中 LoRA 支持的更多詳細信息,請參閱我們的文檔——它將始終與實現(xiàn)保持同步。

使用 LoRA 的訓(xùn)練文檔地址:https://huggingface.co/docs/diffusers/main/en/training/lora

推理

正如我們所討論的,LoRA 的主要優(yōu)勢之一是您可以通過訓(xùn)練比原始模型大小少幾個數(shù)量級的權(quán)重來獲得出色的結(jié)果。我們設(shè)計了一個推理過程,允許在未修改的 Stable Diffusion 模型權(quán)重之上加載額外的權(quán)重。讓我們看看它是如何工作的。

首先,我們將使用 Hub API 自動確定用于微調(diào) LoRA 模型的基本模型是什么。從 Sayak的模型開始,我們可以使用這段代碼:

此代碼段將打印他用于微調(diào)的模型,即“CompVis/stable-diffusion-v1-4”。就我而言,我從 Stable Diffusion 1.5 版開始訓(xùn)練我的模型,因此如果您使用 我的 LoRA 模型 運行相同的代碼,您會看到輸出是 runwayml/stable-diffusion-v1-5。

Pedro Cuenca 的 LoRA 模型:https://huggingface.co/pcuenq/pokemon-lora

如果您使用 --push_to_hub 選項,我們在上一節(jié)中看到的微調(diào)腳本會自動填充有關(guān)基本模型的信息。正如您在 pokemon-lora 的介紹文檔 中所見,這被記錄為模型存儲庫的“自述文件”文件中的元數(shù)據(jù)標簽。

介紹文檔地址:https://huggingface.co/pcuenq/pokemon-lora/blob/main/README.md

在我們確定了用于使用 LoRA 進行微調(diào)的基礎(chǔ)模型之后,我們加載了一個正常的穩(wěn)定擴散管道。我們將使用 DPMSolverMultistepScheduler 對其進行自定義,以實現(xiàn)非??焖俚耐评恚?/p>

神奇的地方來了。我們從 hub 加載 LoRA 權(quán)重 在常規(guī)模型權(quán)重之上,將 pipline 移動到 cuda 設(shè)備并運行推理:

用 LoRA 進行 Dreamboothing

Dreambooth 允許您向 Stable Diffusion 模型“教授”新概念。 LoRA 與 Dreambooth 兼容,過程類似于微調(diào),有幾個優(yōu)點:

  • 訓(xùn)練更快。

  • 我們只需要幾張我們想要訓(xùn)練的主題的圖像 (通常 5 或 10 張就足夠了)。

  • 如果需要,我們可以調(diào)整文本編碼器,以提高對訓(xùn)練主體的保真度。

要使用 LoRA 訓(xùn)練 Dreambooth,您需要使用 此 diffusers 腳本。請看一下 README、文檔 和我們的超參數(shù)探索博文 了解詳細信息.

  • Diffusers 腳本地址:https://github.com/huggingface/diffusers/blob/main/examples/dreambooth/train_dreambooth_lora.py

  • 有關(guān)文檔:https://github.com/huggingface/diffusers/tree/main/examples/dreambooth#training-with-low-rank-adaptation-of-large-language-models-lora

    https://huggingface.co/docs/diffusers/main/en/training/loraAhttps://huggingface.co/blog/dreambooth

其他方法

對輕松微調(diào)的追求并不新鮮。除了 Dreambooth 之外,textual inversion 是另一種流行的方法,它試圖向訓(xùn)練有素的穩(wěn)定擴散模型教授新概念。使用 Textual Inversion 的主要原因之一是經(jīng)過訓(xùn)練的權(quán)重也很小且易于共享。然而,它們只適用于單個主題 (或一小部分主題),而 LoRA 可用于通用微調(diào),這意味著它可以適應(yīng)新的領(lǐng)域或數(shù)據(jù)集。

關(guān)于 Textual inversion 訓(xùn)練方法的文檔:https://huggingface.co/docs/diffusers/main/en/training/text_inversion

Pivotal Tuning 是一種嘗試將 Textual Inversion 與 LoRA 相結(jié)合的方法。首先,您使用 textual inversion 技術(shù)向模型教授一個新概念,獲得一個新的標記嵌入來表示它。然后,您使用 LoRA 訓(xùn)練該 token 嵌入以獲得兩全其美。

Pivotal Tuning 論文的預(yù)印本地址:https://arxiv.org/abs/2106.05744

我們還沒有使用 LoRA 探索過 Pivotal Tuning。歡迎挑戰(zhàn)? ??

英文原文: https://huggingface.co/blog/lora

原文作者: Pedro Cuenca, Sayak Paul

中文譯者: innovation64 (李洋)

審校: zhongdongy (忠東)

使用 LoRA 進行 Stable Diffusion 的高效參數(shù)微調(diào)的評論 (共 條)

分享到微博請遵守國家法律
泽普县| 大英县| 龙门县| 石首市| 青神县| 梨树县| 湖南省| 万州区| 南阳市| 宣威市| 新巴尔虎右旗| 泌阳县| 阳城县| 遵义市| 志丹县| 永寿县| 乡宁县| 宁远县| 青州市| 宁国市| 诸暨市| 余姚市| 东安县| 河间市| 鄄城县| 定州市| 富宁县| 图木舒克市| 阿瓦提县| 甘德县| 肥西县| 平果县| 上虞市| 台南市| 普陀区| 大足县| 迁西县| 文昌市| 靖州| 长岭县| 昌图县|