【TVM源码学习笔记】0 TVM安装

环境:vmware 16 pro + ubuntu20.04

1. LLVM+CLANG安装

源码安装llvm比较复杂,而且在国内很难下载llvm源码以及子仓源码,所以直接使用llvm社区发布的二进制包安装。下载地址:https://github.com/llvm/llvm-project/releases/tag/llvmorg-13.0.0

下载后直接使用tar命令解压

tar vxf clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04.tar.xz

为了使用方便,解压后可以使用mv命令改名为llvm

mv clang+llvm-13.0.0-x86_64-linux-gnu-ubuntu-20.04 llvm

在/etc/profile中这是llvm环境变量

export LLVM_HOME=/home/study/llvm
export PATH=$LLVM_HOME/bin:$PATH

执行命令

source /etc/profile

使配置生效。然后使用clang --version检查下是否安装成功:

study@ubuntu:~/llvm/bin$ clang --version
clang version 13.0.0 (https://github.com/llvm/llvm-project/ 24c8eaec9467b2aaf70b0db33a4e4dd415139a50)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/study/llvm/bin

2. TVM编译安装

2.1 TVM源码下载

TVM源码地址为 https://github.com/apache/tvm。我的网络从github clone代码非常慢,基本是下载一半就断链了,所以使用的是gitee的镜像源

git clone https://gitee.com/apache/tvm.git

完整的代码还需要下载子仓。同样因为网络问题,直接clone下载这些子仓几乎不可能成功。我是将这些子仓在gitee上都fork了一份,然后将tvm的子仓配置中对应的地址修改为gitee上fork的地址。

clone下来的tvm源码中.gitmodules和.git/config中有子仓的地址配置,将这些地址修改为对应的gitee fork地址,例如我的环境中的.git/config配置:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://gitee.com/apache/tvm.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
        remote = origin
        merge = refs/heads/main
[submodule "3rdparty/cutlass"]
        active = true
        url = https://github.com/NVIDIA/cutlass
[submodule "dlpack"]
        active = true
        url = https://gitee.com/zxros10/dlpack.git
[submodule "dmlc-core"]
        active = true
        url = https://gitee.com/zxros10/dmlc-core.git
[submodule "3rdparty/libbacktrace"]
        active = true
        url = https://gitee.com/zxros10/mirror-tlc-pack-libbacktrace.git
[submodule "3rdparty/rang"]
        active = true
        url = https://gitee.com/zxros10/mirror-rang.git
[submodule "3rdparty/vta-hw"]
        active = true
        url = https://gitee.com/zxros10/tvm-vta.git

注意.git/config和.gitmodules中都要修改。修改后下载子仓

git submodule init
git submodule update

2.2 编译环境准备

安装编译依赖包

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

2.3 tvm源码编译

mkdir build
cp cmake/config.cmake build

config.cmake中配置了需要编译的组件,因为我的环境没有GPU,虚拟机环境也用不GPU,所以确定config.cmake中set(USE_CUDA OFF)。同时set(USE_GRAPH_EXECUTOR ON)、set(USE_PROFILER ON)、set(USE_RELAY_DEBUG ON)。这些配置需要根据开发环境和需求决定打开还是关闭。特别需要注意的是,如果要使用llvm必须将set(USE_LLVM OFF)的值修改为你的llvm-config文件路径,例如我的设置是set(USE_LLVM /home/study/llvm/bin/llvm-config)

然后在build目录下执行编译命令

cd build
cmake ..
make -j4

2.4 设置TVM环境变量

在~/.bashrc中使用tvm代码路径设置TVM_HOME环境变量,并将tvm的python库路径加入PYTHONPATH。例如我的配置:

export TVM_LOG_DEBUG="ir/transform.cc=1;relay/ir/transform.cc=1"
export TVM_HOME=$HOME/tvm/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}

然后执行

source ~/.bashrc

2.5 测试安装是否成功

执行命令

study@ubuntu:~/tvm/tvm$ python3
Python 3.8.10 (default, Nov 26 2021, 20:14:08) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tvm
>>> 

如果没有错误回显,表示安装成功。如果有报错找不到某个module,可以使用pip3 install安装即可

参考

【clang+LLVM】环境配置 二进制包安装步骤(release) 基于ubuntu18.04的llvm10.0.0
https://blog.youkuaiyun.com/qq_45335399/article/details/112715897

TVM-安装说明
https://tvm.apache.org/docs/install/from_source.html
https://blog.youkuaiyun.com/zghforever/article/details/117748979

git中submodule修改子模块的git地址
https://blog.youkuaiyun.com/liaoyanyunde/article/details/114883670

### TVM 安装指南 #### 环境准备 在安装 TVM 之前,需要确保开发环境中已经具备必要的依赖项。这些依赖通常包括编译器工具链、Python 开发包以及一些特定的库文件。对于 Linux 用户来说,可以通过包管理器来安装基础依赖;而对于 Windows 用户,则建议使用 WSL 或者 MinGW 工具链。 - **Linux/macOS**: 使用 `apt` 或 `brew` 安装基本依赖[^1]。 - **Windows**: 推荐通过 WSL2 配置 Ubuntu 子系统来进行安装[^2]。 #### 设置构建路径 TVM 提供了一个灵活的方式来定义其构建目录的位置。这可以通过设置环境变量 `TVM_BUILD_PATH` 实现: ```bash export TVM_BUILD_PATH=/path/to/custom/build/directory ``` 如果没有显式设定该变量,默认情况下 Makefile 将会尝试使用位于项目根目录下的 `build` 文件夹作为工作区[^1]。值得注意的是,此路径既可以是一个相对地址也可以是绝对定位,并支持多个以空格分割的目标位置声明。 #### 编译过程概述 以下是基于源码的一般化编译流程描述(适用于大多数类 Unix 平台),具体命令可能会因操作系统差异有所调整: 1. 获取最新版代码仓库并初始化子模块: ```bash git clone --recursive https://github.com/apache/tvm.git tvm cd tvm ``` 2. 创建专用的构建空间(如果尚未通过前述方法预设的话): ```bash mkdir build && cd build ``` 3. 利用 CMake 准备生成规则, 这里我们假设采用 Ninja 后端加速增量更新速度: ```cmake cmake .. -G"Ninja" ``` 4. 执行实际组装操作: ```bash ninja ``` 针对某些高级特性比如神经网络推理优化框架(NNPACK),还需要额外执行如下步骤以便启用它们的支持功能[^3]: ```bash git clone --recursive https://github.com/Maratyszcza/NNPACK.git cd NNPACK sed -i "s|gnu99|gnu99 -fPIC|g" CMakeLists.txt sed -i "s|gnu++11|gnu++11 -fPIC|g" CMakeLists.txt mkdir build && cd build cmake -G Ninja -D BUILD_SHARED_LIBS=ON .. ninja sudo ninja install echo "/usr/local/lib" >> /etc/ld.so.conf.d/nnpack.conf sudo ldconfig ``` #### 特殊注意事项 尽管官方文档提供了详尽指导,但在跨平台移植过程中仍可能出现兼容性挑战。例如,在 Windows 上部署 GPU 加速版本时遇到 RPC 功能失效的问题已被报告至社区论坛待进一步修复[^2]。因此,当考虑此类复杂场景应用前应充分评估潜在风险因素。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值