本文面向 tvm 开发者,粗略介绍一下 tvm 的安装过程
1. 开发环境
系统:ubuntu 20.04,由于中文生态兼容的比较好,比如输入法,有道云笔记,所以这个系统本身也是我的主力开发系统
tvm 版本:v0.10.0,如果你的不是这个版本,记得 checkout 一下,否则下面的依赖可能不全,对于学习 tvm 来说,v0.10.0 版本其实够了
2. 依赖安装
以我的 dockerfile 为例,可以参考
另外,大家也可以跳过这一步,直接用我弄好的镜像:docker pull pipul/tvm_ci_cpu
FROM ubuntu:20.04 ENV TZ=Europe/Kiev RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone COPY ./apt /etc/apt COPY ./etc/sudoers.d/90-nopasswd-sudo /etc/sudoers.d/90-nopasswd-sudo COPY ./.bashrc /etc/bashrc RUN apt-get update RUN apt-get install -y vim sudo git g++ pip llvm RUN apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev RUN pip install onnx numpy attrs decorator Pillow psutil scipy relpath typing-extensions tornado 'xgboost>=1.1.0' cloudpickle
有几个不是必须的:
- COPY ./apt 主要是替换了163的源,不然软件安装太慢
- /etc/sudoers.d/90-nopasswd-sudo 是 tvm 编译的时候必须依赖的,但是 docker 镜像 ubuntu:20.04 是默认没有的,所以需要搞下
- COPY ./.bashrc 可以忽略
假设构建好的镜像为:${tvm-docker-image}
一旦镜像构建好了之后,后续编译和开发 tvm,都在镜像内完成
3. 配置和编译
1)下载源码
git clone –recursive https://github.com/apache/tvm tvm
下载完源码之后,我们需要进入镜像中编译,镜像就是我们上面 build 好的镜像
进入方法:
./docker/bash.sh pipul/tvm_ci_cpu
即可
由于 ubuntu 20.04 的cmake版本太低,但是 tvm 最新版本必须依赖 cmake 3.18,因此我们学习 tvm 的话可以切换到 v0.10.0 版本
git checkout v0.10.0
然后解决仓库的依赖问题:
git submodule init
git submodule update
git submodule 依赖必须全部成功,否则后面会出很多其他问题
2)配置
mkdir -p build
cd build
cp ../cmake/config.cmake .
由于 gpu 环境配置还是比较复杂的,需要安装cuda一堆驱动,目前我们学习 tvm,暂时不一定强依赖 cuda,我们可以先用 llvm
- gpu: cuda
- cpu: llvm
cuda和llvm都是最后生成目标代码的时候才会用到,属于 tvm stack 里面的 backend 概念
另外,由于 ubuntu 20.04,默认安装的 llvm 是 llvm-10,这个配置有点特殊(官方文档也有描述),
set(USE_LLVM OFF) 改成:
set(USE_LLVM llvm-config-10)
3)编译
cmake -D CMAKE_BUILD_TYPE=Debug .. // Debug 模式主要是为了方便分析源码
make -j32
4)安装
编译完成了之后,必须要安装:
cd python
python3 setup.py install –user
for developers:
由于开发者会改代码,为了调试方便,我们可以把当前路径加入到PYTHONPATH里面
export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
4. 开发 & 调试
1)开发
直接使用镜像即可
./docker/bash.sh pipul/tvm_ci_cpu
2)调试
有3种方式:
- printf 加 log,修改 tvm 代码,进行调试
- 单步调试 tvm,可以使用 pdb 功能,比如 python -m pdb test.py
- 另外,tvm 中很多代码有 VLOG 日志,调试的时候可以加上 TVM_LOG_DEBUG=DEFAULT=2,参考:https://tvm.apache.org/docs/dev/how_to/debugging_tvm.html
5. 其他问题
2种可能:
- 要么是你llvm版本没搞对,set(USE_LLVM OFF) 配置不对
- 你编译完了,没有执行 python setup.py install –user
2)CMake Error at /usr/share/cmake-3.16/Modules/ExternalProject.cmake:2630 (message): No download info given for ‘project_libbacktrace’ and its source directory:
由于 tvm 的依赖,在 git submodule update 时可能会失败,大概率是 ssl 问题,关闭即可:
git config http.sslVerify “false”
3)xx