一个ONNX-MLIR示例工程代码
一个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>
}
}