您的位置:首頁 > 軟件教程 > 教程 > TGI 多-LoRA: 部署一次,搞定 30 個(gè)模型的推理服務(wù)

TGI 多-LoRA: 部署一次,搞定 30 個(gè)模型的推理服務(wù)

來源:好特整理 | 時(shí)間:2024-08-13 10:15:55 | 閱讀:86 |  標(biāo)簽: a T TG LOR 搞定 服務(wù)   | 分享到:

你是否已厭倦管理多個(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è)有潛力的答案。

動(dòng)機(jī)

對(duì)組織而言,基于微調(diào)構(gòu)建多個(gè)模型是有意義的,原因有多重:

  • 性能 - 有 足夠證據(jù) 表明: 在目標(biāo)任務(wù)上,較小的專用模型表現(xiàn)優(yōu)于較大的通用模型。Predibase 的結(jié)果 [5] 表明,針對(duì)特定任務(wù)對(duì) mistralai/Mistral-7B-v0.1 基礎(chǔ)模型進(jìn)行 LoRA 微調(diào)可以獲得比 GPT-4 更好的性能。
  • 適應(yīng)性 - Mistral 或 Llama 等模型的用途極其廣泛,你可以選擇其中之一作為基礎(chǔ)模型,然后針對(duì) 各種下游任務(wù) 微調(diào)出各種專用模型。還有一個(gè)好處是,你不會(huì)被某個(gè)模型鎖定,因?yàn)槟憧梢暂p松換掉該基礎(chǔ)模型,然后用你的數(shù)據(jù)對(duì)另一個(gè)基礎(chǔ)模型進(jìn)行微調(diào) (稍后會(huì)詳細(xì)介紹)。
  • 獨(dú)立性 - 對(duì)不同任務(wù),不同的團(tuán)隊(duì)可以獨(dú)立進(jìn)行不同的微調(diào),從而在數(shù)據(jù)準(zhǔn)備、配置、評(píng)估標(biāo)準(zhǔn)和模型更新節(jié)奏方面保持獨(dú)立和并行。
  • 隱私 - 專用模型提供了很大的靈活性,使得我們可以根據(jù)隱私要求對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行隔離,不需要將所有數(shù)據(jù)都暴露成基礎(chǔ)模型的訓(xùn)練數(shù)據(jù)。此外,由于模型的本地運(yùn)行愈顯重要,微調(diào)使得在本地設(shè)備上運(yùn)行的小模型有能力執(zhí)行特定任務(wù)。

總之,微調(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 背景知識(shí)

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ù)集 上效果更好。

TGI 多-LoRA: 部署一次,搞定 30 個(gè)模型的推理服務(wù)
圖 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 推理服務(wù)

了解了 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ī)制。

TGI 多-LoRA: 部署一次,搞定 30 個(gè)模型的推理服務(wù)
圖 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è)模型。

如何使用

收集 LoRA 權(quán)重

首先,你需要訓(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)。

低代碼團(tuán)隊(duì)

對(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 適配器:

  • predibase/customer_support ,其是在 Gridspace-Stanford Harper Valley 語音數(shù)據(jù)集 上微調(diào)而得,增強(qiáng)了準(zhǔn)確理解和響應(yīng)交互性客服工單的能力,改善了模型在語音識(shí)別、情緒檢測(cè)和對(duì)話管理等任務(wù)中的表現(xiàn),有助于促成更高效、更富同理心的客戶支持。
  • predibase/magicoder ,其是在 ise-uiuc/Magicoder-OSS-Instruct-75K 上微調(diào)而得,這是一個(gè)合成的代碼指令數(shù)據(jù)集。

TGI

TGI 文檔 中已有很多關(guān)于如何部署 TGI 的有用信息。這里,我們僅提醒一些要點(diǎn):

  1. 使用 v2.1.1 或更新版本的 TGI
  2. 部署基礎(chǔ)模型: mistralai/Mistral-7B-v0.1
  3. 在部署期間,添加 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

推理終端 GUI

推理終端 支持多種 GPU 或其他 AI 加速卡 ,只需點(diǎn)擊幾下即可跨 AWS、GCP 以及 Azure 部署!使用 GUI 部署相當(dāng)容易。其后端默認(rèn)使用 TGI 進(jìn)行文本生成 (你也可以 選擇 使用自己的 docker 鏡像)。

要在推理終端上使用多-LoRA 服務(wù),你只需跳轉(zhuǎn)至 控制臺(tái) ,然后:

  1. 選擇基礎(chǔ)模型: mistralai/Mistral-7B-v0.1
  2. 選擇 | 地區(qū) | 硬件
  • 例如: AWS | us-east-1 | Nvidia L4
  1. 選擇高級(jí)配置
  • 你應(yīng)該看到已經(jīng)選擇了 文本生成
  • 可根據(jù)自己的需求進(jìn)行配置
  1. 在環(huán)境變量中添加 LORA_ADAPTERS=predibase/customer_support,predibase/magicoder
  2. 最后 創(chuàng)建端點(diǎn) !

請(qǐng)注意,以上只是最少配置,你可以根據(jù)需要對(duì)其他設(shè)置進(jìn)行配置。

TGI 多-LoRA: 部署一次,搞定 30 個(gè)模型的推理服務(wù)
圖 3:多-LoRA 推理終端
TGI 多-LoRA: 部署一次,搞定 30 個(gè)模型的推理服務(wù)
圖 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',
)

實(shí)際考量

成本

正如 下文 所討論的,我們并不是第一個(gè)吃螃蟹的。請(qǐng)務(wù)必閱讀一下 LoRAX 背后的團(tuán)隊(duì) Predibase 發(fā)表的這篇出色 博文 ,因?yàn)楸竟?jié)內(nèi)容主要基于他們的工作。

TGI 多-LoRA: 部署一次,搞定 30 個(gè)模型的推理服務(wù)
圖 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ì)隨之線性增加。

使用模式

TGI 多-LoRA: 部署一次,搞定 30 個(gè)模型的推理服務(wù)
圖 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ò)展!

換一個(gè)基礎(chǔ)模型

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)也很少。基本做法如下:

  • 保留模型訓(xùn)練的 notebook / 代碼
  • 對(duì)數(shù)據(jù)集進(jìn)行版本控制
  • 記錄下所使用的每個(gè)配置
  • 用新模型、新配置更新服務(wù)

總結(jié)

多-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ù)方面所做的出色及開放的工作。

參考文獻(xiàn)

  • [1] : Dan Biderman, Jose Gonzalez Ortiz, Jacob Portes, Mansheej Paul, Philip Greengard, Connor Jennings, Daniel King, Sam Havens, Vitaliy Chiley, Jonathan Frankle, Cody Blakeney, John P. Cunningham, LoRA Learns Less and Forgets Less , 2024
  • [2] : Edward J. Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, Weizhu Chen, LoRA: Low-Rank Adaptation of Large Language Models , 2021
  • [3] : Sourab Mangrulkar, Sayak Paul, PEFT: Parameter-Efficient Fine-Tuning of Billion-Scale Models on Low-Resource Hardware , 2023
  • [4] : Travis Addair, Geoffrey Angus, Magdy Saleh, Wael Abid, LoRAX: The Open Source Framework for Serving 100s of Fine-Tuned LLMs in Production , 2023
  • [5] : Timothy Wang, Justin Zhao, Will Van Eaton, LoRA Land: Fine-Tuned Open-Source LLMs that Outperform GPT-4 , 2024
  • [6] : Punica: Serving multiple LoRA finetuned LLM as one: https://github.com/punica-ai/punica

英文原文: 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)練推理。

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

a 1.0
a 1.0
類型:休閑益智  運(yùn)營狀態(tài):正式運(yùn)營  語言:中文   

游戲攻略

游戲禮包

游戲視頻

游戲下載

游戲活動(dòng)

《alittletotheleft》官網(wǎng)正版是一款備受歡迎的休閑益智整理游戲。玩家的任務(wù)是對(duì)日常生活中的各種雜亂物

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(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)