告別冷啟動(dòng),LoRA成為大模型「氮?dú)饧铀倨鳌?,提速高達(dá)300%
AI 模型功能越來越強(qiáng)大,結(jié)構(gòu)也越來越復(fù)雜,它們的速度也成為了衡量先進(jìn)程度的標(biāo)準(zhǔn)之一。
如果 AI 是一輛豪華跑車,那么 LoRA 微調(diào)技術(shù)就是讓它加速的渦輪增壓器。LoRA 強(qiáng)大到什么地步?它可以讓模型的處理速度提升 300%。還記得 LCM-LoRA 的驚艷表現(xiàn)嗎?其他模型的十步,它只需要一步就能達(dá)到相媲美的效果。
這是怎么做到的?Raphael G 的博客詳細(xì)說明了 LoRA 如何在提高模型推理效率和速度方面取得顯著成效,并介紹了這一技術(shù)實(shí)現(xiàn)的改進(jìn)及其對(duì) AI 模型性能的重大影響。以下為機(jī)器之心對(duì)本篇博客不改變?cè)獾木幾g和整理。
原博客鏈接:https://huggingface.co/raphael-gl
我們已經(jīng)能夠大大加快基于公共擴(kuò)散模型的公共 LoRA 在 Hub 中的推理速度,這能夠節(jié)省大量的計(jì)算資源,并帶給用戶更快更好的使用體驗(yàn)。
要對(duì)給定模型進(jìn)行推理,有兩個(gè)步驟:
1. 預(yù)熱階段,包括下載模型和設(shè)置服務(wù) ——25 秒。
2. 然后是推理工作本身 ——10 秒。
經(jīng)過改進(jìn),預(yù)熱時(shí)間能夠從 25 秒縮短到 3 秒?,F(xiàn)在,我們只需不到 5 個(gè) A10G GPU 就能為數(shù)百個(gè)不同的 LoRA 提供推理服務(wù),而對(duì)用戶請(qǐng)求的響應(yīng)時(shí)間則從 35 秒減少到 13 秒。
下面讓我們進(jìn)一步討論如何利用 Diffusers 庫中最近開發(fā)的一些功能,通過單個(gè)服務(wù)以動(dòng)態(tài)方式為許多不同的 LoRA 提供服務(wù)。
什么是 LoRA
LoRA 是一種微調(diào)技術(shù),屬于「參數(shù)高效微調(diào)」(parameter-efficient fine-tuning,PEFT)方法系列,該方法致力于在微調(diào)過程減少受影響可訓(xùn)練參數(shù)的數(shù)量。它在提高微調(diào)速度的同時(shí),還能減少微調(diào)檢查點(diǎn)的大小。
LoRA 的方法并不是通過對(duì)模型的所有權(quán)重進(jìn)行微小改動(dòng)來微調(diào)模型,而是凍結(jié)大部分層,只在注意力模塊中訓(xùn)練少數(shù)特定層。此外,我們通過在原始權(quán)重上添加兩個(gè)較小矩陣的乘積來避免觸及這些層的參數(shù)。這些小矩陣的權(quán)重會(huì)在微調(diào)過程中更新,然后保存到磁盤中。這意味著所有模型的原始參數(shù)都被保留下來,使用者可以用自適應(yīng)方法在其上加載 LoRA 權(quán)重。
LoRA(Low-Rank Adaptation,低秩自適應(yīng))的名稱來源于上文提到的小矩陣。有關(guān)該方法的更多信息,可以參閱下方博客或原論文。
- 相關(guān)博客鏈接:https://huggingface.co/blog/lora
- 論文鏈接 https://arxiv.org/abs/2106.09685
下圖顯示了兩個(gè)較小的橙色矩陣,它們被保存為 LoRA 適配器的一部分。接下來,我們可以加載 LoRA 適配器,并將其與藍(lán)色基礎(chǔ)模型合并,得到黃色微調(diào)模型。最重要的是,我們還可以卸載適配器,這樣就可以在任何時(shí)候返回到原始基礎(chǔ)模型。
換句話說,LoRA 適配器就像是基礎(chǔ)模型的附加組件,可以按需添加和卸載。由于 A 級(jí)和 B 級(jí)較小,與模型尺寸相比,它非常輕便。因此,加載速度要比加載整個(gè)基礎(chǔ)模型快得多。
例如,被廣泛用作許多 LoRA 適配器基礎(chǔ)模型的 Stable Diffusion XL Base 1.0 模型 repo,我們會(huì)發(fā)現(xiàn)它的大小約為 7 GB。然而,像這樣的典型 LoRA 適配器僅占用 24 MB 空間。
在 Hub 上,藍(lán)色基本模型的數(shù)量遠(yuǎn)遠(yuǎn)少于黃色模型。如果能從藍(lán)色快速切換到黃色,反之亦然,那么我們就有辦法為許多不同的黃色模型提供服務(wù),并且只需少數(shù)不同的藍(lán)色部署。
LoRA 的優(yōu)勢(shì)
Hub 上擁有約 2500 個(gè)不同的公共 LoRA,其中絕大多數(shù)(約 92%)基于 Stable Diffusion XL Base 1.0 模型。
在這種共享機(jī)制之前,要為所有這些模型(例如上文圖中所有黃色合并矩陣)部署專用服務(wù),并至少占用一個(gè)新的 GPU。啟動(dòng)服務(wù)并準(zhǔn)備好為特定模型的請(qǐng)求提供服務(wù)的時(shí)間約為 25 秒,此外還有推理時(shí)間,在 A10G 上以 25 個(gè)推理步驟進(jìn)行 1024x1024 SDXL 推理擴(kuò)散的時(shí)間約為 10 秒。如果一個(gè)適配器只是偶爾被請(qǐng)求,它的服務(wù)就會(huì)被停止,以釋放被其他適配器搶占的資源。
如果你請(qǐng)求的 LoRA 不那么受歡迎,即使它是基于 SDXL 模型的,就像迄今為止在 Hub 上發(fā)現(xiàn)的絕大多數(shù)適配器一樣,也需要 35 秒來預(yù)熱并在第一次請(qǐng)求時(shí)獲得響應(yīng)。
不過,以上已成為過去時(shí),現(xiàn)在請(qǐng)求時(shí)間從 35 秒縮短到 13 秒,因?yàn)檫m配器將只使用幾個(gè)不同的「藍(lán)色」基礎(chǔ)模型(如 Diffusion 的兩個(gè)重要模型)。即使你的適配器不那么火熱,其「藍(lán)色」服務(wù)也很有可能已經(jīng)預(yù)熱。換句話說,即使你不經(jīng)常請(qǐng)求你的模型,也很有可能避免了 25 秒的預(yù)熱時(shí)間。藍(lán)色模型已經(jīng)下載并準(zhǔn)備就緒,我們要做的就是卸載之前的適配器并加載新的適配器,只需要 3 秒鐘。
總的來說,盡管我們已經(jīng)有辦法在各個(gè)部署之間共享 GPU 以充分利用它們的計(jì)算能力,但相比之下仍然需要更少的 GPU 來支持所有不同的模型。在 2 分鐘內(nèi),大約有 10 個(gè)不同的 LoRA 權(quán)重被請(qǐng)求。我們只需使用 1 到 2 個(gè) GPU(如果有請(qǐng)求突發(fā),可能會(huì)更多)就能為所有這些模型提供服務(wù),而無需啟動(dòng) 10 個(gè)部署并讓它們保持運(yùn)行。
實(shí)現(xiàn)
我們?cè)谕评?API 中實(shí)現(xiàn)了 LoRA 共享。當(dāng)在平臺(tái)上對(duì)一個(gè)模型發(fā)起請(qǐng)求時(shí),我們首先判斷這是否是一個(gè) LoRA,然后確定 LoRA 的基礎(chǔ)模型,并將請(qǐng)求路由到一個(gè)能夠服務(wù)該模型的共同的后端服務(wù)器群。
推理請(qǐng)求通過保持基礎(chǔ)模型運(yùn)行狀態(tài),并即時(shí)加載 / 卸載 LoRA 來服務(wù)。這樣,你就可以重復(fù)使用相同的計(jì)算資源來同時(shí)服務(wù)多個(gè)不同的模型。
LoRA 的結(jié)構(gòu)
在 Hub 中,LoRA 可通過兩個(gè)屬性來識(shí)別:
LoRA 會(huì)有一個(gè) base_model 屬性,這是 LoRA 建立的基礎(chǔ)模型,用于執(zhí)行推理過程中使用。由于不僅 LoRA 擁有這樣的屬性(任何復(fù)制的模型都會(huì)有一個(gè)),所以它還需要一個(gè) lora 標(biāo)簽來正確識(shí)別。
數(shù)據(jù)展示
每次推理多花 2 到 4 秒鐘,我們就能為很多不同的 LoRA 提供服務(wù)。不過在 A10G GPU 上,推理時(shí)間大大縮短,而適配器加載時(shí)間變化不大,因此 LoRA 的加載 / 卸載成本相對(duì)更高。
所有數(shù)字的單位為秒。
批處理如何?
最近有一篇非常有趣的論文,介紹了如何通過在 LoRA 模型上執(zhí)行批量推理來提高吞吐量。簡而言之,所有推理請(qǐng)求都將被批量收集,與通用基礎(chǔ)模型相關(guān)的計(jì)算將一次性完成,然后再計(jì)算剩余的特定適配器產(chǎn)品。
論文鏈接 https://arxiv.org/pdf/2311.03285.pdf
我們沒有采用這種技術(shù)。相反,我們堅(jiān)持單個(gè)順序推理請(qǐng)求。因?yàn)槲覀冇^察到對(duì)于擴(kuò)散器來說,吞吐量不會(huì)隨著批處理規(guī)模的增加而顯著提高。在我們執(zhí)行的簡單圖像生成基準(zhǔn)測試中,當(dāng)批量大小為 8 時(shí),吞吐量只增加了 25%,而延遲卻增加了 6 倍。
關(guān)于加載 / 卸載 LoRA 的內(nèi)容,請(qǐng)閱讀博客原文。