官方安裝方法:https://tvm.apache.org/docs/install/from_source.html
1. 安裝Anaconda
https://www.anaconda.com/products/individual
2. 安裝Git
sudo apt update
sudo apt install git
3. 從GitHub上下載tvm源代碼
git clone --recursive https://github.com/apache/tvm tvm
4. 安裝必要的依賴
sudo apt install -y gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev
5. 修改TVM編譯配置文件
cd tvm
如果沒有vim弄诲,請(qǐng)先安裝vim,再對(duì)配置文件進(jìn)行修改
sudo apt install vim
5.1孝治、新建一個(gè)build文件夾用于存放make后的文件
mkdir build
cp cmake/config.cmake build
5.2、修改配置文件
主要修改如下幾項(xiàng):(vim使用/關(guān)鍵字
可以高亮關(guān)鍵字)
- 如果使用CUDA進(jìn)行編譯:
set(USE_CUDA ON)
或者set(USE_CUDA /path/to/your/cuda/)
- 如果使用CUDNN:
set(USE_CUDNN ON)
或者set(USE_CUDA /path/to/your/cudnn.so/)
- 如果使用CUBLAS:
set(USE_CUDNN ON)
或者set(USE_CUDA /path/to/your/cublas.so/)
- 如果要對(duì)IR進(jìn)行debug:
set(USE_RELAY_DEBUG ON)
并在環(huán)境變量中加入TVM_LOG_DEBUG
的路徑 - 如果要對(duì)編譯過程進(jìn)行debug:
set(USE_GRAPH_EXECUTOR ON)
和(USE_PROFILER ON)
其余功能可按照配置文件中的詳細(xì)說明進(jìn)行修改
每一次修改配置文件之后都需要把build文件夾中的除編譯文件外的文件清空胁澳,重新編譯炕檩!
5.3. 搭建環(huán)境
傻瓜式搭建環(huán)境:也可以自行通過apt安裝llvm等環(huán)境
conda env create --file conda/build-environment.yaml
conda activate tvm-build
注意留攒!因?yàn)樯倒鲜桨惭b會(huì)安裝最新版本的python,可能會(huì)導(dǎo)致一系列不可控因素爷肝!因此請(qǐng)?jiān)谔摂M環(huán)境建立之后使用
conda install python=3.x
對(duì)python版本進(jìn)行降級(jí)猾浦,降級(jí)完成后再編譯!
5.4灯抛、編譯
cd build
cmake ..
make -j16 (數(shù)字代表使用多少個(gè)進(jìn)程進(jìn)行編譯金赦,可根據(jù)自己的cpu參數(shù)酌情選擇)
6. 安裝必要的包
conda build --output-folder=conda/pkg conda/recipe
conda install tvm -c ./conda/pkg
pip install numpy decorator attrs tornado psutil xgboost cloudpickle tensorboard
安裝時(shí)請(qǐng)使用default源,清華源或者其他源可能會(huì)報(bào)錯(cuò)
查看conda源:conda config --show-source
增加conda源:conda config --add channels http://.....
刪除conda源:conda config --remove channels http://.....
7. 把TVM和CUDA加入到環(huán)境變量~/.bashrc文件中
export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
export PATH=/path/to/cuda:$PATH
export LD_LIBRARY_PATH=/path/to/cuda/lib64:$LD_LIBRARY_PATH
8. 坑
8.1 如果出現(xiàn)GLIBCXX_3.4.29' not found
tvm-build/lib/./libstdc++.so.6: version `GLIBCXX_3.4.29' not found
說明tvm環(huán)境內(nèi)的GCC版本過高对嚼,但動(dòng)態(tài)庫(kù)版本不夠夹抗,只需要把新版本的libstdc++.so.6
文件覆蓋此文件即可
檢查
libstdc++.so.6
文件版本:
strings libstdc++.so.6 | grep GLIBC
解決方法:
通常可以使用sudo find / -name "libstdc++.so.6"
來全盤搜索本機(jī)內(nèi)的所有libstdc++.so.6
文件纵竖,并逐一檢查其版本是否包含GLIBCXX_3.4.29
漠烧,通常anaconda已經(jīng)包含,我的最新版文件在/usr/lib/x86_64-linux-gnu/libstdc++.so.6
內(nèi)靡砌,anaconda通常已經(jīng)包含gcc11.2.0及gcc9.1.0的動(dòng)態(tài)運(yùn)行庫(kù)已脓。
如果不能解決只能從網(wǎng)上尋找新版本的libstdc++.so.6
文件或更新gcc后再重新覆蓋。
8.2 編譯時(shí)出現(xiàn)GTest問題
解決方法
git clone https://github.com/google/googletest.git
cd googletest
mkdir build
cd build
cmake ..
make
sudo make install