宣布推出 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 的绑定。
内存管理
我们的实现通过内存映射(memory mapping)方式从磁盘加载 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 示例: 微调与部署