Compiling ONNX Neural Network Models Using MLIR

TL;DR

使用MLIR编译ONNX模型,提高推理性能。

cs.PL 🔴 高级 2020-08-19 5 次浏览
Tian Jin Gheorghe-Teodor Bercea Tung D. Le Tong Chen Gong Su Haruki Imai Yasushi Negishi Anh Leu Kevin O'Brien Kiyokuni Kawachiya Alexandre E. Eichenberger
ONNX MLIR 编译器 深度学习 优化

核心发现

方法论

本文提出了onnx-mlir编译器,利用MLIR基础设施实现ONNX模型的推理代码生成。通过定义两个新方言:ONNX特定方言和循环方言,实现图级和循环级优化。

关键结果

  • 在IBM Power Systems上对MNIST和ResNet50模型进行实验,结果显示推理性能显著提升,尤其在内存管理和循环优化方面。
  • 通过实验验证,编译后的模型在不同架构上运行效率提高,尤其在x86和IBM System Z上。
  • 初步优化工作表明,图重写和常量传播显著减少了计算开销。

研究意义

该研究通过编译器技术提高了ONNX模型的跨平台性能,解决了模型在不同环境下的部署问题。对学术界和工业界具有重要意义,尤其在边缘设备上的应用。

技术贡献

提出了基于MLIR的编译器架构,支持多层中间表示,提供了新的理论保证和工程可能性。与现有方法相比,显著提高了模型的可移植性和推理效率。

新颖性

首次将MLIR用于ONNX模型编译,提出了两种新方言,显著优化了模型推理过程。与现有方法相比,提供了更高效的代码生成路径。

局限性

  • 目前支持的模型有限,主要集中在流行的深度学习模型,如MNIST和ResNet50。
  • 编译器仍在开发中,部分架构的支持尚不完善。

未来方向

未来工作包括扩展支持的模型类型,优化不同架构上的代码生成,并进一步提高编译器的稳定性和性能。

AI 总览摘要

深度神经网络模型在计算机视觉、语音识别和自然语言处理等领域日益流行。为了提高模型的可移植性,开源社区提出了ONNX标准。本文介绍了onnx-mlir编译器,它利用MLIR基础设施生成ONNX格式模型的推理代码。通过定义两个新方言:ONNX特定方言和循环方言,实现图级和循环级优化。实验结果表明,编译器在不同架构上显著提高了模型的推理性能。尽管仍在开发中,该编译器已能支持MNIST和ResNet50等流行模型。未来工作将集中在扩展支持的模型类型和优化代码生成。

深度分析

研究背景

深度学习模型在过去十年中迅速发展,尤其是在GPU加速器的推动下。多个框架如Torch、Caffe、Theano和TensorFlow的出现加速了这一进程。然而,训练和推理通常在不同环境中进行,导致模型的可移植性问题。

核心问题

深度学习模型的训练通常需要资源丰富的环境,而推理则可能在边缘设备上进行。现有方法在模型重写和优化方面存在局限,无法满足不同环境的需求。

核心创新

本文提出了onnx-mlir编译器,通过MLIR实现ONNX模型的推理代码生成。定义了两个新方言:ONNX特定方言和循环方言,支持图级和循环级优化。

方法详解

  • �� 使用MLIR基础设施实现编译器架构
  • �� 定义ONNX特定方言以编码标准语义
  • �� 创建循环方言以支持通用降级点
  • �� 应用图重写和常量传播优化

实验设计

实验在IBM Power Systems上进行,使用MNIST和ResNet50模型。评估了编译器在不同架构上的性能提升,特别是在内存管理和循环优化方面。

结果分析

实验结果显示,编译后的模型在x86和IBM System Z上运行效率显著提高。图重写和常量传播优化显著减少了计算开销。

应用场景

编译器可用于提高深度学习模型在边缘设备上的推理性能,特别是在资源受限的环境中。

局限与展望

目前支持的模型类型有限,编译器仍在开发中,部分架构的支持尚不完善。未来工作将集中在扩展支持的模型类型和优化代码生成。

通俗解读 非专业人士也能看懂

想象你在厨房准备一顿大餐。你有一个食谱(ONNX模型),需要在不同的厨房(不同设备)中烹饪。我们的编译器就像一个万能厨师,它能根据不同厨房的特点调整食材和烹饪步骤(优化),确保每次都能做出美味佳肴(高效推理)。

简单解释 像给14岁少年讲一样

嘿,小伙伴们!想象你在玩一个超级酷的游戏。你有一个角色(ONNX模型),需要在不同的关卡(设备)中完成任务。我们的编译器就像一个超级助手,它能帮你调整角色的装备和技能(优化),确保你在每个关卡中都能轻松获胜(高效推理)!

术语表

ONNX (开放神经网络交换)

一种用于交换神经网络模型的开源标准,支持不同框架间的模型互操作。

本文中用于表示输入模型格式。

MLIR (多层中间表示)

一种现代编译器基础设施,支持多层中间表示和优化。

用于实现编译器架构。

Dialect (方言)

在MLIR中定义的一种中间表示,用于特定领域的优化。

本文中定义了ONNX特定方言和循环方言。

Optimization Pass (优化过程)

编译器中用于优化代码的过程,如图重写和常量传播。

用于提高模型推理性能。

LLVM (低级虚拟机)

一种用于编译器开发的开源项目,支持代码生成和优化。

MLIR是LLVM的子项目。

开放问题 这项研究留下的未解疑问

  • 1 如何支持更多类型的模型,特别是复杂的深度学习模型。
  • 2 如何进一步优化不同架构上的代码生成。

应用场景

近期应用

边缘设备推理优化

提高深度学习模型在资源受限环境中的推理性能,特别是在移动设备和物联网设备上。

跨平台模型部署

支持模型在不同硬件架构上的高效部署,减少开发和维护成本。

远期愿景

通用编译器架构

开发一个支持多种模型和架构的通用编译器,提高人工智能应用的可移植性和性能。

原文摘要

Deep neural network models are becoming increasingly popular and have been used in various tasks such as computer vision, speech recognition, and natural language processing. Machine learning models are commonly trained in a resource-rich environment and then deployed in a distinct environment such as high availability machines or edge devices. To assist the portability of models, the open-source community has proposed the Open Neural Network Exchange (ONNX) standard. In this paper, we present a high-level, preliminary report on our onnx-mlir compiler, which generates code for the inference of deep neural network models described in the ONNX format. Onnx-mlir is an open-source compiler implemented using the Multi-Level Intermediate Representation (MLIR) infrastructure recently integrated in the LLVM project. Onnx-mlir relies on the MLIR concept of dialects to implement its functionality. We propose here two new dialects: (1) an ONNX specific dialect that encodes the ONNX standard semantics, and (2) a loop-based dialect to provide for a common lowering point for all ONNX dialect operations. Each intermediate representation facilitates its own characteristic set of graph-level and loop-based optimizations respectively. We illustrate our approach by following several models through the proposed representations and we include some early optimization work and performance results.

cs.PL cs.LG