在Workers AI上使用LoRAs運行微調(diào)模型

來源:Cloudflare
作者:Cloudflare
時間:2024-06-11
3281
我們隆重宣布:您現(xiàn)在可在Workers AI上使用LoRA運行微調(diào)推理。該功能現(xiàn)已開啟公測,針對預(yù)訓(xùn)練的LoRA適配器,與Mistral、Gemma或Llama 2一起使用,但有一些限制。請瀏覽我們本周的首篇文章,了解BYO LoRA功能的概述。

27A8F350-6569-40B8-A0E4-631C26041E37.png

LoRA微調(diào)LLM推理功能開啟公測

我們隆重宣布:您現(xiàn)在可在Workers AI上使用LoRA運行微調(diào)推理。該功能現(xiàn)已開啟公測,針對預(yù)訓(xùn)練的LoRA適配器,與Mistral、Gemma或Llama 2一起使用,但有一些限制。請瀏覽我們本周的首篇文章,了解BYO LoRA功能的概述。

本文將深入探討什么是微調(diào)和LoRA,并向您展示如何在我們的Workers AI平臺上使用它,以及我們?nèi)绾卧谄脚_上實施這一功能的技術(shù)細(xì)節(jié)。

什么是微調(diào)?

微調(diào)(fine-tuning)是一個通用術(shù)語,指通過使用更多數(shù)據(jù)繼續(xù)訓(xùn)練來修改AI模型。微調(diào)的目的是提高生成的模型與數(shù)據(jù)集相似的概率。從頭開始訓(xùn)練一個模型對于許多用例來說并不現(xiàn)實,因為訓(xùn)練模型既昂貴又耗時。通過對現(xiàn)有的預(yù)訓(xùn)練模型進(jìn)行微調(diào),您可以從其能力中獲益,同時還能完成您想要完成的任務(wù)。低秩適應(yīng)(Low-Rank Adaptation,LoRA)是一種特定的微調(diào)方法,可應(yīng)用于各種模型架構(gòu),而不僅僅是LLM。在傳統(tǒng)的微調(diào)方法中,通常會直接修改預(yù)訓(xùn)練模型的權(quán)重或?qū)⑵渑c額外的微調(diào)權(quán)重融合在一起。而LoRA允許微調(diào)權(quán)重和預(yù)訓(xùn)練模型保持分離,預(yù)訓(xùn)練模型保持不變。最終結(jié)果是,您可以訓(xùn)練模型,使其在特定任務(wù)上更加準(zhǔn)確,例如生成代碼、具有特定個性或生成特定風(fēng)格的圖像。您甚至可以對現(xiàn)有的LLM進(jìn)行微調(diào),以了解有關(guān)特定主題的更多信息。

保持原始基礎(chǔ)模型權(quán)重的方法意味著你可以用相對較少的計算量創(chuàng)建新的微調(diào)權(quán)重。您可以利用現(xiàn)有的基礎(chǔ)模型(如Llama、Mistral和Gemma),并根據(jù)自己的需要對其進(jìn)行調(diào)整。

微調(diào)如何運作?

為了更好地理解微調(diào)以及LoRA為何如此有效,我們必須退一步,了解AI模型的工作原理。AI模型(如LLM)是通過深度學(xué)習(xí)技術(shù)訓(xùn)練出來的神經(jīng)網(wǎng)絡(luò)。在神經(jīng)網(wǎng)絡(luò)中,有一組參數(shù)作為模型領(lǐng)域知識的數(shù)學(xué)表示,由權(quán)重和偏差(簡單而言,就是數(shù)字)組成。這些參數(shù)通常用大型數(shù)字矩陣表示。模型的參數(shù)越多,模型就越大,所以當(dāng)您看到llama-2-7b這樣的模型時,您可以讀出"7b",并知道該模型有70億個參數(shù)。

模型的參數(shù)決定了它的行為。當(dāng)您從頭開始訓(xùn)練一個模型時,這些參數(shù)通常一開始都是隨機(jī)數(shù)。在數(shù)據(jù)集上訓(xùn)練模型時,這些參數(shù)會被一點一點地調(diào)整,直到模型反映出數(shù)據(jù)集并表現(xiàn)出正確的行為。有些參數(shù)會比其他參數(shù)更重要,因此我們會應(yīng)用一個權(quán)重,用它來表示重要性的高低。權(quán)重對模型捕捉訓(xùn)練數(shù)據(jù)中的模式和關(guān)系的能力起著至關(guān)重要的作用。

傳統(tǒng)的微調(diào)會用一組新的權(quán)重來調(diào)整訓(xùn)練模型中的所有參數(shù)。因此,微調(diào)模型需要我們提供與原始模型相同數(shù)量的參數(shù),這意味著訓(xùn)練和運行一個完全微調(diào)模型的推理需要大量時間和計算。此外,新的先進(jìn)模型或現(xiàn)有模型的版本會定期做發(fā)布,這意味著完全微調(diào)模型的訓(xùn)練、維護(hù)和存儲成本會變得很高。

LoRA是一種有效的微調(diào)方法

最簡單地來說,LoRA避免了調(diào)整預(yù)訓(xùn)練模型中的參數(shù),從而允許我們應(yīng)用少量附加參數(shù)。這些附加參數(shù)臨時應(yīng)用于基礎(chǔ)模型,以有效控制模型行為。與傳統(tǒng)的微調(diào)方法相比,訓(xùn)練這些附加參數(shù)(稱為LoRA適配器)所需的時間和計算量要少得多。訓(xùn)練完成后,我們會將LoRA適配器打包成一個單獨的模型文件,然后將其插入基礎(chǔ)模型中進(jìn)行訓(xùn)練。一個完全微調(diào)的模型可能有幾十個千兆字節(jié)大小,而這些適配器通常只有幾兆字節(jié)。這使其更易于分發(fā),使用LoRA提供微調(diào)推理只需在總推理時間上增加毫秒程度的延遲。

如果您想了解LoRA為何如此有效,那么請準(zhǔn)備好——我們首先得簡單學(xué)習(xí)一下線性代數(shù)。如果您從大學(xué)開始就沒有接觸過這個術(shù)語,別擔(dān)心,我們會詳細(xì)解釋。

數(shù)學(xué)原理

在傳統(tǒng)微調(diào)方法中,我們可以對模型的權(quán)重(W0)進(jìn)行調(diào)整,輸出一組新的權(quán)重——因此,原始模型權(quán)重與新權(quán)重之間的差異為ΔW,代表權(quán)重的變化。因此,經(jīng)過微調(diào)的模型將具有一組新的權(quán)重,可以表示為原始模型權(quán)重加上權(quán)重變化,即W0+ΔW。

請記住,所有這些模型權(quán)重實際都是表示為大型數(shù)字矩陣。在數(shù)學(xué)中,每個矩陣都有一個稱為秩(r)的屬性,描述矩陣中線性獨立的列或行的數(shù)量。當(dāng)矩陣為低秩時,它們只有幾列或幾行是“重要”的,因此我們實際上可以將它們分解或拆分成兩個帶有最重要參數(shù)的較小矩陣(就像代數(shù)中的因式分解)。這種技術(shù)被稱為秩分解,它允許我們在保留最重要內(nèi)容的同時,大大減少和簡化矩陣。在微調(diào)的背景下,秩決定了原始模型中有多少多少參數(shù)被改變——秩越高,微調(diào)越強(qiáng),對輸出具備更精細(xì)的控制。

根據(jù)最初的LoRA論文,研究人員發(fā)現(xiàn),當(dāng)一個模型是低秩時,代表權(quán)重變化的矩陣也是低秩的。因此,我們可以對代表權(quán)重變化的矩陣ΔW進(jìn)行秩分解,創(chuàng)建兩個較小的矩陣A、B,其中ΔW=BA?,F(xiàn)在,模型的變化可以用兩個更小的低秩矩陣來表示。因此,這種微調(diào)方法被稱為低階適應(yīng)。

E365B947-6D0F-4658-AE77-8632D18B3669.jpeg

當(dāng)我們運行推理時,我們只需要較小的矩陣A、B來改變模型的行為。A和B中的模型權(quán)重構(gòu)成了我們的LoRA適配器(以及配置文件)。運行時,我們將模型權(quán)重加在一起,將原始模型(W0)和LoRA適配器(A、B)合并起來。加法和減法都是簡單的數(shù)學(xué)運算,這意味著我們可以通過從W0中加減A、B來快速更換不同的LoRA適配器。通過臨時調(diào)整原始模型的權(quán)重,我們可以修改模型的行為和輸出,從而以最小的延遲增加獲得微調(diào)推理。

根據(jù)最初的LoRA論文,“LoRA可以將可訓(xùn)練參數(shù)的數(shù)量減少10000倍,GPU內(nèi)存需求減少3倍”。正因為如此,LoRA是最流行的微調(diào)方法之一,原因是它的計算成本遠(yuǎn)低于完全微調(diào)模型,不會大幅增加推理時間,而且體積小得多,便于攜帶。

如何通過Workers AI使用LoRA?

因為我們運行無服務(wù)器推理的方式,Workers AI非常適合運行LoRA。我們目錄中的模型總是預(yù)先加載在我們的GPU上,這意味著它們保持隨時可用狀態(tài),讓您的請求不會遇到冷啟動延遲。這意味著基礎(chǔ)模型始終可用,我們可以根據(jù)需要動態(tài)加載和切換LoRA適配器。我們實際上可以在一個基礎(chǔ)模型中插入多個LoRA適配器,以便同時服務(wù)多個不同的微調(diào)推理請求。

使用LoRA進(jìn)行微調(diào)時,輸出將是兩個文件:自定義模型權(quán)重(safetensors格式)和適配器配置文件(json格式)。如果要自己創(chuàng)建這些權(quán)重,可以使用Hugging Face PEFT(參數(shù)高效微調(diào))庫結(jié)合Hugging Face AutoTrain LLM庫在自己的數(shù)據(jù)上訓(xùn)練LoRA。您還可以在Auto Train和Google Colab等服務(wù)上運行訓(xùn)練任務(wù)。此外,Hugging Face上還有許多開源LoRA適配器,可滿足各種用例。

最終,我們希望在我們的平臺上支持LoRA訓(xùn)練工作負(fù)載,但目前我們需要您就將訓(xùn)練好的LoRA適配器帶到Workers AI,這就是我們將此功能稱為BYO(自帶)LoRA的原因。

在最初的公開測試版本中,我們允許人們在Mistral、Llama和Gemma使用LoRA。我們?yōu)檫@些模型預(yù)留了可接受LoRA的版本,您可以在模型名稱后添加`-lora`來訪問這些版本。您的適配器必須是根據(jù)我們以下支持的基礎(chǔ)模型之一進(jìn)行微調(diào)的:

@cf/meta-llama/llama-2-7b-chat-hf-lora

@cf/mistral/mistral-7b-instruct-v0.2-lora

@cf/google/gemma-2b-it-lora

@cf/google/gemma-7b-it-lora

隨著我們推出這個功能的公開測試版,有一些限制需要注意:目前還不支持量化的LoRA模型,LoRA適配器必須小于100 MB,最大秩為8,初始公測中每個賬戶可試用最多30個LoRA。要開始在Workers AI上使用LoRA,請閱讀開發(fā)人員文檔。

一如既往,我們希望用戶在使用Workers AI和我們?nèi)峦瞥龅腂YO LoRA功能時,能牢記我們的服務(wù)條款,包括模型許可條款中包含的任何模型特定限制。

我們是如何構(gòu)建多租戶LoRA服務(wù)的?

同時為多個LoRA模型提供服務(wù)對GPU資源利用率提出了挑戰(zhàn)。雖然有可能將推理請求批量發(fā)送到一個基礎(chǔ)模型,但服務(wù)獨特的LoRA適配器帶來的額外復(fù)雜性導(dǎo)致批量處理請求要困難得多。為解決這一問題,我們利用Punica CUDA內(nèi)核設(shè)計與全局緩存優(yōu)化相結(jié)合,以處理多租戶LoRA服務(wù)的內(nèi)存密集型工作負(fù)載,同時提供較低的推理延遲。

論文《Punica:多租戶LoRA服務(wù)》一文中介紹了Punica CUDA內(nèi)核,作為在同一個基礎(chǔ)模型上服務(wù)多個、明顯不同的LoRA模型的方法。與以前的推理技術(shù)相比,這種方法大幅優(yōu)化了吞吐量和延遲。這種優(yōu)化部分是通過啟用請求批處理來實現(xiàn)的,即使在服務(wù)不同LoRA適配器時。

Punica內(nèi)核系統(tǒng)的核心是一個新的CUDA內(nèi)核,名為“分段收集矩陣-矢量乘法(SGMV)”。SGMV允許GPU在服務(wù)不同LoRA模型時,只存儲預(yù)訓(xùn)練模型的一個副本。Punica內(nèi)核設(shè)計系統(tǒng)整合了獨特LoRA模型的批處理請求,通過并行處理一批中不同請求的特征-權(quán)重乘法來提高性能。然后對同一LoRA模型的請求進(jìn)行分組,以提高操作強(qiáng)度。最初,GPU會加載基本模型,同時為KV緩存保留大部分GPU內(nèi)存。當(dāng)收到請求時,LoRA組件(A和B矩陣)會按需從遠(yuǎn)程存儲(Cloudflare緩存或R2)加載。這種按需加載只帶來幾毫秒的延遲,這意味著多個LoRA適配器可以無縫獲取和提供服務(wù),對推理性能的影響微乎其微。頻繁請求的LoRA適配器會被緩存,以實現(xiàn)最快的推理速度。

一旦請求的LoRA被緩存在本地,它可用于推理的速度僅受PCIe帶寬的限制。無論如何,鑒于每個請求都可能需要自己的LoRA,因此異步執(zhí)行LoRA下載和內(nèi)存復(fù)制操作變得至關(guān)重要。Punica調(diào)度器正是解決這一挑戰(zhàn),只對當(dāng)前在GPU內(nèi)存中有所需LoRA權(quán)重的請求進(jìn)行批處理,并將沒有所需權(quán)重的請求排隊,直到所需權(quán)重可用且請求可以有效地加入批處理。

通過有效管理KV緩存和批處理這些請求,可以處理大量多租戶LoRA服務(wù)工作負(fù)載。另一項重要的優(yōu)化措施是使用連續(xù)批處理。常見的批處理方法要求對同一適配器的所有請求在達(dá)到停止條件后才能釋放。連續(xù)批處理允許提前釋放批處理中的一個請求,以便不必等待運行時間最長的請求。

鑒于部署到Cloudflare網(wǎng)絡(luò)的LLM在全球范圍內(nèi)可用,因此LoRA適配器模型也必須在全球范圍內(nèi)可用。很快,我們將在Cloudflare邊緣緩存遠(yuǎn)程模型文件,以進(jìn)一步減少推理延遲。

在Workers AI上運行微調(diào)的路線圖

推出對LoRA適配器的支持是在我們的平臺上實現(xiàn)微調(diào)的重要一步。除了目前可用的LLM微調(diào)功能外,我們還期待支持更多模型和各種任務(wù)類型,包括圖像生成。

我們對Workers AI的愿景是成為開發(fā)人員運行AI工作負(fù)載的最佳場所,這包括對其本身進(jìn)行微調(diào)的過程。最終,我們希望能夠直接在Workers AI上運行微調(diào)訓(xùn)練任務(wù)以及完全微調(diào)模型。這為AI解鎖了許多用例,通過賦予模型更多的顆粒度和細(xì)節(jié)以處理特定的任務(wù),從而使AI在企業(yè)及組織中發(fā)揮更大的作用。

通過AI Gateway,我們就可以幫助開發(fā)人員記錄他們的提示詞和響應(yīng),然后他們就可以利用這些提示詞和響應(yīng)來使用生產(chǎn)數(shù)據(jù)對模型進(jìn)行微調(diào)。我們的愿景是提供一鍵式微調(diào)服務(wù),AI Gateway上的日志數(shù)據(jù)可用于重新訓(xùn)練模型(在Cloudflare上),經(jīng)過微調(diào)的模型可重新部署到Workers AI上進(jìn)行推理。這將使開發(fā)人員能夠個性化他們的AI模型,以適應(yīng)他們的應(yīng)用,允許低至每個用戶級別的粒度。經(jīng)過微調(diào)的模型可體量更小、性能更為優(yōu)化,幫助用戶節(jié)省AI推理的時間和投入成本,而且神奇之處在于,所有這一切都可以在Cloudflare的開發(fā)人員平臺上實現(xiàn)。

立即登錄,閱讀全文
原文鏈接:點擊前往 >
文章來源:Cloudflare
版權(quán)說明:本文內(nèi)容來自于Cloudflare,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家