从源码安装#

这个页面给出了如何在各种系统上从头开始构建和安装 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

请注意,apt上的CMake版本可能不是最新的;可能需要直接从 Kitware 的第三方APT仓库 安装。

在Fedora/CentOS及其相关操作系统上,请使用以下命令:

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

如果您在搭载M1处理器的macOS上,可能需要使用conda来管理构建过程中的依赖项。具体来说,您可能需要使用 Miniforge,以确保通过pip获取的依赖项与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 冲突。

    • 在支持的平台上,Ccache 编译器包装器 可能有助于减少TVM构建时间。

      • 保留 build/config.cmake 中的 USE_CCACHE=AUTO。如果找到CCache,将自动使用它。

      • Ccache 的 Masquerade 模式。通常在Ccache安装过程中启用。要让 TVM 使用 Masquerade 模式下的 Ccache,只需在配置 TVM 构建系统时指定正确的 C/C++ 编译器路径。例如: cmake -DCMAKE_CXX_COMPILER=/usr/lib/ccache/c++ ...

      • 将Ccache作为CMake的C++编译器前缀。在配置TVM构建系统时,设置CMake变量 CMAKE_CXX_COMPILER_LAUNCHER 为适当的值。例如: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 支持通过 cmake 使用 MSVC 进行构建。您需要获取 Visual Studio 编译器。最低要求的 VS 版本是 Visual Studio Enterprise 2019 (注意:根据 GitHub Actions 的 Windows 2019 Runner 进行测试,因此请查看该页面以获取完整详情。我们建议按照:ref:build-with-conda 来获取必要的依赖项并激活 tvm-build 环境。然后您可以运行以下命令进行构建

mkdir build
cd build
cmake ..
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
  • If you want to use tvmc: the TVM command line driver.

pip3 install --user typing-extensions psutil scipy
  • 如果你想使用 RPC Tracker

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

pip3 install --user tornado psutil 'xgboost>=1.1.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.1.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 构建。