你是否已厭倦管理多個(gè) AI 模型所帶來的復(fù)雜性和高成本? 那么, 如果你可以部署一次就搞定 30 個(gè)模型推理服務(wù)會(huì)如何? 在當(dāng)今的 ML 世界中,哪些希望充分發(fā)揮其數(shù)據(jù)的價(jià)值的組織可能最終會(huì)進(jìn)入一個(gè)“微調(diào)的世界”。在這個(gè)世界,各個(gè)組織會(huì)構(gòu)建大量模型,其中每個(gè)模型都針對(duì)特定任務(wù)進(jìn)行了高度特化。但是,如
你是否已厭倦管理多個(gè) AI 模型所帶來的復(fù)雜性和高成本? 那么, 如果你可以部署一次就搞定 30 個(gè)模型推理服務(wù)會(huì)如何? 在當(dāng)今的 ML 世界中,哪些希望充分發(fā)揮其數(shù)據(jù)的價(jià)值的組織可能最終會(huì)進(jìn)入一個(gè)“微調(diào)的世界”。在這個(gè)世界,各個(gè)組織會(huì)構(gòu)建大量模型,其中每個(gè)模型都針對(duì)特定任務(wù)進(jìn)行了高度特化。但是,如何處理為每個(gè)細(xì)分應(yīng)用部署模型所帶來的麻煩和成本呢?多-LoRA 服務(wù)提供了一個(gè)有潛力的答案。
對(duì)組織而言,基于微調(diào)構(gòu)建多個(gè)模型是有意義的,原因有多重:
總之,微調(diào)使組織能夠釋放其數(shù)據(jù)的價(jià)值,當(dāng)它們使用其獨(dú)有的、高度專業(yè)化的數(shù)據(jù)時(shí),這種優(yōu)勢(shì)變得尤為重要,甚至足以改變游戲規(guī)則。
看上去前景光明,有啥問題嗎?有的!部署大語言模型 (LLM) 服務(wù)提出了多方面的挑戰(zhàn)。部署單個(gè)模型的成本和操作復(fù)雜性已經(jīng)夠讓人頭疼了,更不用說 n 個(gè)模型了。這意味著,雖然微調(diào)有萬般好,但是它讓 LLM 的部署和服務(wù)變得更復(fù)雜了也是鐵的事實(shí)。
如何解決“既要又要”的問題,及時(shí)雨就應(yīng)時(shí)而現(xiàn)了。TGI 最近推出了新功能 - 多-LoRA 服務(wù) (???)。
LoRA 即 低階適配 ,是一種對(duì)預(yù)訓(xùn)練大模型進(jìn)行高效微調(diào)的技術(shù)。其核心思想是無需重新訓(xùn)練整個(gè)模型,僅需訓(xùn)練一小部分稱為適配器的參數(shù),就可使預(yù)訓(xùn)練大模型適應(yīng)特定任務(wù)。這些適配器的大小與預(yù)訓(xùn)練 LLM 相比,通常僅增加約 1% 的存儲(chǔ)和內(nèi)存開銷,就能達(dá)到與全模型微調(diào)的模型相當(dāng)?shù)男Ч?
LoRA 的明顯好處是,它通過減少內(nèi)存需求來降低微調(diào)成本。它還可以 緩解災(zāi)難性遺忘 ,且在 小數(shù)據(jù)集 上效果更好。
圖 1:LoRA 詳解 |
在訓(xùn)練過程中,LoRA 會(huì)凍結(jié)原模型權(quán)重
W
,并對(duì)兩個(gè)小矩陣
A
和
B
進(jìn)行微調(diào),這使得微調(diào)更加高效。知道這一點(diǎn)后,你就能比較容易理解圖 1 中 LoRA 模型推理的工作原理了。我們從預(yù)訓(xùn)練模型
Wx
中獲取輸出,并將其與低階適配項(xiàng)
BAx
相加
[6]
。
了解了 LoRA 的低階適配的基本思想后,我們可以深入研究一下多-LoRA 服務(wù)了。這個(gè)概念很簡單: 給定一個(gè)基礎(chǔ)預(yù)訓(xùn)練模型和一些任務(wù),你可以針對(duì)這些任務(wù)微調(diào)特定的 LoRA,多-LoRA 服務(wù)是一種根據(jù)傳入請(qǐng)求動(dòng)態(tài)選擇所需 LoRA 的機(jī)制。
圖 2:多-LORA 詳解 |
圖 2
展示了這種動(dòng)態(tài)路由的工作原理。每個(gè)用戶請(qǐng)求都包含輸入
x
以及該請(qǐng)求對(duì)應(yīng) LoRA 的 id (我們稱為同批異構(gòu)用戶請(qǐng)求)。LoRA id 信息使得 TGI 得以憑此選擇正確的 LoRA 適配器。
多-LoRA 服務(wù)讓我們僅需部署一個(gè)基礎(chǔ)模型。而且由于 LoRA 適配器很小,所以你可以加載多個(gè)適配器,而不用擔(dān)心內(nèi)存問題。請(qǐng)注意,具體能加載多少個(gè)適配器取決于你的可用 GPU 資源以及你部署的模型。最終效果實(shí)際上相當(dāng)于在一次部署中支持了多個(gè)經(jīng)過微調(diào)的模型。
LoRA 權(quán)重的大小依秩和量化方法的不同而不同,但它們通常都非常小。這邊給大家一個(gè)直觀印象: predibase/magicoder 為 13.6MB,不到 mistralai/Mistral-7B-v0.1 尺寸 (14.48GB) 的 1/1000。相對(duì)而言,將 30 個(gè)適配器加載到 RAM 中只會(huì)讓 VRAM 增加 3%,這對(duì)于大多數(shù)部署來說都不成問題。因此,我們可以一次部署多個(gè)模型。
首先,你需要訓(xùn)練 LoRA 模型并導(dǎo)出適配器權(quán)重。你可以在此處找到 LoRA 微調(diào)相關(guān)的 指南 。請(qǐng)注意,當(dāng)你將微調(diào)后的模型推送到 Hub 時(shí),只需推送適配器,無需推送完整的合并模型。從 Hub 加載 LoRA 適配器時(shí),會(huì)從適配器模型卡推斷出基礎(chǔ)模型并將其單獨(dú)加載。如需更深入的支持,可以試試我們的 專家支持計(jì)劃 。當(dāng)你為特定用例創(chuàng)建自己的 LoRA 時(shí),真正的價(jià)值才會(huì)顯現(xiàn)。
對(duì)某些組織而言,為自己的用例訓(xùn)練一個(gè) LoRA 可能比較困難,因?yàn)樗鼈兛赡苋狈ο鄳?yīng)的專業(yè)知識(shí)或其他資源。即使選好了基礎(chǔ)模型并準(zhǔn)備好了數(shù)據(jù),后面還需要跟上最新技術(shù),探索超參空間,找到最佳硬件資源,編寫代碼,然后進(jìn)行評(píng)估。這項(xiàng)任務(wù),即使對(duì)于經(jīng)驗(yàn)豐富的團(tuán)隊(duì)來說,也不可謂不艱巨。
AutoTrain 可幫助顯著降低這一門檻。AutoTrain 是一種無代碼解決方案,只需單擊幾下鼠標(biāo)即可訓(xùn)練機(jī)器學(xué)習(xí)模型。我們提供了多種使用 AutoTrain 的方法。除了 本地安裝 外,我們還支持:
AutoTrain 環(huán)境 | 硬件配置 | 編碼量 | 備注 |
---|---|---|---|
Hugging Face Space | 多種 GPU 及其它硬件 | 無代碼 | 靈活易用 |
DGX 云 | 最高 8xH100 GPU | 無代碼 | 更適宜大模型 |
Google Colab | 單張 T4 GPU | 低代碼 | 適宜小模型以及量化后的模型 |
本文以 Predibase 的 LoRA Land 為例,主要使用如下兩個(gè) LoRA 適配器:
TGI 文檔 中已有很多關(guān)于如何部署 TGI 的有用信息。這里,我們僅提醒一些要點(diǎn):
v2.1.1
或更新版本的 TGI
mistralai/Mistral-7B-v0.1
LORA_ADAPTERS
環(huán)境變量
LORA_ADAPTERS=predibase/customer_support,predibase/magicoder
model=mistralai/Mistral-7B-v0.1
# share a volume with the Docker container to avoid downloading weights every run
volume=$PWD/data
docker run --gpus all --shm-size 1g -p 8080:80 -v $volume:/data \
ghcr.io/huggingface/text-generation-inference:2.1.1 \
--model-id $model \
--lora-adapters=predibase/customer_support,predibase/magicoder
推理終端 支持多種 GPU 或其他 AI 加速卡 ,只需點(diǎn)擊幾下即可跨 AWS、GCP 以及 Azure 部署!使用 GUI 部署相當(dāng)容易。其后端默認(rèn)使用 TGI 進(jìn)行文本生成 (你也可以 選擇 使用自己的 docker 鏡像)。
要在推理終端上使用多-LoRA 服務(wù),你只需跳轉(zhuǎn)至 控制臺(tái) ,然后:
mistralai/Mistral-7B-v0.1
云
|
地區(qū)
|
硬件
AWS
|
us-east-1
|
Nvidia L4
文本生成
LORA_ADAPTERS=predibase/customer_support,predibase/magicoder
創(chuàng)建端點(diǎn)
!
請(qǐng)注意,以上只是最少配置,你可以根據(jù)需要對(duì)其他設(shè)置進(jìn)行配置。
圖 3:多-LoRA 推理終端 |
圖 4:多-LoRA 推理終端 2 |
有些人可能有點(diǎn) 怕老鼠 ,因此不想使用鼠標(biāo),我們對(duì)此不做評(píng)判 [?]。此時(shí),僅用鍵盤也可通過代碼自動(dòng)執(zhí)行上述操作,非常簡單。
from huggingface_hub import create_inference_endpoint
# Custom Docker image details
custom_image = {
"health_route": "/health",
"url": "ghcr.io/huggingface/text-generation-inference:2.1.1", # This is the min version
"env": {
"LORA_ADAPTERS": "predibase/customer_support,predibase/magicoder", # Add adapters here
"MAX_BATCH_PREFILL_TOKENS": "2048", # Set according to your needs
"MAX_INPUT_LENGTH": "1024", # Set according to your needs
"MAX_TOTAL_TOKENS": "1512", # Set according to your needs
"MODEL_ID": "/repository"
}
}
# Creating the inference endpoint
endpoint = create_inference_endpoint(
name="mistral-7b-multi-lora",
repository="mistralai/Mistral-7B-v0.1",
framework="pytorch",
accelerator="gpu",
instance_size="x1",
instance_type="nvidia-l4",
region="us-east-1",
vendor="aws",
min_replica=1,
max_replica=1,
task="text-generation",
custom_image=custom_image,
)
endpoint.wait()
print("Your model is ready to use!")
部署此配置大約需要 3 分 40 秒。請(qǐng)注意,其他模型可能需要更長的時(shí)間。如果你遇到加載時(shí)長的問題,請(qǐng)?jiān)?GitHub 上提交 問題 !
當(dāng)使用推理終端時(shí),你需要指定
adapter_id
。下面給出了一個(gè) cURL 示例:
curl 127.0.0.1:3000/generate \
-X POST \
-H 'Content-Type: application/json' \
-d '{
"inputs": "Hello who are you?",
"parameters": {
"max_new_tokens": 40,
"adapter_id": "predibase/customer_support"
}
}'
這里還有一個(gè)使用
InferenceClient
的示例,該示例來自
Hugging Face Hub Python 庫
。請(qǐng)確保你用的是
huggingface-hub>=0.24.0
,在必要情況下,你還需
登錄
hub。
from huggingface_hub import InferenceClient
tgi_deployment = "127.0.0.1:3000"
client = InferenceClient(tgi_deployment)
response = client.text_generation(
prompt="Hello who are you?",
max_new_tokens=40,
adapter_id='predibase/customer_support',
)
正如 下文 所討論的,我們并不是第一個(gè)吃螃蟹的。請(qǐng)務(wù)必閱讀一下 LoRAX 背后的團(tuán)隊(duì) Predibase 發(fā)表的這篇出色 博文 ,因?yàn)楸竟?jié)內(nèi)容主要基于他們的工作。
圖 5:多-LoRA 成本 我們用 TGI 在英偉達(dá) L4 上部署了 mistralai/Mistral-7B-v0.1 基礎(chǔ)模型,其 推理終端 成本 為 0.8 美元/小時(shí)。每秒可完成 75 個(gè)請(qǐng)求,平均每個(gè)請(qǐng)求有 450 個(gè)輸入詞元、234 個(gè)輸出詞元,并與相應(yīng)配置的 GPT3.5 Turbo 成本進(jìn)行了對(duì)比。 |
多-LoRA 服務(wù)的一大好處是, 無需為多個(gè)模型進(jìn)行多次部署 ,因此要便宜得多。這與直覺相符,因?yàn)槎嗄P筒渴鹨虞d所有權(quán)重,而不僅僅是小小的適配器。如圖 5 所示,當(dāng)使用 TGI 多-LoRA 時(shí),即使添加更多模型,每個(gè)詞元的成本也是相同的。但如果不使用多-LoRA,每多部署一個(gè)微調(diào)模型,TGI 的成本就會(huì)隨之線性增加。
圖 6:多-LoRA 服務(wù)模式 |
當(dāng)部署多個(gè)模型時(shí),一個(gè)現(xiàn)實(shí)的挑戰(zhàn)是每個(gè)模型的使用模式有很大差異: 某些模型的使用率可能較低; 有些模型的使用模式可能是陣發(fā)的,有些可能是高頻的。這使得擴(kuò)展變得非常困難,尤其是當(dāng)每個(gè)模型相互獨(dú)立部署的時(shí)候。當(dāng)你必須加一個(gè) GPU 時(shí),會(huì)出現(xiàn)很多“舍入”誤差,而且這種誤差會(huì)快速累積,最終導(dǎo)致巨大的浪費(fèi)。在理想情況下,你需要最大限度地提高每個(gè) GPU 的利用率,盡量不使用任何額外資源。你需要確保有足夠的 GPU,同時(shí)深知有些 GPU 會(huì)閑置,太難了!
當(dāng)使用多-LoRA 方案時(shí),情況就平穩(wěn)多了。如圖 6,我們可以看到多-LoRA 服務(wù)模式非常平穩(wěn),盡管其中某些 LoRA 自身的使用模式并不穩(wěn)定。通過整合多個(gè) LoRA,整體使用模式會(huì)更平穩(wěn),且擴(kuò)展會(huì)更容易。請(qǐng)注意,以上僅提供了一個(gè)例子,你自己的工作負(fù)載的使用模式如何以及多-LoRA 如何能幫上忙,需要你自己認(rèn)真分析。我們的目標(biāo)是,僅需考慮 1 個(gè)模型的擴(kuò)展,而無需考慮 30 個(gè)模型的擴(kuò)展!
AI 發(fā)展日新月異,現(xiàn)實(shí)世界應(yīng)當(dāng)如何應(yīng)對(duì)?如果你想選擇另一個(gè)或更新的模型作為基礎(chǔ)模型,應(yīng)該怎么辦?雖然我們的例子使用了 mistralai/Mistral-7B-v0.1 作為基礎(chǔ)模型,但其實(shí)還可以選擇別的,如 Mistral v0.3 支持 函數(shù)調(diào)用 ; 更別提還有其他系列的模型了,如 Llama 3?偟膩碚f,我們樂見更高效、性能更好的新基礎(chǔ)模型不斷出現(xiàn)。
但不用擔(dān)心!只要你有 足夠的理由 更換基礎(chǔ)模型,重新訓(xùn)練 LoRA 相對(duì)比較容易,訓(xùn)練也相對(duì)比較便宜,事實(shí)上, Predibase 發(fā)現(xiàn) 訓(xùn)練一個(gè) LoRA 僅需約 8.00 美元。使用現(xiàn)代框架和常用工程實(shí)踐,需要的代碼改動(dòng)也很少。基本做法如下:
多-LoRA 服務(wù)是 AI 模型部署的革命性方案,為解決和管理多個(gè)專用模型部署的成本和復(fù)雜性問題提供了解決方案。通過利用單一基礎(chǔ)模型并動(dòng)態(tài)應(yīng)用微調(diào)適配器,可以顯著降低組織的運(yùn)營開銷,同時(shí)保持甚至增強(qiáng)各任務(wù)的性能。 我們呼吁 AI 總監(jiān)們大膽采納該“基礎(chǔ)模型 + 多-LoRA” 應(yīng)用范式 ,從而擁抱由其帶來的簡單性和成本節(jié)約紅利。讓多-LoRA 成為你 AI 戰(zhàn)略的基石,確保你的組織在快速發(fā)展的技術(shù)領(lǐng)域始終保持領(lǐng)先地位。
實(shí)現(xiàn)多-LoRA 服務(wù)可能非常棘手,但是由于 punica-ai 和 lorax 團(tuán)隊(duì)開發(fā)了優(yōu)化的算子和框架,該過程已經(jīng)很高效了。TGI 利用這些優(yōu)化來為多個(gè) LoRA 模型提供快速高效的推理。
特別感謝 Punica、LoRAX 和 S-LoRA 團(tuán)隊(duì)在多-LoRA 服務(wù)方面所做的出色及開放的工作。
英文原文: https://hf.co/blog/multi-lora-serving
原文作者: Derek Thomas,Diego Maniloff,David Holtz
譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向?yàn)?transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理。
golang slice相關(guān)常見的性能優(yōu)化手段
閱讀連接Elasticsearch服務(wù)器的Python代碼示例
閱讀國產(chǎn)操作系統(tǒng)上實(shí)現(xiàn)RTMP推流攝像頭視頻和麥克風(fēng)聲音到流媒體服務(wù)器
閱讀使用Python讀取和導(dǎo)出NetCDF格式的多時(shí)相柵格文件
閱讀多租戶系統(tǒng)數(shù)據(jù)權(quán)限設(shè)計(jì)與RuoYi系統(tǒng)的借鑒
閱讀count(*)、count(1)哪個(gè)更快?面試必問:通宵整理的十道經(jīng)典MySQL必問面試題
閱讀從需求分析、產(chǎn)品設(shè)計(jì)到部署交付各階段說明
閱讀如何利用七牛云進(jìn)行數(shù)據(jù)備份和刪除
閱讀強(qiáng)化學(xué)習(xí)筆記之【ACE:Off-PolicyActor-CriticwithCausality-AwareEntropyRegularization】
閱讀使用MailKit在.NET Core中收發(fā)郵件的完整示例
閱讀WiFi基礎(chǔ)(六):天線基礎(chǔ)知識(shí)
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2024 haote.com 好特網(wǎng)