宣布在 ONNX Runtime 中推出 MultiLoRA:彻底革新 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 格式的现有基础模型和适配器,您可以通过利用以下命令,使用 MultiLoRA 范式自动创建可在 ONNX 运行时上高效运行的优化 ONNX 模型

olive auto-opt -m <path to model> -a <example adapter> -o <output folder> --device cpu|gpu --provider <execution provider>

然后,您可以通过将它们转换为 ONNX 适配器格式,为同一基础模型添加 Hugging Face(或本地磁盘)上存在的其他适配器

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!

资源