TVM新人入坑-跑通demo
本来要在npu上玩的,结果zh的机器tm的不知为什么卡又掉了,必须得系统关机之后物理重启电源。等修完估计答辩也没一两天了,windows上弄个能跑的demo先。
本文内容时效性截至2025.6.7
tvm version 0.21.dev0
从源码安装
WSL Ubuntu 24.04
dependencies
-
CMake (>= 3.24.0)
-
LLVM (recommended >= 15)
-
Git
-
A recent C++ compiler supporting C++ 17, at the minimum
-
Python (>= 3.8)
-
(Optional) Conda (Strongly Recommended)
conda create -n tvm-build-venv -c conda-forge ` llvmdev>=15 ` git ` python=3.11 conda activate tvm-build-venv全部依赖用conda管理,剩下clang cmake直接
apt install clang cmake libzstd-dev最新的conda直接下载cmake会用4.0的测试版,导致configuration出错。
没有llvm也能编译,但这样没有cpu支持。
下载tvm源码
v0.21.dev0和v0.20.0都是没有tvm.relay的,很抽象,文档和代码都是一坨。
git clone --recursive https://github.com/apache/tvm tvm
git checkout v0.19.0
git submodule update --init --recursive
编译安装
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 ON)" >> 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 ON)" >> config.cmake
echo "set(USE_CUDNN OFF)" >> config.cmake
echo "set(USE_CUTLASS OFF)" >> config.cmake
cmake还需要设置architecture 我的RTX 1650对应是86
set(CMAKE_CUDA_ARCHITECTURES 86)
python集成需要Cython包
pip install Cython
编译
cmake .. -DCMAKE_C_COMPILER=xx -DCMAKE_CXX_COMPILER=xx && cmake --build . --parallel $(nproc)
最后会有 libtvm.so 和 libtvm_runtime.so 这两动态库。
配置pythonpath来使用,这种情况符合tvm的开发者,频繁修改源码并编译应用的情况。
export TVM_HOME=/path-to-tvm
export PYTHONPATH=$TVM_HOME/python:$PYTHONPATH
如果只是使用tvm,也可以pip安装
export TVM_LIBRARY_PATH=/path-to-tvm/build
pip install -e /path-to-tvm/python
使用conda则需全程注意自己所处的环境。
检查安装
python -c "import tvm; print(tvm.__file__)"
一般需要根据error装几个包才通。
然后检查TVM Library能否正常使用,文档似乎没有跟进最新的结构,要查看的 tvm._ffi 实际上并不存在
不过文档在刷知乎的时候就看到被喷写的和屎一样,有心理预期。`
import tvm
print(tvm.base._LIB)
base 直接移动到了外面和 ffi 并列
查看构建选项的实际支持
python -c "import tvm; print('\n'.join(f'{k}: {v}' for k, v in tvm.support.libinfo().items()))"