釋出 ONNX Runtime MultiLoRA:徹底改變 AI 定製化
作者:
Dmitri Smirnov、Jambay Kinley、Natalie Kershaw、Parinita Rahi、Pranav Sharma、Devang Patel、Samuel Kemp2024 年 11 月 20 日
AI 定製化的新時代
當今的 AI 服務必須滿足廣泛使用者的需求——每個使用者都有獨特的需求和偏好。傳統上,為單個客戶或說話人定製大型語言模型是一項資源密集且耗時的任務。
LoRA 介面卡在為特定任務定製大型 AI 模型方面已證明具有變革性,而無需進行資源密集型微調。MultiLoRA 透過實現輕量級介面卡的無縫整合,改變了遊戲規則,使模型能夠動態適應不同的上下文和客戶。以 ONNX Runtime 為基礎,MultiLoRA 提供無與倫比的效能,確保高效的記憶體使用。
與 Olive 的整合更流暢
MultiLoRA 依賴現有的 Olive 工具鏈來生成適配後的 ONNX 模型。
這確保了
- 建立 LoRA 適配模型時的統一流程。
- 跨模型和介面卡版本控制及元資料處理的一致性。
透過圍繞 Olive 進行標準化,MultiLoRA 簡化了工作流程,並消除了與第三方源的相容性問題。
ONNX Runtime 適配
簡化的介面卡啟用和載入
動態啟用 API:一個單一的 API,
SetActiveAdapters(string[] adapters),允許在執行時啟用或停用介面卡。- 空輸入:將模型重置為其基本狀態,在不使用任何介面卡的情況下執行。
- 多介面卡支援:同時啟用多個介面卡以滿足複雜的客戶需求。
生成迴圈支援
- 只要
GeneratorParams例項存在,活躍介面卡就會保持載入狀態,確保高效的記憶體使用。 - 當例項被銷燬時,引用會自動釋放,從而避免資源洩漏。
- 只要
非生成迴圈的介面卡管理
對於不與使用者提示或生成過程繫結的模型,引入了新的 Run() API
Results = Run(RunOptions, input_names[], input_data[], output_names[]); - RunOptions 類:有助於無縫執行基礎模型或介面卡增強型變體。
- 共享介面卡載入:介面卡儲存在模型例項中,允許多個會話之間高效重用。
語言繫結擴充套件
當前的 MultiLoRA 實現提供了 Python、C、C++、C# 和 Java 的繫結。
記憶體管理
我們的實現將 LoRA 引數從磁碟記憶體對映,這改進了記憶體管理。
MultiLoRA 工作原理
生成 ONNX 模型和介面卡
如果您擁有 Hugging Face PEFT 格式的現有基礎模型和介面卡,您可以透過利用以下命令,使用 MultiLoRA 正規化自動建立可在 ONNX Runtime 上高效執行的最佳化 ONNX 模型
olive auto-opt -m <path to model> -a <example adapter> -o <output folder> --device cpu|gpu --provider <execution provider> 然後,您可以透過將 Hugging Face(或本地磁碟)上存在用於相同基礎模型的其他介面卡轉換為 ONNX 介面卡格式來新增它們,使用
olive convert-adapters -a <adapter> -o <output> 或者,您可以使用以下命令微調自己的介面卡
# Step 1: finetune (output a PyTorch model and PEFT adapter)
olive fine-tune --method qlora -m <model> -d <dataset> -o models/ft
# Step 2 : Optimize base model and adapter into ONNX format
olive auto-opt -m models/ft/model -a models/ft/adapter -o <output folder> --device cpu|gpu --provider <execution provider> 執行 ONNX 模型並切換介面卡
載入介面卡:為基礎模型動態載入介面卡
adapters = oga.Adapters(model) adapters.load("file", "name")設定活躍介面卡:根據客戶請求即時切換介面卡
generator.set_active_adapter(adapters, "name")
展望未來
開發中
- 批處理支援:增強 ONNX Runtime 核心以支援介面卡感知的批處理。
- 擴充套件繫結:引入語言繫結以實現更廣泛的採用。
- 記憶體功能:額外的記憶體管理改進。
您的反饋很重要
隨著 MultiLoRA 的發展,我們邀請開發者測試此功能、提供見解並塑造其路線圖。透過共同努力,我們的目標是為 AI 適配建立一個靈活、強大的基礎。
總結
MultiLoRA 不僅僅是對 ONNX Runtime 的增強,更是朝著使 AI 系統模組化、適應性強且易於訪問邁出的一步。透過解決記憶體管理、批處理和資料格式效率低下等技術挑戰,MultiLoRA 為 AI 部署的新時代奠定了基礎。
讓我們共同構建適應性 AI 的未來。與我們一起探索 ONNX Runtime MultiLoRA!
資源
- ONNX Runtime 教程:使用 LoRA 介面卡執行
- Python API 文件:Python API
- Olive 示例:微調和部署