ONNX MLIR方法

MLIR中的开放式神经网络交换实现。

Prerequisites

gcc >= 6.4

libprotoc >= 3.11.0

cmake >= 3.15.4

在UNIX上安装MLIR

首先,安装MLIR(作为LLVM-Project的一部分):

git clone https://github.com/llvm/llvm-project.git

# Check out a specific branch that is known to work with ONNX MLIR.

cd llvm-project && git checkout 496fb70b141ccbfaba9761294f3b4b97717096a3 && cd ..

mkdir llvm-project/build

cd llvm-project/build

cmake -G Ninja ../llvm \

-DLLVM_ENABLE_PROJECTS=mlir \

-DLLVM_BUILD_EXAMPLES=ON \

-DLLVM_TARGETS_TO_BUILD="host" \

-DCMAKE_BUILD_TYPE=Release \

-DLLVM_ENABLE_ASSERTIONS=ON \

-DLLVM_ENABLE_RTTI=ON

cmake --build . --target -- ${MAKEFLAGS}

cmake --build . --target check-mlir

ONNX-MLIR (this project)

需要设置两个环境变量:

  • LLVM_PROJ_SRC指向llvm-project src目录(例如llvm-project /)。
  • LLVM_PROJ_BUILD指向llvm-project构建目录(例如,llvm-project / build)。

要构建ONNX-MLIR,使用以下命令:

same-as-file: <> ({“ref”: “utils/install-onnx-mlir.sh”, “skip-doc”: 2})

git clone --recursive https://github.com/onnx/onnx-mlir.git

# Export environment variables pointing to LLVM-Projects.

export LLVM_PROJ_SRC=$(pwd)/llvm-project/

export LLVM_PROJ_BUILD=$(pwd)/llvm-project/build

mkdir onnx-mlir/build && cd onnx-mlir/build

cmake ..

cmake --build .

# Run FileCheck tests:

export LIT_OPTS=-v

cmake --build . --target check-onnx-lit

上述命令成功onnx-mlir执行后,可执行文件应出现在bin目录中。

在Windows上安装

在Windows上构建onnx-mlir,需要构建一些默认情况下不可用的其它预先条件。

文件中的说明假定正在使用Visual Studio 2019社区版。建议安装具有C ++桌面开发具有C ++工作负载的Linux开发。这样可以确保拥有编译此工程,及其在Windows上的依赖项所需的所有工具链和库。

“ VS 2019开发人员命令提示符”开始的外壳程序中运行所有命令。

Protobuf

将protobuf构建为静态库。

set root_dir=%cd%

git clone --recurse-submodules https://github.com/protocolbuffers/protobuf.git

cd protobuf

cd cmake

cmake -G "Visual Studio 16 2019" -A x64 -T host=x64 -DCMAKE_BUILD_TYPE=Release -Dprotobuf_MSVC_STATIC_RUNTIME=OFF -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_EXAMPLES=OFF -Dprotobuf_WITH_ZLIB=OFF -DCMAKE_INSTALL_PREFIX="%root_dir%\protobuf\install"

call msbuild protobuf.sln /m /p:Configuration=Release

call msbuild INSTALL.vcxproj /p:Configuration=Release

在为onnx-mlir运行CMake之前,确保此protobuf的bin目录在PATH中的其它任何目录之前:

set PATH=%root_dir%\protobuf\install\bin;%PATH%

PDCurses

Build a local version of the curses library, used by various commandline tools in onnx-mlir. These instructions assume you use Public Domain Curses.

Run this from a Visual Studio developer command prompt since you will need access to the appropriate version of Visual Studio’s nmake tool.

构建curses库的本地版本,供onnx-mlir中的各种命令行工具使用。这些说明假定使用Public Domain Curses

从Visual Studio开发命令提示符运行此命令,需要访问相应版本的Visual Studio的nmake工具。

set root_dir=%cd%

git clone https://github.com/wmcbrine/PDCurses.git

set PDCURSES_SRCDIR=%root_dir%/PDCurses

cd PDCurses

call nmake -f wincon/Makefile.vc

MLIR

安装MLIR(作为LLVM-Project的一部分):

git clone https://github.com/llvm/llvm-project.git

# Check out a specific branch that is known to work with ONNX MLIR.

cd llvm-project && git checkout 496fb70b141ccbfaba9761294f3b4b97717096a3 && cd ..

set root_dir=%cd%

md llvm-project\build

cd llvm-project\build

call cmake -G "Visual Studio 16 2019" -A x64 -T host=x64 ..\llvm ^

-DCMAKE_INSTALL_PREFIX="%root_dir%\llvm-project\build\install" ^

-DLLVM_ENABLE_PROJECTS=mlir ^

-DLLVM_BUILD_EXAMPLES=ON ^

-DLLVM_TARGETS_TO_BUILD="host" ^

-DCMAKE_BUILD_TYPE=Release ^

-DLLVM_ENABLE_ASSERTIONS=ON ^

-DLLVM_ENABLE_RTTI=ON ^

-DLLVM_ENABLE_ZLIB=OFF

call cmake --build . --config Release --target -- /m

call cmake --build . --config Release --target install

call cmake --build . --config Release --target check-mlir

ONNX-MLIR (this project)

在构建onnx-mlir之前,需要设置以下环境变量:

  • CURSES_LIB_PATH:curses库的路径(例如c:/ repos / PDCurses)
  • LLVM_PROJ_BUILD:LLVM构建目录的路径(例如c:/ repos / llvm-project / build)
  • LLVM_PROJ_SRC:LLVM源目录的路径(例如c:/ repos / llvm-project)

该项目使用带lit(LLVM的Integrated Tester)进行单元测试。运行CMake时,使用LLVM_EXTERNAL_LIT定义从LLVM指定lit工具的路径。

要构建ONNX MLIR,使用以下命令:

same-as-file: <> ({“ref”: “utils/install-onnx-mlir.cmd”, “skip-doc”: 2})

git clone --recursive https://github.com/onnx/onnx-mlir.git

REM Export environment variables pointing to LLVM-Projects.

set root_dir=%cd%

set CURSES_LIB_PATH=%root_dir%/PDCurses

set LLVM_PROJ_BUILD=%root_dir%/llvm-project/build

set LLVM_PROJ_SRC=%root_dir%/llvm-project

md onnx-mlir\build

cd onnx-mlir\build

call cmake -G "Visual Studio 16 2019" -A x64 -T host=x64 -DLLVM_EXTERNAL_LIT="%root_dir%\llvm-project\build\Release\bin\llvm-lit.py" -DCMAKE_BUILD_TYPE=Release ..

call cmake --build . --config Release --target onnx-mlir -- /m

REM Run FileCheck tests

set LIT_OPTS=-v

call cmake --build . --config Release --target check-onnx-lit

上述命令成功onnx-mlir执行后,可执行文件应出现在bin目录中。

使用ONNX-MLIR

onnx-mlir用法如下:

OVERVIEW: ONNX MLIR modular optimizer driver

USAGE: onnx-mlir [options] <input file>

OPTIONS:

Generic Options:

--help        - Display available options (--help-hidden for more)

--help-list   - Display list of available options (--help-list-hidden for more)

--version     - Display the version of this program

ONNX MLIR Options:

These are frontend options.

Choose target to emit:

--EmitONNXIR - Ingest ONNX and emit corresponding ONNX dialect.

--EmitMLIR   - Lower model to MLIR built-in transformation dialect.

--EmitLLVMIR - Lower model to LLVM IR (LLVM dialect).

--EmitLLVMBC - Lower model to LLVM IR and emit (to file) LLVM bitcode for model.

Example

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

./onnx-mlir --EmitONNXIR add.onnx

输出应如下所示:

module {

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>

}

}

ONNX MLIR方法的更多相关文章

  1. ResNet网络的训练和预测

    ResNet网络的训练和预测 简介 Introduction 图像分类与CNN 图像分类 是指将图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法,是计算机视觉中其他任务,比如目标检测 ...

  2. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  3. ONNX 实时graph优化方法

    ONNX 实时graph优化方法 ONNX实时提供了各种图形优化来提高模型性能.图优化本质上是图级别的转换,从小型图简化和节点消除,到更复杂的节点融合和布局优化. 图形优化根据其复杂性和功能分为几个类 ...

  4. UWP通过机器学习加载ONNX进行表情识别

    首先我们先来说说这个ONNX ONNX是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型.它使得不同的人工智能框架(如Pytorch, MXNet)可以采用相同格式存储模型数据并交互. ...

  5. MLIR中间表示和编译器框架

    MLIR中间表示和编译器框架 TensorFlow生态系统包含许多在软件和硬件堆栈的多个级别上运行的编译器和优化器.作为TensorFlow的日常用户,使用不同类型的硬件(GPU,TPU,移动设备)时 ...

  6. 使用Relay部署编译ONNX模型

    使用Relay部署编译ONNX模型 本文介绍如何使用Relay部署ONNX模型的入门. 首先,必须安装ONNX软件包. 一个快速的解决方案是安装protobuf编译器,然后 pip install o ...

  7. 使用ONNX将模型转移至Caffe2和移动端

    使用ONNX将模型转移至Caffe2和移动端 本文介绍如何使用 ONNX 将 PyTorch 中定义的模型转换为 ONNX 格式,然后将其加载到 Caffe2 中.一旦进入 Caffe2, 就可以运行 ...

  8. MLIR算子量化Quantization

    MLIR算子量化Quantization 本文概述了MLIR量化系统的设计.虽然术语"量化"是高度过载的,用于将浮点计算转换为以整数数学表示,适配的变量进行推理的技术的相当窄的范围 ...

  9. 多级中间表示概述MLIR

    多级中间表示概述MLIR MLIR项目是一种构建可重用和可扩展的编译器基础结构的新颖方法.MLIR旨在解决软件碎片,改善异构硬件的编译,显着降低构建特定于域的编译器的成本以及帮助将现有编译器连接在一起 ...

随机推荐

  1. 16- web测试总结

    在线用户不进行任何操作,对服务器也会产生压力.因为有会话的存在. 服务器tps与相应时间没有直接关系:每个口 关键性能指标:TPS.响应时间.并发数.思考时间.资源利用率(内存.cpu.磁盘).pv. ...

  2. Sublime Text 3 Build 3176 License

    先在hosts文件里加入两行: 127.0.0.1 www.sublimetext.com 127.0.0.1 license.sublimehq.com 目的是防止Sublime Text更新和检测 ...

  3. hdu 1814 字典序最小的2sat(暴力深搜)

    题意:      题意就是最基础的2sat,关系只有矛盾关系,然后二选一,关键是这个题目是输出字典序最小的那组解. 思路:      输出字典序最小,用强连通那个实现不了(起码没看到有人实现),其实我 ...

  4. Hydra暴力破解工具的用法

    目录 Hydra 常见参数 破解SSH 破解FTP 破解HTTP 破解3389远程登录 Kali自带密码字典 dirb dirbuster fern-wifi metasploit wfuzz Hyd ...

  5. POJ1149 最大流经典建图PIG

    题意:       有一个人,他有m个猪圈,每个猪圈里都有一定数量的猪,但是他没有钥匙,然后依次来了n个顾客,每个顾客都有一些钥匙,还有他要卖猪的数量,每个顾客来的时候主人用顾客的钥匙打开相应的门,可 ...

  6. nodejs-REPL/回调函数/事件循环

    REPL 回调函数 事件循环 REPL----------------------------------------------------- Node.js REPL(Read Eval Prin ...

  7. 《NO STRATEGY》《重塑战略》

    书名:<NO STRATEGY> <重塑战略> 作者: [美]吉姆·柯林斯/[韩]W·钱·金/[美]迈克尔·波特(注意这个是内容的整理者不是内容作者) HBR:(Harvard ...

  8. MySQL库表设计小技巧

    前言: 在我们项目开发中,数据库及表的设计可以说是非常重要,我遇到过很多库表设计比较杂乱的项目,像表名.字段名命名混乱.字段类型设计混乱等等,此类数据库后续极难维护与拓展.我一直相信只有优秀的库表设计 ...

  9. [在学习Django框架之前所需要了解的知识点]

    [在学习Django框架之前所需要了解的知识点] Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现 ...

  10. yiled

    def fib(max): n,a,b = 0,0,1 while n < max: print("hallo") yield b #把函数执行过程冻结在这一步,并且把b的值 ...