TVM:Linux源碼編譯安裝
筆者環境:
OS:Ubuntu 18.04
CMake:3.10.2
gcc:7.5.0
cuda:11.1
編譯安裝過程總覽
本文將簡介 tvm 的編譯安裝過程,包含兩個步驟:
- 通過C++代碼構建共享庫
- 設置相關的語言包(如Python包)
源碼獲取
官網教程提供了兩種源碼獲取方式:
-
通過下載頁面直接下載
-
通過 github 倉庫來下載
git clone --recursive https://github.com/apache/tvm tvm
注意一定要有
--recursive
參數,保證子模塊正常下載。
構建共享庫
構建 tvm 共享庫,在我們 Linux 系統上即 libtvm.so
和 libtvmruntime.so
。也可以只構建運行時庫 libtvmruntime.so
,在要被部署的遠程邊緣設備(如樹莓派、移動手機等)上,我們通常只需要安裝運行時庫。這也會在后面介紹遠程邊緣部署時提到。總之現在,在我們的主機上,我們先完全安裝 tvm。
準備工作
官方給出的安裝 tvm 的最小要求如下:
- 一個支持C++ 14 的編譯器 (如g+±5 or higher)
- CMake 3.5 or higher
- 強烈建議安裝 llvm
- Python 3.7 / 3.8 (Python 3.9 暫不支持)
- 如果要使用CUDA,CUDA toolkit version >= 8.0
安裝最小依賴
安裝上述最小要求的命令(ubuntu / debian):
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
檢查一下CMake,如果沒有的話,到該下載頁面下載。
llvm
llvm 雖然不是強制要求,但我們通常都是需要的,強烈建議大家安裝。過程也很簡單,從這個下載頁面選擇適合我們設備和系統的 pre-built 版本(壓縮文件 .xz
)下載并解壓即可:
wget http://releases.llvm.org/x.x.x/clang+llvm-x.x.x-x86_64-linux-gnu-ubuntu-xx.xx.tar.xztar -xf clang+llvm-x.x.x-x86_64-linux-gnu-ubuntu-xx.xx.tar.xz
解壓完成后進入解壓目錄,找到 bin 目錄下的 llvm-config
文件,記下其路徑,一會兒要用。
開始編譯構建
準備工作完成之后我們開始編譯構建。
首先進入到我們剛才下載的 tvm 源碼目錄下,新建 build 目錄,將 cmake 目錄下的 config.cmake
拷貝的 build 目錄下:
cd tvm
mkdir build
cp cmake/config.cmake build/
然后按需修改 config.cmake
文件:
-
如果要時候用某些后端和庫(如CUDA, OpenCL, RCOM, METAL, VULKAN,等)。這里以CUDA為例,將
set(USE_CUDA OFF)
修改為set(USE_CUDA ON)
,其他庫同理。 -
為了幫助調試,需要啟用嵌入式圖形執行器和調試功能
set(USE_GRAPH_DEBUG ON)
、set(USE_PROFILER ON)
-
如果要調試 IR,要啟用
set(USE_RELAY_DEBUG ON)
,并設置環境變量:export TVM_LOG_DEBUG="ir/transform.cc=1;relay/ir/transform.cc=1"
-
使用 LLVM,這里要使用到我們剛才記下的 LLVM 路徑了,設置
set(USE_LLVM /path/to/your/llvm/bin/llvm-config)
config.cmake
修改完成后,我們開始構建 tvm 及相關庫:
cd build
cmake ..
make -j4
Python 包
Python 會根據環境變量 PYTHONPATH
尋找庫文件,在 ~/.bashrc
中設置這個環境變量,其中 /path/to/tvm
是上文 tvm 目錄的絕對路徑。
export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
python 依賴安裝
-
必需依賴
pip3 install --user numpy decorator attrs
-
如果要使用 RPC 追蹤器
pip3 install --user tornado
-
如果要使用 auto-tuning 模塊
pip3 install --user tornado psutil xgboost cloudpickle
測試
這里我們用 Google Test 來進行測試,首先先安裝 GTest(不要和 tvm 裝在一起,建議另找一個目錄):
git clone https://github.com/google/googletest
cd googletest
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON ..
make
sudo make install
安裝完成后,在 tvm 安裝目錄下執行測試:
./tests/scripts/task_cpp_unittest.sh
順利完成無報錯的話,即告 tvm 安裝完成。
Ref:
https://tvm.apache.org/docs/install/from_source.html#developers-get-source-from-github