从源码安装
在各种系统中从 0 到 1 构建和安装 TVM 软件包包括两个步骤:
- 从 C++ 代码中构建共享库(Linux:
libtvm.so
;macOS :libtvm.dylib
;Windows:libtvm.dll
)。 - 为编程语言包进行设置(如 Python 包)。
下载 TVM 源代码,请访问 下载页面。
开发者: 从 GitHub 获取源代码
从 GitHub 上克隆源码仓库,请使用 --recursive
选项来克隆子模块。
git clone --recursive https://github.com/apache/tvm tvm
Windows 用户可以打开 Git shell,并输入以下命令:
git submodule init
git submodule update
构建共享库
我们的目标是构建共享库:
- 在 Linux 上,目标库是 libtvm.so 和 libtvm_runtime.so
- 在 MacOS 上,目标库是 libtvm.dylib 和 libtvm_runtime.dylib
- 在 Windows 上,目标库是 libtvm.dll 和 libtvm_runtime.dll
也可以只 构建运行时库。
TVM
库的最低构建要求是:
- 支持 C++17 的最新 C++ 编译器
- GCC 7.1
- Clang 5.0
- Apple Clang 9.3
- Visual Stuio 2019 (v16.7)
- CMake 3.18 或更高版本
- 推荐使用 LLVM 构建 TVM 库以启用所有功能。
- 如需使用 CUDA,请确保 CUDA 工具包的版本至少在 8.0 以上。注意:CUDA 旧版本升级后,请删除旧版本并重新启动。
- macOS 可安装 Homebrew 以方便安装和管理依赖。
- Python:推荐使用 3.7.X+ 和 3.8.X+ 版本,3.9.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 为搭载 Intel 或 M1 芯片的 macOS 安装所需的依赖,需遵循 Homebrew 指定的安装步骤,以保证正确安装和配置这些依赖:
brew install gcc git cmake
brew install llvm
brew install python@3.8
使用 cmake 来构建库。TVM 的配置可以通过编辑 config.cmake 和/或在命令行传递 cmake flags 来修改:
-
如果没有安装 cmake,可访问 官方网站 下载最新版本。
-
创建一个构建目录,将
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)
启用嵌入式图形执行器(embedded graph executor)和调试功能。 -
如需用 IR 调试,可以设置
set(USE_RELAY_DEBUG ON)
,同时设置环境变量 TVM_LOG_DEBUG。export TVM_LOG_DEBUG="ir/transform.cc=1;relay/ir/transform.cc=1"
-
-
TVM 需要 LLVM 用于 CPU 代码生成工具(Codegen)。推荐使用 LLVM 构建。
- 使用 LLVM 构建时需要 LLVM 4.0 或更高版本。注意,默认的 apt 中的 LLVM 版本可能低于 4.0。
- 由于 LLVM 从源码构建需要很长时间,推荐从 LLVM
下载页面
下载预构建版本。
- 解压缩到某个特定位置,修改
build/config.cmake
以添加set(USE_LLVM /path/to/your/llvm/bin/llvm-config)
- 或直接设置
set(USE_LLVM ON)
,利用 CMake 搜索一个可用的 LLVM 版本。
- 解压缩到某个特定位置,修改
- 也可以使用 LLVM Ubuntu 每日构建
- 注意 apt-package 会在
llvm-config
中附加版本号。例如,如果你安装了 LLVM 10 版本,则设置set(USE_LLVM llvm-config-10)
- 注意 apt-package 会在
- PyTorch 的用户建议设置
set(USE_LLVM "/path/to/llvm-config --link-static")
和set(HIDE_PRIVATE_SYMBOLS ON)
以避免 TVM 和 PyTorch 使用的不同版本的 LLVM 之间潜在的符号冲突。 - 某些支持平台上,Ccache 编译器 Wrapper
可帮助减少 TVM 的构建时间。在 TVM 构建中启用 CCache 的方法包括:
- 在
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 ...
- 在