一个ONNX-MLIR示例工程代码

发布时间 2024-01-06 04:21:02作者: 吴建明wujianming

一个ONNX-MLIR示例工程代码

https://github.com/onnx/onnx-mlir

此项目(https://onnx.ai/onnx-mlir/)提供了编译器技术,用于将有效的开放神经网络交换(ONNX)图转换为以最低运行时支持实现该图的代码。基于底层LLVM/MLIR编译器技术,实现了ONNX标准。

 

该项目有助于:

ONNX方言,可以集成到其他项目中,

编译器接口将ONNX图降低为MLIR文件/LLVM字节码/C&Java库,

onnx-mlir驱动器来执行这些降低,

以及python/C/C++/Java运行时环境。

这里列出了通用CPU和IBM的Telum集成AI加速器对ONNX操作代码生成的当前支持级别。

直接设置ONNX-MLIR

ONNX-MLIR在Linux、OSX和Windows上本机运行。详细说明如下。

前置条件

python >= 3.8

gcc >= 6.4

protobuf >= 4.21.12

cmake >= 3.13.4

make >= 4.2.1 or ninja >= 1.10.2

java >= 1.11 (optional)

requirements.txt中捕获了所有PyPi包依赖项及其相应版本。

在任何时间点,ONNX-MLIR都取决于LLVM项目的特定提交,该项目已被证明可以与该项目一起使用。维护人员需要定期迁移到更新的LLVM级别。除其他外,这需要更新clone-milr.sh中的LLVM提交字符串。在更新ONNX-mlir时,最好检查mlir/LLVM的提交字符串是否与该文件中列出的字符串相同。当第三方ONNX也需要更新时,请参阅此处的说明。

Build构建

MLIR和ONNX-MLIR的安装说明取决于操作系统。

Linux or OSX.

Windows.

安装后,onnx-mlir可执行文件应出现在build/Debug/bin或build/Release/bin目录中。

如果在构建、重建或测试onnx-mlir时遇到困难,请查看有用的帮助。

使用ONNX-MLIR

onnx-mlir的用法如下:

概述:ONNX-MLIR模块化优化器驱动程序

用法:onnx-mlir[选项]<输入文件>

选项:

常规选项:

--help-显示可用选项(--help隐藏以获取更多信息)

--help list-显示可用选项的列表(--隐藏帮助列表以获取更多信息)

--version-显示此程序的版本

ONNX-MLIR选项:

这些都是前端选项。

选择要发射的目标:

--EmitONNXBasic-采用ONNX并在不推断形状的情况下发出基本ONNX操作。

--发射ONNXIR-接收ONNX并发射相应的ONNX方言。

--EmitMLR-降低MLIR内置转换方言的输入。

--EmitLLVMIR-降低LLVM IR(LLVM MLIR方言)的输入。

--EmitObj-将输入编译为对象文件。

--EmitLib-编译输入并将其链接到共享库中(默认)。

--EmitJNI-将输入编译到一个jar文件中。

优化级别:

--O0-优化级别0(默认值)。

--O1-优化级别1。

选项的完整列表由-help选项提供。标志的-和-前缀可以互换使用。请注意,与大多数编译器一样,默认的优化级别是-O0。建议在大多数应用中使用-O3。

选项也从ONNX_MLIR_FLAGS环境变量中读取。例如,ONNX_MLIR_FLAGS=“-O3”将确保所有编译都为-O3。

简单示例

例如,使用以下命令将ONNX模型(例如,add.onx)降低为ONNX方言:

./onnx-mlir --EmitONNXIR add.onnx

输出应该如下所示:

module {
func.func @main_graph(%arg0: tensor<10x10x10xf32>, %arg1: tensor<10x10x10xf32>) -> tensor<10x10x10xf32> {
%0 = "onnx.Add"(%arg0, %arg1) : (tensor<10x10x10xf32>, tensor<10x10x10xf32>) -> tensor<10x10x10xf32>
return %0 : tensor<10x10x10xf32>
}
}