从源代码安装#
本页提供了如何从源代码构建和安装 TVM 包的说明。
步骤 1:安装依赖项#
Apache TVM 需要以下依赖项:
CMake (>= 3.24.0)
LLVM (recommended >= 15)
Git
- 至少支持 C++ 17 的最新 C++ 编译器
GCC 7.1
Clang 5.0
Apple Clang 9.3
Visual Studio 2019 (v16.7)
Python (>= 3.8)
(可选)Conda(强烈推荐)
最简便的依赖管理方式是通过 conda,它维护了一套跨平台的工具链,包括 LLVM。要创建包含这些构建依赖的环境,只需使用以下命令:
# make sure to start with a fresh environment
conda env remove -n tvm-build-venv
# create the conda environment with build dependency
conda create -n tvm-build-venv -c conda-forge \
"llvmdev>=15" \
"cmake>=3.24" \
git \
python=3.11
# enter the build environment
conda activate tvm-build-venv
第二步:从 Github 获取源代码#
您也可以选择从 GitHub 克隆源代码仓库。
git clone --recursive https://github.com/apache/tvm tvm
备注
克隆 TVM 仓库时,使用 --recursive
标志非常重要,这将自动克隆子模块。如果忘记使用此标志,可以在 TVM 仓库的根目录中运行 git submodule update --init --recursive
来手动克隆子模块。
第三步:配置与构建#
创建 build 目录并运行 CMake 来配置构建。以下示例展示了如何进行构建。
cd tvm
rm -rf build && mkdir build && cd build
# Specify the build configuration via CMake options
cp ../cmake/config.cmake .
希望特别调整以下标志,将它们附加到配置文件的末尾:
# controls default compilation flags (Candidates: Release, Debug, RelWithDebInfo)
echo "set(CMAKE_BUILD_TYPE RelWithDebInfo)" >> config.cmake
# LLVM is a must dependency for compiler end
echo "set(USE_LLVM \"llvm-config --ignore-libllvm --link-static\")" >> config.cmake
echo "set(HIDE_PRIVATE_SYMBOLS ON)" >> config.cmake
# GPU SDKs, turn on if needed
echo "set(USE_CUDA OFF)" >> config.cmake
echo "set(USE_METAL OFF)" >> config.cmake
echo "set(USE_VULKAN OFF)" >> config.cmake
echo "set(USE_OPENCL OFF)" >> config.cmake
# cuBLAS, cuDNN, cutlass support, turn on if needed
echo "set(USE_CUBLAS OFF)" >> config.cmake
echo "set(USE_CUDNN OFF)" >> config.cmake
echo "set(USE_CUTLASS OFF)" >> config.cmake
备注
HIDE_PRIVATE_SYMBOLS
配置选项,启用了 -fvisibility=hidden
标志。此标志有助于防止 TVM 和 PyTorch 之间潜在的符号冲突。这些冲突是由于框架使用了不同版本的 LLVM 所导致的。
CMAKE_BUILD_TYPE 控制默认的编译选项:
Debug
设置-O0 -g
RelWithDebInfo
设置了-O2 -g -DNDEBUG
(推荐使用)。Release
设置-O3 -DNDEBUG
一旦 config.cmake
文件按照要求编辑完毕,即可通过以下命令启动构建:
cmake .. && cmake --build . --parallel $(nproc)
备注
nproc
可能并非在所有系统上都可用,请将其替换为系统中实际的 CPU 核心数。
成功构建后,应在 build/
目录下生成 libtvm
和 libtvm_runtime
。
退出构建环境 tvm-build-venv
后,有两种方法可以将成功构建的 TVM 安装到你的环境中:
通过环境变量安装
export TVM_HOME=/path-to-tvm
export PYTHONPATH=$TVM_HOME/python:$PYTHONPATH
通过本地项目的 pip 安装
conda activate your-own-env
conda install python # make sure python is installed
export TVM_LIBRARY_PATH=/path-to-tvm/build
pip install -e /path-to-tvm/python
步骤 4:验证安装#
使用具有多语言绑定的编译器基础设施可能会容易出错。因此,强烈建议在使用前验证 Apache TVM 的安装。
步骤 1:定位 TVM Python 包。 以下命令可以帮助确认 TVM 是否已正确安装为 Python 包,并提供 TVM Python 包的位置:
>>> python -c "import tvm; print(tvm.__file__)"
/some-path/lib/python3.11/site-packages/tvm/__init__.py
步骤 2:确认使用的 TVM 库。 当维护多个 TVM 构建或安装时,务必通过以下命令再次检查 Python 包是否使用了正确的 libtvm
:
>>> python -c "import tvm; print(tvm._ffi.base._LIB)"
<CDLL '/some-path/lib/python3.11/site-packages/tvm/libtvm.dylib', handle 95ada510 at 0x1030e4e50>
步骤 3:反射 TVM 构建选项。 当下游应用程序失败时,可能是由于使用了错误的 TVM 提交或错误的构建标志。为了找出问题,以下命令会有所帮助:
>>> python -c "import tvm; print('\n'.join(f'{k}: {v}' for k, v in tvm.support.libinfo().items()))"
... # Omitted less relevant options
GIT_COMMIT_HASH: 4f6289590252a1cf45a4dc37bce55a25043b8338
HIDE_PRIVATE_SYMBOLS: ON
USE_LLVM: llvm-config --link-static
LLVM_VERSION: 15.0.7
USE_VULKAN: OFF
USE_CUDA: OFF
CUDA_VERSION: NOT-FOUND
USE_OPENCL: OFF
USE_METAL: ON
USE_ROCM: OFF
步骤 4:检查设备检测。 有时,了解 TVM 是否能够检测到你的设备会很有帮助,可以通过以下命令进行检查:
>>> python -c "import tvm; print(tvm.metal().exist)"
True # or False
>>> python -c "import tvm; print(tvm.cuda().exist)"
False # or True
>>> python -c "import tvm; print(tvm.vulkan().exist)"
False # or True
请注意,上述命令用于验证本地机器上是否存在实际设备,以确保 TVM 运行时(而非编译器)能够正确执行。然而,TVM 编译器可以在不需要物理设备的情况下执行编译任务。只要必要的工具链(如 NVCC)可用,即使没有实际设备,TVM 也支持交叉编译。
步骤 5:额外的 Python 依赖项#
从源代码构建并不能确保安装所有必要的 Python 依赖项。以下命令可用于安装额外的 Python 依赖项:
必要的依赖项:
pip3 install numpy decorator attrs
如果你想使用 RPC Tracker
pip3 install tornado
如果你想使用自动调优模块
pip3 install tornado psutil 'xgboost>=1.1.0' cloudpickle
高级构建配置#
Ccache#
在支持的平台上,Ccache 编译器包装器 可能有助于减少 TVM 的构建时间,尤其是在使用 cutlass 或 flashinfer 进行构建时。有几种方法可以在 TVM 构建中启用 CCache:
在
build/config.cmake
中保留USE_CCACHE=AUTO
。如果找到 CCache,则会使用它。Ccache 的伪装模式。这通常在 Ccache 安装过程中启用。要让 TVM 在伪装模式下使用 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 ...
。
在 Windows 上构建#
TVM 支持使用 CMake 通过 MSVC 进行构建。你需要获取 Visual Studio 编译器。最低要求的 VS 版本是 Visual Studio Enterprise 2019 (注意:在 GitHub Actions 的 Windows 2019 Runner 上进行测试,因此请参阅该页面以获取完整详细信息)。建议按照 步骤 1:安装依赖项 获取必要的依赖项并激活 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
。
启用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
来构建测试。