从源码安装#

这个页面给出了如何在各种系统上从头开始构建和安装 TVM 软件包的说明。它包括两个步骤:

  1. 首先从 C++ 代码中构建共享库(linux 为 libtvm.so,macOS 为 libtvm.dylib,windows 为 libtvm.dll)。

  2. 语言包的设置(如 Python 包)。

要开始使用,请从 下载页面 下载 tvm 源代码。

开发者:从 Github 获取源码#

你也可以选择从 github 克隆源码 repo。重要的是,要用 --recursive 选项来克隆子模块。

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

对于使用 github 工具的 windows 用户,你可以打开 git shell,并输入以下命令。

git submodule init
git submodule update

构建共享库#

我们的目标是建立共享库:

  • 在 Linux 上,目标库是 libtvm.solibtvm_runtime.so

  • 在 macOS 上,目标库是 libtvm.dyliblibtvm_runtime.dylib

  • 在 Windows 上,目标库是 libtvm.dlllibtvm_runtime.dll

也可以只 构建运行时的 库。

TVM 库的最低构建要求是:

  • A recent C++ compiler supporting C++ 17, at the minimum
    • GCC 7.1

    • Clang 5.0

    • Apple Clang 9.3

    • Visual Studio 2019 (v16.7)

  • CMake 3.18 or higher

  • 我们强烈建议使用 LLVM 构建,以启用所有的功能。

  • 如果你想使用 CUDA,需要 CUDA 工具箱版本 >=8.0。如果你从旧版本升级,请确保在安装后清除旧版本并重新启动。

  • 在 macOS 上,你可能想安装 Homebrew 以方便安装和管理依赖性。

  • Python 也是必需的。避免使用 Python 3.9.X+,它不 支持。然而,3.7.X+ 和 3.8.X+ 应该得到良好的支持。

要在 Ubuntu/Debian 等 linux 操作系统上安装这些最小的先决条件,请执行(在终端):

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

Note that the version of CMake on apt may not be sufficiently up to date; it may be necessary to install it directly from Kitware’s third-party APT repository.

On Fedora/CentOS and related operating systems use:

sudo dnf update
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y python-devel ncurses-compat-libs zlib-devel cmake libedit-devel libxml2-devel

使用 Homebrew 为运行英特尔或 M1 处理器的 macOS 安装所需的依赖项。你必须遵循 Homebrew 指定的安装后步骤,以确保正确地安装和配置这些依赖项:

brew install gcc git cmake
brew install llvm
brew install python@3.8

If you are on macOS with an M1 Processor you may need to use conda to manage dependencies while building. Specifically you may need, Miniforge to ensure that the dependencies obtained using pip are compatible with M1.

brew install miniforge
conda init
conda create --name tvm python=3.8
conda activate tvm

我们使用 cmake 来构建库。TVM 的配置可以通过编辑 config.cmake 和/或在命令行传递 cmake 标志来修改:

  • 首先,检查你系统中的 cmake。如果你没有 cmake,你可以从 官方网站 获得最新版本。

  • 首先创建 build 目录,将 cmake/config.cmake 复制到该目录。

    mkdir build
    cp cmake/config.cmake build
    
  • 编辑 build/config.cmake 来定制编译选项

    • 在 macOS 上,对于某些版本的 Xcode,你需要在 LDFLAGS 中加入 -lc++abi,否则会出现链接错误。

    • set(USE_CUDA OFF) 改为 set(USE_CUDA ON) 以启用 CUDA 后台。对其他你想构建的后端和库(OpenCL、RCOM、METAL、VULKAN …)做同样的处理。

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

    • 要用 IR 进行调试,set(USE_RELAY_DEBUG ON) 并设置环境变量 TVM_LOG_DEBUG

      export TVM_LOG_DEBUG="ir/transform.cc=1,relay/ir/transform.cc=1"
      
  • TVM requires LLVM for CPU codegen. We highly recommend you to build with the LLVM support on.

    • 使用 LLVM 构建时需要 LLVM 4.0 或更高版本。注意,默认的 apt 中的 LLVM 版本可能低于 4.0。

    • 由于 LLVM 从源代码构建需要很长时间,你可以从 LLVM 下载页面 下载预构建的 LLVM 版本。

      • 解压到某个位置,修改 build/config.cmake,加入 set(USE_LLVM /path/to/your/llvm/bin/llvm-config)

      • 你也可以直接设置 set(USE_LLVM ON),让 cmake 搜索可用的 LLVM 版本。

    • 你也可以使用 LLVM Nightly Ubuntu 构建版

      • 注意,apt-package 会将 llvm-config 附加到版本号上。例如,如果你安装了 LLVM 10 软件包,请设置 set(USE_LLVM llvm-config-10)

    • 如果你是 PyTorch 的用户,建议设置 (USE_LLVM "/path/to/llvm-config --link-static")set(HIDE_PRIVATE_SYMBOLS ON),以避免 TVM 和 PyTorch 使用的不同版本 LLVM 之间的潜在 symbol 冲突。

    • On supported platforms, the Ccache compiler wrapper may be helpful for reducing TVM’s build time. There are several ways to enable CCache in TVM builds:

      • Leave USE_CCACHE=AUTO in build/config.cmake. CCache will be used if it is found.

      • Ccache’s Masquerade mode. This is typically enabled during the Ccache installation process. To have TVM use Ccache in masquerade, simply specify the appropriate C/C++ compiler paths when configuring TVM’s build system. For example: cmake -DCMAKE_CXX_COMPILER=/usr/lib/ccache/c++ ....

      • Ccache as CMake’s C++ compiler prefix. When configuring TVM’s build system, set the CMake variable CMAKE_CXX_COMPILER_LAUNCHER to an appropriate value. E.g. cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ....

  • 然后我们可以建立 tvm 和相关的库。

    cd build
    cmake ..
    make -j4
    
    • 你也可以用 Ninja 构建系统来代替 Unix Makefiles。它可以比使用 Makefiles 更快地构建。

    cd build
    cmake .. -G Ninja
    ninja
    
    • 在顶层的 tvm 目录下还有一个 makefile,可以自动完成其中的几个步骤。它将创建构建目录,将默认的 config.cmake 复制到构建目录,运行 cmake,然后运行 make。

      构建目录可以使用环境变量 TVM_BUILD_PATH 来指定。如果 TVM_BUILD_PATH 没有设置,makefile 会假定使用 tvm 里面的 build 目录。TVM_BUILD_PATH 指定的路径可以是绝对路径或相对于 tvm 基本目录的路径。TVM_BUILD_PATH 也可以设置为一个空格分隔的路径列表,在这种情况下,所有列出的路径都将被构建。

      如果使用另一个编译目录,那么环境变量 TVM_LIBRARY_PATH 应该在运行时设置,指向编译的 libtvm.solibtvm_runtime.so 的位置。如果没有设置,tvm 将寻找相对于 tvm python 模块的位置。与 TVM_BUILD_PATH 不同,这必须是一个绝对路径。

    # Build in the "build" directory
    make
    
    # Alternate location, "build_debug"
    TVM_BUILD_PATH=build_debug make
    
    # Build both "build_release" and "build_debug"
    TVM_BUILD_PATH="build_debug build_release" make
    
    # Use debug build
    TVM_LIBRARY_PATH=~/tvm/build_debug python3
    

如果一切顺利,我们可以去 Python 软件包的安装

用 Conda 环境构建#

Conda 是一种非常方便的方式,可以获得运行 TVM 所需的必要依赖。首先,如果你的系统中还没有 conda,请按照 conda 的安装指南 来安装 miniconda 或 anaconda。在 conda 环境下运行以下命令:

# Create a conda environment with the dependencies specified by the yaml
conda env create --file conda/build-environment.yaml
# Activate the created environment
conda activate tvm-build

上述命令将安装所有必要的构建依赖项,如 cmake 和 LLVM。然后你就可以运行最后一节中的标准构建过程。

如果你想在 conda 环境之外使用编译后的二进制文件,你可以将 LLVM 设置为静态链接模式 set(USE_LLVM "llvm-config --link-static")。这样一来,生成的库就不会依赖于 conda 环境中的动态 LLVM 库。

上面的说明显示了如何使用 conda 来提供必要的构建依赖项来构建 libtvm。如果你已经在使用 conda 作为你的软件包管理器,并且希望直接将 tvm 作为 conda 的软件包来构建和安装,你可以按照下面的说明进行:

conda build --output-folder=conda/pkg  conda/recipe
# Run conda/build_cuda.sh to build with cuda enabled
conda install tvm -c ./conda/pkg

构建在 Windows 上#

TVM support build via MSVC using cmake. You will need to obtain a visual studio compiler. The minimum required VS version is Visual Studio Enterprise 2019 (NOTE: we test against GitHub Actions’ Windows 2019 Runner, so see that page for full details. We recommend following 用 Conda 环境构建 to obtain necessary dependencies and get an activated tvm-build environment. Then you can run the following command to build

mkdir build
cd build
cmake -A x64 -Thost=x64 ..
cd ..

上述命令在构建目录下生成了解决方案文件。然后你可以运行以下命令来构建

cmake --build build --config Release -- /m

建立 ROCm 支持#

目前,ROCm 只支持 linux,所以所有说明都是在考虑到 linux 的情况下编写的。

  • 设置 set(USE_ROCM ON),将 ROCM_PATH 设为正确的路径。

  • 你需要首先从 ROCm 安装 HIP 运行时。确保安装系统中已经安装了 ROCm。

  • 安装最新的 LLVM 稳定版本(v6.0.1),以及 LLD,确保 ld.lld 可以通过命令行使用。

Python 软件包的安装#

TVM 包#

根据你的开发环境,你可能想使用一个虚拟环境和软件包管理器,如 virtualenvconda,来管理你的 Python 软件包和依赖关系。

Python 软件包位于 tvm/python,有两种方法来安装软件包:

方法 1

这种方法是 推荐给可能改变代码的开发者 的。

设置环境变量 PYTHONPATH 来告诉 python 在哪里找到这个库。例如,假设我们在 /path/to/tvm 目录下克隆了 tvm,那么我们可以在 ~/.bashrc 中添加以下一行。一旦你拉出代码并重建项目,这些变化将立即反映出来(不需要再次调用 setup

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

通过 setup.py 安装 TVM 的 python 绑定:

# install tvm package for the current user
# NOTE: if you installed python via homebrew, --user is not needed during installaiton
#       it will be automatically installed to your user directory.
#       providing --user flag may trigger error during installation in such case.
export MACOSX_DEPLOYMENT_TARGET=10.9  # This is required for mac to avoid symbol conflicts with libstdc++
cd python; python setup.py install --user; cd ..

Python 依赖#

注意,如果你要安装到一个受管理的本地环境,如 virtualenv,则不需要 --user flag。

  • 必要的依赖性:

pip3 install --user numpy decorator attrs
  • 如果你想使用 RPC Tracker

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

pip3 install --user tornado psutil 'xgboost<1.6.0' cloudpickle

注意在 M1 macs 上,你可能在安装 xgboost / scipy 时遇到麻烦。scipy 和 xgboost 需要安装一些额外的依赖,包括 openblas 及其依赖。使用下面的命令来安装 scipy 和 xgboost 以及所需的依赖和配置。一个变通的方法是执行以下命令:

brew install openblas gfortran

pip install pybind11 cython pythran

export OPENBLAS=/opt/homebrew/opt/openblas/lib/

pip install scipy --no-use-pep517

pip install 'xgboost<1.6.0'

安装 Contrib 库#

启用 C++ 测试#

我们使用 Google Test 来驱动 TVM 中的 C++ 测试。安装 GTest 的最简单方法是从源码开始。

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

安装 GTest 后,可以用 ./tests/scripts/task_cpp_unittest.sh 构建和启动 C++ 测试,或者直接用 make cpptest 构建。