从源码安装
此页面提供有关如何从源码构建和安装 TVM 包的说明。
步骤 1. 安装依赖项
Apache TVM 需要以下依赖项
CMake (>= 3.24.0)
LLVM (推荐 >= 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
步骤 2. 从 Github 获取源码
您也可以选择从 github 克隆源码仓库。
git clone --recursive https://github.com/apache/tvm tvm
注意
使用 --recursive
标志克隆 TVM 仓库非常重要,这将自动克隆子模块。如果您忘记使用此标志,您可以通过在 TVM 仓库的根目录中运行 git submodule update --init --recursive
来手动克隆子模块。
步骤 3. 配置和构建
创建一个构建目录并运行 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
可能在所有系统上都不可用,请将其替换为您系统上的核心数
成功构建应在 build/
目录下生成 libtvm
和 libtvm_runtime
。
离开构建环境 tvm-build-venv
,有两种方法将成功构建安装到您的环境中
通过环境变量安装
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
如果您想使用 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
构建。