ONNX Runtime 多 LoRA 功能发布:彻底革新 AI 定制化

作者

Dmitri Smirnov, Jambay Kinley, Natalie Kershaw, Parinita Rahi, Pranav Sharma, Devang Patel, Samuel Kemp

2024 年 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 格式中拥有现有的基本模型和适配器,您可以使用以下命令自动创建优化的 ONNX 模型,这些模型将在 ONNX 运行时上使用 MultiLoRA 范式高效运行

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 模型并切换适配器

  1. 加载适配器: 为基本模型动态加载适配器

    adapters = oga.Adapters(model) 
    adapters.load("file", "name")
  2. 设置活动适配器: 根据客户请求动态切换适配器

    generator.set_active_adapter(adapters, "name") 

展望未来

开发中

  • 批量处理支持: 增强 ONNX Runtime 内核以实现适配器感知的批量处理。
  • 扩展绑定: 引入语言绑定以实现更广泛的采用。
  • 内存特性: 额外的内存管理改进。

您的反馈至关重要

随着 MultiLoRA 的发展,我们邀请开发人员测试该功能、提供见解并塑造其路线图。通过共同努力,我们旨在为 AI 适配创建一个灵活而强大的基础。

结论

MultiLoRA 不仅仅是对 ONNX Runtime 的增强,它还是使 AI 系统模块化、可适应和可访问的一步。通过解决内存管理、批量处理和数据格式效率低下等技术挑战,MultiLoRA 为 AI 部署的新时代奠定了基础。

让我们共同构建可适应 AI 的未来。加入我们,一起探索 ONNX Runtime 的 MultiLoRA 功能!

资源