TGI Multi-LoRA:一次部署,服務30個模型

釋出於2024年7月18日
在 GitHub 上更新

您是否厭倦了管理多個AI模型的複雜性和高昂成本?**如果您能一次部署,服務30個模型呢?**在當今的機器學習世界中,希望利用其資料價值的組織很可能會進入一個“微調世界”,構建大量模型,每個模型都高度專業化以執行特定任務。但是,如何才能跟上為每個用例部署模型的麻煩和成本呢?答案是Multi-LoRA服務。

動機

作為組織,透過微調構建大量模型有多種原因。

  • 效能 -令人信服的證據表明,較小、專業化的模型在它們所訓練的任務上,其效能優於較大、通用型模型。Predibase[5]表明,使用特定任務的LoRA以及像mistralai/Mistral-7B-v0.1這樣的基礎模型,您可以獲得比GPT-4更好的效能。

  • 適應性 - 像Mistral或Llama這樣的模型非常多功能。您可以選擇其中一個作為基礎模型,並構建許多專業化模型,即使下游任務非常不同。另外,請注意,您不會被鎖定,因為您可以輕鬆地更換基礎模型,並使用您的資料在另一個基礎模型上進行微調(稍後會詳細介紹)。

  • 獨立性 - 對於您的組織關心的每項任務,不同的團隊可以進行不同的微調,從而在資料準備、配置、評估標準和模型更新頻率方面實現獨立性。

  • 隱私 - 專業化模型在訓練資料隔離和根據資料隱私要求限制不同使用者訪問方面提供了靈活性。此外,在本地執行模型很重要的情況下,小型模型可以針對特定任務變得非常強大,同時保持其尺寸足夠小以在裝置上執行。

總而言之,微調使組織能夠釋放其資料的價值,當組織使用獨一無二的高度專業化資料時,這種優勢變得尤為重要,甚至改變遊戲規則。

那麼,問題出在哪裡呢?部署和提供大型語言模型(LLMs)在許多方面都具有挑戰性。成本和操作複雜性是部署單個模型,更不用說*n*個模型時的關鍵考慮因素。這意味著,儘管微調有很多優點,但它使LLM的部署和提供變得更加複雜。

這就是為什麼今天我們非常高興地介紹TGI的最新功能——**Multi-LoRA服務**。

LoRA背景

LoRA,即低秩適應(Low-Rank Adaptation),是一種高效微調大型預訓練模型的技術。其核心思想是在不需重新訓練整個模型的情況下,僅透過一小組稱為介面卡的引數來使大型預訓練模型適應特定任務。這些介面卡通常只增加約1%的儲存和記憶體開銷,與完全微調的模型相比,仍能保持其質量。

LoRA的明顯好處是它透過減少記憶體需求,使微調成本大大降低。它還減少了災難性遺忘,並與小型資料集配合得更好。

圖1:LoRA解釋

在訓練期間,LoRA凍結原始權重W並微調兩個小矩陣AB,從而大大提高了微調效率。考慮到這一點,我們可以在圖1中看到LoRA在推理期間是如何工作的。我們從預訓練模型Wx中獲取輸出,然後新增低秩*適應*項BAx[6]

Multi-LoRA服務

現在我們瞭解了LoRA引入的模型適應的基本概念,我們準備深入探討Multi-LoRA服務。這個概念很簡單:給定一個基礎預訓練模型和許多不同的任務,你已經為這些任務微調了特定的LoRA,Multi-LoRA服務是一種根據傳入請求動態選擇所需LoRA的機制。

圖2:Multi-LoRA解釋

圖2展示了這種動態適應是如何工作的。每個使用者請求都包含輸入x以及請求對應的LoRA ID(我們稱之為異構使用者請求批次)。任務資訊允許TGI選擇正確的LoRA介面卡來使用。

Multi-LoRA服務使您只需部署一次基礎模型。由於LoRA介面卡很小,您可以載入許多介面卡。請注意,確切的數量將取決於您可用的GPU資源以及您部署的模型。最終,這相當於在一個部署中擁有多個微調模型。

LoRA(介面卡權重)可以根據秩和量化而變化,但它們通常非常微小。讓我們快速直觀地瞭解這些介面卡有多小:predibase/magicoder是13.6MB,小於mistralai/Mistral-7B-v0.1(14.48GB)的1/1000。相對而言,將30個介面卡載入到RAM中只會使VRAM增加3%。最終,這對大多數部署來說都不是問題。因此,我們可以為許多模型提供一個部署。

如何使用

收集LoRA

首先,您需要訓練您的LoRA模型並匯出介面卡。您可以在此處找到關於微調LoRA介面卡的指南。請注意,當您將微調模型推送到Hub時,您只需推送介面卡,而無需推送完整的合併模型。當從Hub載入LoRA介面卡時,基礎模型會從介面卡模型卡中推斷出來並單獨載入。如需更深入的支援,請檢視我們的專家支援計劃。當您為特定用例建立自己的LoRA時,才會體現出真正的價值。

低程式碼團隊

對於一些組織來說,為每個用例訓練一個LoRA可能很困難,因為他們可能缺乏專業知識或其他資源。即使您選擇了基礎模型並準備好資料,您仍需要跟上最新技術、探索超引數、尋找最佳硬體資源、編寫程式碼,然後進行評估。這可能是一項艱鉅的任務,即使對於經驗豐富的團隊也是如此。

AutoTrain可以顯著降低這一準入門檻。AutoTrain是一個無程式碼解決方案,只需點選幾下即可訓練機器學習模型。AutoTrain有多種使用方式。除了本地/內部部署,我們還有

AutoTrain 環境 硬體詳情 程式碼要求 備註
Hugging Face Space 多種 GPU 和硬體 無需程式碼 靈活且易於分享
DGX 雲 最多 8 個 H100 GPU 無需程式碼 更適合大型模型
Google Colab 可訪問 T4 GPU 低程式碼 適用於小負載和量化模型

部署

在我們的示例中,我們將使用 Predibase 的 LoRA Land 中兩個出色的介面卡。

TGI

關於如何部署TGI,已經有很多很好的資訊。像往常一樣部署,但請確保您:

  1. 使用版本等於或高於v2.1.1的TGI
  2. 部署您的基礎模型:mistralai/Mistral-7B-v0.1
  3. 部署時新增LORA_ADAPTERS環境變數
    • 示例: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

推理端點圖形使用者介面

推理端點允許您通過幾次點選即可在AWS、GCP和Azure上的多種GPU和替代硬體型別上部署任何Hugging Face模型!在GUI中,部署非常簡單。在底層,我們預設使用TGI進行文字生成(儘管您可以選擇使用任何您喜歡的映象)。

要在推理端點上使用Multi-LoRA服務,您只需訪問您的儀表板,然後

  1. 選擇您的基礎模型:mistralai/Mistral-7B-v0.1
  2. 選擇您的 | 區域 | 硬體
    • 我將使用 AWS | us-east-1 | Nvidia L4
  3. 選擇高階配置
    • 您應該看到已選擇 文字生成
    • 您可以根據需要進行配置
  4. 在環境變數中新增 LORA_ADAPTERS=predibase/customer_support,predibase/magicoder
  5. 最後 建立端點

請注意,這是最低要求,但您應該根據需要配置其他設定。

multi-lora-inference-endpoints
圖3:Multi-LoRA推理端點
multi-lora-inference-endpoints
圖4:Multi-LoRA推理端點2

推理端點程式碼

也許你們中有些人有恐鼠症,不想使用滑鼠,我們不予評判。透過程式碼自動化操作,只使用鍵盤即可輕鬆實現。

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秒。請注意,對於更多模型,所需時間會更長。如果您遇到載入時間問題,請務必提交GitHub Issue

使用

當您使用端點時,您需要指定您的adapter_id。以下是一個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"
  }
}'

或者,這是一個使用來自出色的Hugging Face Hub Python庫中的InferenceClient的示例。請確保您使用的是huggingface-hub>=0.24.0,並且在必要時已登入

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',
)

實際考量

成本

我們並非第一個攀登這座高峰的,正如下文所述。LoRAX的團隊Predibase有一篇出色的文章。請務必檢視,因為本節是基於他們的工作。

multi-lora-cost
圖5:Multi-LoRA成本 對於TGI,我將mistralai/Mistral-7B-v0.1作為基礎模型部署在nvidia-l4上,其在推理端點上的成本為0.8美元/小時。我能夠獲得75請求/秒,平均輸入token為450,輸出token為234,並根據GPT3.5 Turbo進行了相應調整。

Multi-LoRA服務的一大優勢是**您無需為多個模型進行多次部署**,最終這會大大降低成本。這應該符合您的直覺,因為多個模型將需要所有權重,而不僅僅是小的介面卡層。如您在*圖5*中所見,即使我們使用TGI Multi-LoRA添加了更多模型,每個token的成本也相同。對於TGI專用部署,成本會隨著每個微調模型需要新部署而增加。

使用模式

multi-lora-serving-pattern
圖6:Multi-LoRA服務模式

當您部署多個模型時,一個實際挑戰是您的使用模式會存在很大的差異。有些模型使用率可能很低;有些可能出現突發性使用,有些則可能使用頻率很高。這使得擴充套件變得非常困難,特別是當每個模型都獨立時。當您不得不新增另一個GPU時,會出現很多“四捨五入”錯誤,而且很快就會累積起來。在理想世界中,您會最大限度地利用每個GPU的利用率,而不使用任何額外的GPU。您需要確保擁有足夠的GPU,同時知道有些GPU會閒置,這可能非常繁瑣。

當我們透過Multi-LoRA進行整合時,我們獲得了更穩定的使用。我們可以在圖6中看到這一點,即使Multi-LoRA服務模式包含更不穩定的模式,它也相當穩定。透過整合模型,您可以實現更平滑的使用和更易於管理的擴充套件。請注意,這些只是示意性模式,請仔細思考您自己的模式以及Multi-LoRA如何提供幫助。部署1個模型,而不是30個!

更改基礎模型

在AI飛速發展的現實世界中會發生什麼?如果您想選擇不同的/更新的模型作為您的基礎模型怎麼辦?雖然我們的示例使用mistralai/Mistral-7B-v0.1作為基礎模型,但還有其他基礎模型,例如Mistral的v0.3,它支援函式呼叫,以及完全不同的模型家族,例如Llama 3。總的來說,我們預計會不斷推出更高效、效能更好的新基礎模型。

但請放心!如果您有*充分的理由*更新您的基礎模型,重新訓練 LoRA 也很容易。訓練成本相對較低;事實上,Predibase 發現每個模型的訓練成本僅約為 8.00 美元。使用現代框架和通用工程實踐,程式碼更改量也微乎其微。

  • 保留用於訓練模型的筆記本/程式碼
  • 版本控制您的資料集
  • 跟蹤使用的配置
  • 使用新模型/設定進行更新

結論

Multi-LoRA服務代表了一種AI模型部署的變革性方法,為管理多個專業化模型所帶來的成本和複雜性障礙提供瞭解決方案。透過利用單一基礎模型並動態應用微調適配器,組織可以顯著降低運營開銷,同時在各種任務中保持甚至增強效能。**AI總監們,我們要求你們大膽,選擇一個基礎模型,並擁抱Multi-LoRA正規化,**其簡潔性和成本節約將帶來豐厚的回報。讓Multi-LoRA成為您AI戰略的基石,確保您的組織在快速發展的技術領域保持領先。

致謝

實現Multi-LoRA服務可能非常棘手,但由於punica-ailorax團隊的出色工作,已經開發出了最佳化核心和框架,使這一過程更加高效。TGI利用這些最佳化,為多個LoRA模型提供快速高效的推理。

特別感謝 Punica、LoRAX 和 S-LoRA 團隊在 Multi-LoRA 服務方面所做的出色和開放的工作。

參考文獻

社群

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.