• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 生成式人工智能/大語言模型

    借助 NVIDIA NIM 無縫部署大量 LoRA Adapters

    最新的先進基礎大型語言模型 (LLM) 擁有數十億個參數,并已在數萬億個輸入文本標記上進行了預訓練。它們通常在各種用例上都取得了驚人的成果,而無需進行任何定制。盡管如此,研究表明,通過使用高質量、特定領域的數據集調整 LLM 可以實現下游任務的最佳準確率。

    在許多情況下,較小的自定義模型可以美甚至優于較大的通用 LLM,同時顯著降低部署成本。但是,針對特定下游任務定制模型可能會在創建和部署期間帶來重大挑戰。

    完整的 full fine-tuning 對于大型語言模型(LLM,即更新模型的所有參數),由于在整個模型中學習所需的計算基礎設施數量,可能很困難。在部署時,基礎設施成本也會增加,因為用戶需要在內存中托管多個大型模型,或者隨著整個模型的交換而承受更高的延遲。Low-rank adaptation(LoRA)是一種緩解這兩個問題的技術。

    本文簡要概述了 LoRA,并解釋了部署 LoRA 微調模型的兩種方法。我們還將討論對 LoRA adapter 集群啟用異構 LoRA 部署的方法,從而實現混合批量推理請求。

    Low-rank 適應

    在過去幾年中,LoRA 已經成為一種熱門技術,與完全 fine-tuning 相比,它可以調整非常少量的附加參數。這些附加參數稱為 LoRA adapter,表示對網絡 dense 層中變化的 low-rank decomposition。LoRA 的運行基于以下觀察:大型語言模型(LLMs)已經過參數化,而在 fine-tuning 期間新學習的信息具有較低的“ intrinsic rank”。換言之,模型參數中的有效更改僅限于整個非常高維參數空間的 lower-dimensional subspace。使用 LoRA,可以將可訓練參數的數量減少 10,000 倍。

    Figure 1 illustrates the parameters introduced in the form of trainable low-rank matrices A and B. The pretrained weights are frozen while A and B are trained during LoRA customization to represent the newly added information.
    圖 1、AB表示新添加的信息。圖片來源:LoRA:大型語言模型的低級別適應

    圖 1 描述了 LoRA 背后的核心理念:

    • 預訓練模型的權重 (W) 在自定義過程中被凍結
    • 無需更新 W,兩個較小的可訓練矩陣 A B 會被注入,用于學習特定于任務的信息。矩陣乘法B*A形成一個矩陣,其維度與 W 因此可以將其添加到 W (= W + BA).

    A B 矩陣是 8、16 等較小的值。累加而言,它們的可訓練參數遠遠少于 W 從而提高自定義的計算和內存效率。此 rank (r) 參數通常可在訓練時自定義。

    在秩序大小和計算效率之間存在權衡。更大的秩值可以提高模型的表達能力,因此模型可以捕獲與下游任務相關的更多模式。非常高的秩值(例如 64)接近完全監督式 fine-tuning 的學習信息能力。也就是說,更新模型中的所有參數。缺點是,在內存和計算需求方面,更大的秩的訓練和推理成本更高。在實踐中,使用小至 8 的秩值進行 LoRA fine-tuning 已經非常有效,并且是各種下游任務的良好起點。

    部署經過 LoRA 調優的模型

    可以通過以下方式部署 LoRA 微調。

    選項 1:合并 LoRA Adapter

    額外的 LoRA 權重可以與預訓練模型合并,以創建一個在結構上與其前代模型相同的 purpose-built 變體。這可以避免在單獨管理 adapter 時產生任何額外的 inference latency。權重合并是一種更簡單的方法,但缺乏靈活性。這種方法的缺點是,整個模型變得“定制化” 并且只能完成一項任務,即它要微調的任務。這使得難以將不同任務的輸入分批在一起,以提高部署效率。只有當您計劃為每個部署提供單個任務時,才推薦使用此方法。

    選項 2:動態加載 LoRA Adapter

    LoRA Adapter (AB 在圖 1 中) 與基礎模型 (W) 保持分離。在推理時,運行時會動態加載與傳入請求相對應的Adapter權重,以提供服務。這使得它可以靈活地同時服務和批處理來自各種任務的輸入,以充分利用可用計算,而無需維護單獨的自定義模型。

    某些用例需要多個 LoRA,甚至需要在同一基礎模型上使用數百甚至數千個 LoRA.對于這些用例,選擇動態 LoRA Adapter 是更好的路徑。示例包括:

    • 為客戶提供個性化模型的企業,用于提供推薦服務,或根據其特定角色或偏好進行調整。
    • A/B 測試,用于比較同一用例中的各種 LoRA 微調。
    • 為基于相同基礎模型的多個下游用例提供服務的企業。例如,IT 服務團隊部署多個 LoRA 設置,用于 錯誤總結、ticket routing 和分類、在特定文獻語料庫中實現聊天機器人和知識檢索、根本原因分析等多種應用場景。

    NVIDIA NIM 提供經過優化的推理微服務,支持 LoRA Adapter的動態加載,并允許發送混合批量請求。以下部分將更深入地了解我們的方法。

    借助 NVIDIA NIM 實現異構、多 LoRA 部署

    借助 NIM,每個推理微服務都與單個基礎模型相關聯。此模型可以以與之關聯的低級Adapter的形式進行任意數量的“自定義”。

    1. 網卡,使用NVIDIA NeMo 框架Hugging Face PEFT將庫放入Adapter存儲中,并賦予其唯一名稱。
    2. 向 NIM 發出請求時,客戶端可以通過添加 LoRA 模型名稱來指定他們想要的特定自定義。
    3. 當 NIM 收到定制模型的請求時,它會將關聯的Adapter從Adapter存儲中拉到多層緩存中。一些Adapter駐留在 GPU 顯存中,一些駐留在主機顯存中,具體取決于它們的使用時間。
    4. 在執行期間,NIM 將運行專門的 GPU 內核,讓數據同時流經基礎模型和多個不同的低級Adapter。這使其能夠同時響應多個不同的自定義模型的請求。
    This image illustrates an architecture diagram for a mixed batch input neural network model. The key components are: Mixed Batch Input, GPU Memory, Adapter Store, Adapter Cache, and Output Batch.
    圖 2.NVIDIA NIM 動態 LoRA 架構,支持在同一基礎模型上發送混合批量輸入

    處理混合批量請求

    一個批量中的請求可能會使用不同的 LoRA Adapter來支持不同的任務。因此,傳統的 General Matrix Multiplication(GEMM)無法同時計算所有請求。按順序逐一計算這些請求會導致大量額外開銷。為了解決這個問題,我們使用了NVIDIA CUTLASS 以實現批量 General Matrix Multiplication,將批量異構請求處理融合到單個內核中。這提高了 GPU 利用率和性能。

    此外,我們發現,對于每個Adapter的第一個矩陣組件,批量 GEMM 的 GPU 利用率不夠高,因為第一個矩陣具有非常大的輸入維度和較小的輸出維度。每個Adapter都有兩個矩陣組件,A(形狀d-by-r) 和B(形狀r-by-d),如圖 1 所示。由于d通常比 LoRA 排名r大很多,我們應用了splitK 方法將 GEMM 分割為多個流多處理器 (SM) 上的多個圖塊,從而提高 GPU 利用率,并使用額外的歸約核來減少 splitK-batched-GEMM 之后的部分結果。

    性能基準測試的最佳實踐

    評估此類多 LoRA 部署的延遲和吞吐量性能并非易事。在本節中,我們將討論在對 LLM LoRA 推理框架的性能進行基準測試時通常值得考慮的幾個主要因素。

    • 基礎模型:小型和大型模型均可用作 LoRA 微調和推理的基礎模型,例如Llama 3 8BLlama 3 70B。較小的模型擅長處理許多任務,尤其是傳統的非生成自然語言處理任務(例如文本分類),而較大的模型擅長處理復雜的推理任務。LoRA 的優勢之一是,即使是大型的 70B 模型也可以在單個 NVIDIA DGX H100 或使用 FP16 的 NVIDIA A100 節點,甚至是單個 NVIDIA H100NVIDIA A100 4 位量化的 GPU。
    • Adapter: 在實踐中,從最終用戶的角度來看,最好具有靈活性,實驗和選擇最佳準確性的大小。另一方面,系統操作員可能想要統一執行特定的固定大小,以啟用更好的批處理和改善統一 LoRA 的性能。 LoRA 排名的流行選擇是 8、16、32 和 64。
    • 測試參數:基準測試中需要考慮的其他幾個測試參數包括:
      • 輸出長度控制:我們使用 ignore_eos 參數通知推理框架繼續生成文本,直到它達到 max_token_length 限制。這可以確保滿足輸出序列長度(OSL)規范。此參數越來越多地得到大型語言模型(LLM)推理框架的支持,并顯著簡化了基準測試設置。值得注意的是,ignore_eos 不需要在“真實”任務上進行訓練以便進行性能分析。
    • 工具:基準測試工具 應支持調用 LoRA 模型。GenAI-Perf 是一款專門為 LoRA 支持而設計的語言模型基準測試工具。Adapter可以隨機統一調用,也可以循環調用,或者按照分布進行調用,以反映真實使用模式。例如,20% 的Adapter可能占請求的 80%。
    • 指標:在 LLM 域中,主要指標是延遲。TTFT (第一個令牌的時間)、ITL (令牌間延遲) 和吞吐量,TPS (每秒系統令牌總數)。

    其他補充指標包括每秒請求總數和端到端請求延遲。

    與使用基礎模型(或合并的 LoRA 模型)提供服務相比,添加動態 LoRAs(單個 LoRA、相同 rank 的多個 LoRAs 或不同 rank 的多個 LoRAs)都會導致延遲和吞吐量成本不斷增加。在理想情況下,這種成本應該是合理的,以換取動態 LoRAs 提供的更高的準確性和靈活性。

    在接下來的幾周和幾個月里,我們將分享更多關于 NIM 在為 LoRA 服務時的性能特征的內容。

    接下來要做的是

    在研究中,LoRA 有一些令人興奮的新增強功能,旨在提高微調模型的效率或準確性。我們的未來方向包括將這些功能融入 NIM。

    Tied-LoRA

    Tied-LoRA 是 NVIDIA Research 的一項新技術,可以提高 LoRA 的參數效率。在 LoRA 中,添加了特定于任務的低秩矩陣,這些矩陣近似于每層的權重更新。在 Tied-LoRA 中,這些低秩矩陣在各個層之間共享(“tied”),從而進一步減少可訓練的參數數量。此外,此技術允許有選擇地訓練或凍結 LoRA 的不同組件(低秩矩陣和 scaling vectors),使用戶能夠嘗試性能和參數效率之間的權衡。

    計劃在未來的版本中使用 NVIDIA NIM 支持此方法。

    DoRA

    DoRA 作為 NVIDIA Research 開發的另一種技術,它彌合了完全 fine-tuned 模型和 LoRA 調優之間的性能差距。它通過將預訓練權重分解為兩個組件來實現這一點:magnitude 和 direction。對于 fine-tuning,DoRA 專門使用 LoRA 進行 directional 更新,從而高效地最大限度地減少可訓練參數的數量。這種方法增強了 LoRA 的學習能力和訓練穩定性,而不會產生額外的 inference 開銷。在各種下游任務中,DoRA 在 LLaMA、LLaVA 和 VL-BART 等 fine-tuned 模型中的性能始終優于 LoRA,包括 commonsense reasoning、visual instruction tuning 以及 image 和 video-text understanding。

    結束語

    NVIDIA NIM使您能夠無縫部署和擴展多個 LoRA Adapter。NIM 現已正式推出,首先支持 Meta Llama 3 8BLlama 3 70B,以及 LoRA Adapter在NVIDIA NeMoHugging Face模型格式中。我們致力于在未來版本中增加對其他最先進的社區模型的支持。

    要開始在 NIM 中使用 multi-LoRA,請查看關于 LoRA 調整 Llama 3 模型使用 NVIDIA NeMo,部署經過調優的網卡,并發送混合推理請求的 Jupyter Notebook 教程。有關 NIM 的更多信息,請參閱文檔

    +1

    標簽

    人人超碰97caoporen国产