首页
/ Apache TVM 从源码编译安装完整指南

Apache TVM 从源码编译安装完整指南

2025-07-06 04:11:44作者:贡沫苏Truman

Apache TVM 是一个开源的机器学习编译器栈,能够将深度学习模型高效地部署到各种硬件后端。本文将详细介绍如何从源码编译安装 TVM,帮助开发者快速搭建开发环境。

环境准备

在开始编译 TVM 之前,需要确保系统满足以下基本要求:

系统依赖

  • CMake:版本不低于 3.24.0,用于构建系统
  • LLVM:推荐使用 15 或更高版本,TVM 的核心编译器组件依赖 LLVM
  • Git:用于获取源代码
  • C++编译器:支持 C++17 标准的现代编译器,包括:
    • GCC 7.1 或更高
    • Clang 5.0 或更高
    • Apple Clang 9.3 或更高
    • Visual Studio 2019 (v16.7) 或更高
  • Python:3.8 或更高版本

推荐使用 Conda 管理环境

使用 Conda 可以简化依赖管理过程,特别是跨平台开发时。以下是创建 Conda 环境的推荐命令:

# 创建新环境前先清理旧环境
conda env remove -n tvm-build-venv

# 创建包含所有构建依赖的环境
conda create -n tvm-build-venv -c conda-forge \
    "llvmdev>=15" \
    "cmake>=3.24" \
    git \
    python=3.11

# 激活环境
conda activate tvm-build-venv

获取源代码

获取 TVM 源代码时,必须使用 --recursive 参数克隆所有子模块:

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

如果忘记使用 --recursive 参数,可以在克隆后手动初始化子模块:

cd tvm
git submodule update --init --recursive

配置与构建

1. 创建构建目录

cd tvm
rm -rf build && mkdir build && cd build
cp ../cmake/config.cmake .

2. 配置构建选项

编辑 config.cmake 文件,添加以下关键配置:

# 设置构建类型(推荐使用 RelWithDebInfo)
echo "set(CMAKE_BUILD_TYPE RelWithDebInfo)" >> config.cmake

# 必须配置 LLVM
echo "set(USE_LLVM \"llvm-config --ignore-libllvm --link-static\")" >> config.cmake
echo "set(HIDE_PRIVATE_SYMBOLS ON)" >> config.cmake

# GPU 后端支持(按需开启)
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 支持(按需开启)
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 等框架间的符号冲突
  • CMAKE_BUILD_TYPE 控制编译优化级别:
    • Debug:不优化,包含调试信息
    • RelWithDebInfo:优化级别 O2,包含调试信息(推荐)
    • Release:最高优化级别 O3

3. 开始构建

cmake .. && cmake --build . --parallel $(nproc)

构建成功后,会在 build/ 目录下生成 libtvmlibtvm_runtime 库文件。

安装 TVM

构建完成后,有两种方式将 TVM 安装到 Python 环境中:

方法一:通过环境变量安装

export TVM_HOME=/path-to-tvm
export PYTHONPATH=$TVM_HOME/python:$PYTHONPATH

方法二:通过 pip 本地安装

conda activate your-own-env
conda install python
export TVM_LIBRARY_PATH=/path-to-tvm/build
pip install -e /path-to-tvm/python

验证安装

安装完成后,建议执行以下验证步骤:

1. 检查 Python 包位置

python -c "import tvm; print(tvm.__file__)"

2. 确认使用的 TVM 库

python -c "import tvm; print(tvm._ffi.base._LIB)"

3. 查看构建选项

python -c "import tvm; print('\n'.join(f'{k}: {v}' for k, v in tvm.support.libinfo().items()))"

4. 检查设备支持

# 检查 Metal 支持
python -c "import tvm; print(tvm.metal().exist)"

# 检查 CUDA 支持
python -c "import tvm; print(tvm.cuda().exist)"

# 检查 Vulkan 支持
python -c "import tvm; print(tvm.vulkan().exist)"

安装额外 Python 依赖

根据使用场景,可能需要安装额外的 Python 包:

基础依赖

pip3 install numpy decorator attrs

RPC Tracker 支持

pip3 install tornado

自动调优模块

pip3 install tornado psutil 'xgboost>=1.1.0' cloudpickle

高级构建配置

使用 Ccache 加速构建

Ccache 可以显著减少重复构建时间,特别是在使用 CUTLASS 或 Flashinfer 时:

  1. 自动检测方式:

    echo "set(USE_CCACHE AUTO)" >> config.cmake
    
  2. Masquerade 模式:

    cmake -DCMAKE_CXX_COMPILER=/usr/lib/ccache/c++ ...
    
  3. CMake 编译器前缀:

    cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache ...
    

Windows 平台构建

在 Windows 上构建 TVM 需要:

  1. 安装 Visual Studio 2019 或更高版本
  2. 使用以下命令构建:
    mkdir build
    cd build
    cmake ..
    cmake --build build --config Release -- /m
    

ROCm 支持

目前 ROCm 仅在 Linux 上支持:

  1. 启用 ROCm 支持:

    echo "set(USE_ROCM ON)" >> config.cmake
    echo "set(ROCM_PATH /path/to/rocm)" >> config.cmake
    
  2. 安装 HIP 运行时和 LLVM 6.0.1

启用 C++ 测试

要构建和运行 C++ 测试:

  1. 安装 Google Test:

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

    ./tests/scripts/task_cpp_unittest.sh
    # 或仅构建
    make cpptest
    

通过以上步骤,您应该已经成功从源码构建并安装了 Apache TVM。根据您的具体需求,可以灵活调整构建选项,开启不同的后端支持。