深入浅出 tvm – (2) 搭建开发环境

本文面向 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
有几个不是必须的:
  1. COPY ./apt 主要是替换了163的源,不然软件安装太慢
  2. /etc/sudoers.d/90-nopasswd-sudo 是 tvm 编译的时候必须依赖的,但是 docker 镜像 ubuntu:20.04 是默认没有的,所以需要搞下
  3. 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
  1. gpu: cuda
  2. 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种方式:
  1. printf 加 log,修改 tvm 代码,进行调试
  2. 单步调试 tvm,可以使用 pdb 功能,比如 python -m pdb test.py
  3. 另外,tvm 中很多代码有 VLOG 日志,调试的时候可以加上 TVM_LOG_DEBUG=DEFAULT=2,参考:https://tvm.apache.org/docs/dev/how_to/debugging_tvm.html

5. 其他问题

2种可能:
  1. 要么是你llvm版本没搞对,set(USE_LLVM OFF) 配置不对
  2. 你编译完了,没有执行 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
发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注