TVM:源码编译安装

2023-11-13

TVM:Linux源码编译安装

笔者环境:

OS:Ubuntu 18.04

CMake:3.10.2

gcc:7.5.0

cuda:11.1

编译安装过程总览

本文将简介 tvm 的编译安装过程,包含两个步骤:

  1. 通过C++代码构建共享库
  2. 设置相关的语言包(如Python包)

源码获取

官网教程提供了两种源码获取方式:

  1. 通过下载页面直接下载

  2. 通过 github 仓库来下载

    git clone --recursive https://github.com/apache/tvm tvm
    

    注意一定要有 --recursive 参数,保证子模块正常下载。

构建共享库

构建 tvm 共享库,在我们 Linux 系统上即 libtvm.solibtvmruntime.so 。也可以只构建运行时库 libtvmruntime.so ,在要被部署的远程边缘设备(如树莓派、移动手机等)上,我们通常只需要安装运行时库。这也会在后面介绍远程边缘部署时提到。总之现在,在我们的主机上,我们先完全安装 tvm。

准备工作

官方给出的安装 tvm 的最小要求如下:

  • 一个支持C++ 14 的编译器 (如g+±5 or higher)
  • CMake 3.5 or higher
  • 强烈建议安装 llvm
  • Python 3.7 / 3.8 (Python 3.9 暂不支持)
  • 如果要使用CUDA,CUDA toolkit version >= 8.0

安装最小依赖

安装上述最小要求的命令(ubuntu / debian):

sudo apt-get update
sudo apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev

检查一下CMake,如果没有的话,到该下载页面下载。

llvm

llvm 虽然不是强制要求,但我们通常都是需要的,强烈建议大家安装。过程也很简单,从这个下载页面选择适合我们设备和系统的 pre-built 版本(压缩文件 .xz)下载并解压即可:

wget http://releases.llvm.org/x.x.x/clang+llvm-x.x.x-x86_64-linux-gnu-ubuntu-xx.xx.tar.xz

tar -xf clang+llvm-x.x.x-x86_64-linux-gnu-ubuntu-xx.xx.tar.xz

解压完成后进入解压目录,找到 bin 目录下的 llvm-config 文件,记下其路径,一会儿要用。

开始编译构建

准备工作完成之后我们开始编译构建。

首先进入到我们刚才下载的 tvm 源码目录下,新建 build 目录,将 cmake 目录下的 config.cmake 拷贝的 build 目录下:

cd tvm
mkdir build
cp cmake/config.cmake build/

然后按需修改 config.cmake 文件:

  • 如果要时候用某些后端和库(如CUDA, OpenCL, RCOM, METAL, VULKAN,等)。这里以CUDA为例,将 set(USE_CUDA OFF) 修改为 set(USE_CUDA ON),其他库同理。

  • 为了帮助调试,需要启用嵌入式图形执行器和调试功能 set(USE_GRAPH_DEBUG ON)set(USE_PROFILER ON)

  • 如果要调试 IR,要启用 set(USE_RELAY_DEBUG ON) ,并设置环境变量:

    export TVM_LOG_DEBUG="ir/transform.cc=1;relay/ir/transform.cc=1"
    
  • 使用 LLVM,这里要使用到我们刚才记下的 LLVM 路径了,设置 set(USE_LLVM /path/to/your/llvm/bin/llvm-config)

config.cmake 修改完成后,我们开始构建 tvm 及相关库:

cd build
cmake ..
make -j4

Python 包

Python 会根据环境变量 PYTHONPATH 寻找库文件,在 ~/.bashrc中设置这个环境变量,其中 /path/to/tvm 是上文 tvm 目录的绝对路径。

export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}

python 依赖安装

  • 必需依赖

    pip3 install --user numpy decorator attrs
    
  • 如果要使用 RPC 追踪器

    pip3 install --user tornado
    
  • 如果要使用 auto-tuning 模块

    pip3 install --user tornado psutil xgboost cloudpickle
    

测试

这里我们用 Google Test 来进行测试,首先先安装 GTest(不要和 tvm 装在一起,建议另找一个目录):

git clone https://github.com/google/googletest
cd googletest
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install

安装完成后,在 tvm 安装目录下执行测试:

./tests/scripts/task_cpp_unittest.sh

顺利完成无报错的话,即告 tvm 安装完成。

Ref:

https://tvm.apache.org/docs/install/from_source.html#developers-get-source-from-github

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TVM:源码编译安装 的相关文章

随机推荐

  • SpringBoot如何将项目打成jar包,并运行jar包呢?

    转自 SpringBoot如何将项目打成jar包 并运行jar包呢 下文笔者讲述springboot将项目打成jar包的方法分享及运行jar包的方法分享 如下所示 实现思路 1 pom中进行相应的build配置 2 运行maven inst
  • 位运算说明

    文章目录 参考文档 表格 来自百度百科 按位与运算符 按位或运算符 异或运算符 取反运算符 左移运算符 lt lt 右移运算符 gt gt 无符号右移运算符 gt gt gt 复合赋值运算符 不同长度的数据进行位运算 参考文档 百度百科 h
  • Windows记事本编码反汇编分析

    转载自 liam page 网上有一个流传多年的段子 这个段子大致是说 若你在简体中文版本的 Windows 系统下 用系统自带的记事本程序 以默认的 ANSI 编码保存 联通 两个字 那么重新打开后 联通 二字就消失了 如果我没记错的话
  • 【JDBC】idea添加mysql-jar包(很轻松)

    添加jar包 官网下载jar包 idea导入jar包 检查 官网下载jar包 官网地址 MySQL Download Connector J 下载完之后解压 打开文件夹 直到见到我们需要的jar包 idea导入jar包 我们复制刚才下载好的
  • 【ERROR】AssertionError: The NVIDIA driver on your system is too old (found version). Please upd

    错误信息 AssertionError The NVIDIA driver on your system is too old found version 10000 Please update your GPU driver by dow
  • spark boot封装,多线程高效执行

    1 简介 众所周知 spark是一个分布式计算引擎 可以将计算数据分不到不同的节点进行计算 但是往往我们的业务都是比较复杂 每天定时跑的时候不只是一个job 可能是有很多的job 但是引擎本身是串行化的 而且对于经验不深的同学 一个业务可能
  • redis中关闭rdb跟aof

    当往redis中导入数据时 有时会出现redis server went away的情况 出现这一问题的原因有 导入的数据量太大 而内存不够 即内存1G 但数据有2G 此时的redis服务需要重启 可能是同一时间导入的数据太多 导致数据持久
  • CSS实现半透明边框

    CSS3实现半透明边框 一 往期文章 二 CSS hsla 函数 四 代码 三 效果图 一 往期文章 CSS3回炉计划 编码技巧 如何实现半透明边框 边框中显示背景 二 CSS hsla 函数 hsla 函数使用色相 饱和度 亮度 透明度来
  • 6.130 字符串指针和字符数组的区别

    字符串指针 1 字符串指针变量存储在栈区 其指向的字符串存储在常量区 2 字符串指针变量存储的字符串首字符的地址 并非整个字符串 3 不能对指向的字符串做任何修改 char 本质为 char const 4 字符串指针变量可以做 操作 字符
  • sed的一些用法总结

    一 sed删除中文 LANG C sed r e s x81 xFE x40 xFE g e s g e s g 删除 中文 和 和 面LANG C要加上否则报错 sed后面要使用双引号 区别使用单引号 x81 xFE x40 xFE 代表
  • 我国常用的投影坐标系_ArcGIS中的坐标系

    点击上方 蓝字 带你去看小星星 今天将解决以下问题 1 分清地理坐标系和投影坐标系 2 什么地区选什么带号 3 如何使用有关 坐标系 的三个工具 今天的内容有点多 咱一次性说明白 可以先收藏 之后遇到再翻也方便 暗示收藏 转发 再看 Arc
  • 关于蓝桥杯的乱七八糟的话(经验、心得、建议、技巧)

    参赛经验 心得 先介绍一下自身情况 我参加的是C C B组 所在的赛区是江苏赛区 参加过三次蓝桥杯 最好的成绩是国三 没错我就是个小辣鸡 蓝桥杯省赛题目一般有结果填空 代码填空和程序题三种题型 但是第十届已经没有了代码填空 填空题只要结果
  • leaftlet 中Polygon的使用属性

    绘制一个面 var latlngs 37 109 05 41 109 03 41 102 05 37 102 04 var polygon L polygon latlngs color red addTo map map fitBound
  • videopose3d制作自己的视频转换

    videopose3d制作自己的视频转换 最近学了深度学习 对其中的人体姿态检测和识别感兴趣 但是网上包括官方网站的都是对源码的解读 没有一个是利用自己的视频进行姿态检测和渲染的 因此自己试着按照官方的in the wild教程试了一下 很
  • Python开发图形可视化界面程序(一)

    前言 近来使用Python开发了一些简单的辅助脚本 发现这真的是一门很有趣的语言 于是乎 便想着使用python来开发一些具有图形可视化界面 GUI 的程序 对于python来说 支持其开发GUI可视化程序的框架非常之多 简直让人眼花燎原
  • bugfree pdo mysql扩展模块_windows平台bugfree3.0.3搭建心得(nginx+php+mysql+bugfree+RunHiddenConsole)...

    之前没做过windows服务器管理 我的认识还停在个人用户操作系统的认知上 这次搭建bugfree环境 挺多麻烦的 在安装之前 我百度的bugfree搭建大多是使用xampp集成环境的安装方法 然后我就照做 下载xampp 然后安装到系统c
  • C语言实现两数相加的三种方法

    笔试题里面看到的 总结一下 分享给需要的小伙伴 一 原始办法 这种方法最直观明了 int add int x int y return x y 二 利用printf的返回值 这个操作鲜为人知 include
  • linux域名解析

    linux域名解析 首先确保你的电脑可以连上网 服务端和客户端能够连通 1 本地解析 优先级高 在服务端中 ping www baidu com 找出ip 在客户端中的浏览器中搜索ip地址就可以上网 但是ip地址记起来非常不方便 所以这里用
  • 网贷风控体系之-风控模型

    网贷风控体系之 风控模型 大数据风控模型主要分为两类 反欺诈模型 交叉验证 聚类分析 黑灰名单 二元好坏模型 准入阶段 授信额度期限利率模型 评分卡模型 LR XGBoost 贷中阶段 风险变化评估 风险预警 贷后阶段 催收时机 催收方法
  • TVM:源码编译安装

    TVM Linux源码编译安装 笔者环境 OS Ubuntu 18 04 CMake 3 10 2 gcc 7 5 0 cuda 11 1 编译安装过程总览 本文将简介 tvm 的编译安装过程 包含两个步骤 通过C 代码构建共享库 设置相关