一、关于TVM

TVM是一个用于CPU,GPU和专用加速器的开放式深度学习编译器堆栈。它旨在缩小以生产力为重点的深度学习框架与面向性能或效率的硬件后端之间的差距。TVM提供以下主要功能:

  • 将Keras,MXNet,PyTorch,Tensorflow,CoreML,DarkNet中的深度学习模型汇编成各种硬件后端的最小可部署模块。
  • 基础架构可在更多后端自动生成和优化张量运算符,并具有更好的性能。

TVM堆栈始于华盛顿大学Paul G. Allen计算机科学与工程学院SAMPL小组的研究项目。该项目现在由一个涉及多个行业和学术机构的开源社区推动。该项目采用基于Apache风格的优点管理模型。

TVM提供了两个级别的优化,如下图所示。计算图优化,用于执行高级操作员融合,布局转换和内存管理等任务。然后是张量运算符优化和代码生成层,它优化张量运算符。更多详细信息可以在找到techreport。

sudo apt install clang-6.0 lldb-6.0 git clone --recursive https://github.com/dmlc/tvm cd tvm mkdir build cp cmake/config.cmake build cd build #请注意,我们键入`make runtime`仅构建运行时库。 # 如果要包含其他运行时(如OpenCL),可以修改`config.cmake`以启用这些选项。 #我是修改并开启了cuda和llvm $ vim config.cmake set ( USE_CUDA ON ) set ( USE_LLVM ON ) cmake .. make runtime sudo make install

三、库调用

对于API调用,可以在CMakeLists.txt中使用 include_directories() 写入指定调用路径。
我是把这些文件拷贝到了另一个文件夹下:
新建shell脚本 auto_include_tvm.sh 文件,写入以下内容,然后根据自己的目录运行脚本:

#!/bin/bash
if [ "$1" == "-h" ];then
    echo "执行的文件名:$0";
    echo "功能:拷贝tvm目录中的链接库文件,到目标目录中。"
    echo "用法:$ bash 文件名 [源目录] [目标目录]"
    echo "例子:$ bash auto_include_tvm.sh ~/soft/tvm ~/download_libs/tvm"
    exit 0;
if [ "$1" == "" ];then
    echo "请输入源目录!"
    exit 0;
if [ "$2" == "" ];then
    echo "请输入目标目录!"
#    echo "未输入目标目录,默认为当前目录!"
    exit 0;
mkdir -p "$2"
cp -r "$1""/include" "$2"
mkdir -p "$2""/3rdparty/dmlc-core"
cp -r "$1""/3rdparty/dmlc-core/include" "$2""/3rdparty/dmlc-core"
mkdir -p "$2""/3rdparty/dlpack"
cp -r "$1""/3rdparty/dlpack/include" "$2""/3rdparty/dlpack"
echo "end."

这样在CMakeLists.txt中这样进行链接:

set(CMAKE_CXX_STANDARD 11 )
find_package(OpenCV REQUIRED)
include_directories(
        /home/toson/download_libs/tvm/include
        /home/toson/download_libs/tvm/3rdparty/dmlc-core/include
        /home/toson/download_libs/tvm/3rdparty/dlpack/include)
target_link_libraries(demo
        /usr/local/lib/libtvm_runtime.so
        ${OpenCV_LIBS})
                    一、关于TVMTVM是一个用于CPU,GPU和专用加速器的开放式深度学习编译器堆栈。它旨在缩小以生产力为重点的深度学习框架与面向性能或效率的硬件后端之间的差距。TVM提供以下主要功能:将Keras,MXNet,PyTorch,Tensorflow,CoreML,DarkNet中的深度学习模型汇编成各种硬件后端的最小可部署模块。基础架构可在更多后端自动生成和优化张量运算符,并具有更好的性能。...
				
TVM、Openvino、TNN、NCNN前向推理框架使用心得 仅是个人开发过程中的一些心得, 不同的开发者应该有不同意见,当然我可能会有一些理解程度不够深入的地方,希望各位指正批评. 一共五分,★★★☆☆表示得三分,其中"-"表示接触的不多,无法提供相关的使用心得
最近在看深度学习编译器相关的工作,其中FlexTensor给我留下了比较深刻的印象,加上这项工作是开源的,所以想看看这份工作的源码。首先是怎么把工程跑起来,FlexTensor倚仗TVM做代码生成,所以首先得安装TVM。 首先给出官方网站的安装教程TVM安装流程-从源码安装,最好的安装步骤就是从上面一步步来,正如教程所说,整个安装过程分两个大步骤: 1.从C++代码构建共享库 2.安装语言支持 首先是获取源码到本地并解压: 在写这篇文章时,tvm源码的版本是v0.8.0,下载下来解压之就可以了,我使用的是W
二、怎么解决编译器对多种语言的适配问题 (1)解决方法:把编译器抽象的分为编译器前端,编译器中端,编译器后端,并引入 •编译器前端:接收C/C++/Java等不同语言,进行代码生成,吐出IR •编译器中端:接收IR,进行不同编译器后端可以共享的优化,如常量替换
Compile Keras Models 本文是介绍如何使用Relay部署keras模型的入门教程。 首先,应该安装keras。 还需要Tensorflow,因为它被用作keras的默认后端。 一个快速的解决方案是通过pip安装 pip install -U keras --user pip install -U tensorflow --user 或请参阅官方网站https://keras.io/#installation import tvm from tvm import te
0x0. 介绍 大家好呀,在过去的半年到一年时间里,我分享了一些算法解读,算法优化,模型转换相关的一些文章。这篇文章是自己开启学习深度学习编译器的第一篇文章,后续也会努力更新这个系列。这篇文章是开篇,所以我不会具体讲解TVM的知识,更多的是介绍一下我自己眼中的深度学习编译器是什么?以及为什么我要选择学习TVM,最后我也会给出一个让读者快速体验TVM效果的一个开发环境搭建的简要教程。 0x1. 为什么需要深度学习编译器? 深度学习编译器这个词语,我们可以先拆成两个部分来看。 首先谈谈深度学习领域。从训练框架