TVM安裝

爲什麼選擇TVM

爲提升深度學習模型的推理效率,設備平臺製造商針對自己的平臺推出優化的推理引擎,例如NAVIDA的tensorRT,Intel的OpenVINO,Tencent針對移動端應用推出NCNN等。目前,深度學習模型應用廣泛,在服務端和移動端都有應用,甚至於特殊的嵌入式場景想,它們都有加速模型推理的需求。
  TVM介是從深度學習編譯器的角度來做推理引擎,目前技術領域還比較新,具體技術細節以後有機會會深入學習,這裏主要想體驗一下使用TVM做深度模型推理,重點是推理效率的提升,所以嘗試安裝下TVM測試下。

相關版本

```bash
gcc版本 6.4.0
cmake 3.16.4
llvm 我選擇的版本爲llvm-9.0.0
```
  • gcc 安裝

    • 查看系統版本
      cat /etc/redhat-release
      
    • 查看默認的gcc版本
      gcc --version
      
    • 查看默認動態庫
      strings /usr/lib64/libstdc++.so.6 | grep GLIBC
      
      GLIBCXX_3.4
      GLIBCXX_3.4.1
      GLIBCXX_3.4.2
      GLIBCXX_3.4.3
      GLIBCXX_3.4.4
      GLIBCXX_3.4.5
      GLIBCXX_3.4.6
      GLIBCXX_3.4.7
      GLIBCXX_3.4.8
      GLIBCXX_3.4.9
      GLIBCXX_3.4.10
      GLIBCXX_3.4.11
      GLIBCXX_3.4.12
      GLIBCXX_3.4.13
      GLIBCXX_3.4.14
      GLIBCXX_3.4.15
      GLIBCXX_3.4.16
      GLIBCXX_3.4.17
      GLIBCXX_3.4.18
      GLIBCXX_3.4.19
      GLIBC_2.3
      GLIBC_2.2.5
      GLIBC_2.14
      GLIBC_2.4
      GLIBC_2.3.2
      GLIBCXX_DEBUG_MESSAGE_LENGTH
      
    • 下載gcc源碼
      cd /usr/local/src/
      wget http://ftp.gnu.org/gnu/gcc/gcc-6.4.0/gcc-6.4.0.tar.xz
      tar -xf gcc-6.4.0.tar.xz -C /usr/src
      cd /usr/src/gcc-6.4.0
      # 自動下載mpfr-2.4.2.tar.bz2、gmp-4.3.2.tar.bz2、mpc-0.8.1.tar.gz和isl-0.15.tar.bz2軟件包
      ./contrib/download_prerequisites
      ./configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
      make -j4
      make install
      
    • 配置gcc
      find / -name "libstdc++.so*"
      # /usr/src/gcc-6.4.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
      
      cd /usr/lib64
      cp /usr/src/gcc-6.4.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 libstdc++.so.6.0.22
      mv libstdc++.so.6 libstdc++.so.6.old
      ln -sv libstdc++.so.6.0.22 libstdc++.so.6
      #######
      strings /usr/lib64/libstdc++.so.6 | grep GLIBC
      
      GLIBCXX_3.4
      GLIBCXX_3.4.1
      GLIBCXX_3.4.2
      GLIBCXX_3.4.3
      GLIBCXX_3.4.4
      GLIBCXX_3.4.5
      GLIBCXX_3.4.6
      GLIBCXX_3.4.7
      GLIBCXX_3.4.8
      GLIBCXX_3.4.9
      GLIBCXX_3.4.10
      GLIBCXX_3.4.11
      GLIBCXX_3.4.12
      GLIBCXX_3.4.13
      GLIBCXX_3.4.14
      GLIBCXX_3.4.15
      GLIBCXX_3.4.16
      GLIBCXX_3.4.17
      GLIBCXX_3.4.18
      GLIBCXX_3.4.19
      GLIBCXX_3.4.20
      GLIBCXX_3.4.21
      GLIBCXX_3.4.22
      GLIBC_2.3
      GLIBC_2.2.5
      GLIBC_2.14
      GLIBC_2.17
      GLIBC_2.3.2
      GLIBCXX_DEBUG_MESSAGE_LENGTH
      
  • cmake 安裝
    https://cmake.org/download/

    # 解壓Cmake壓縮包
    tar -zxvf cmake-3.16.4.tar.gz
    # 進入Cmake文件夾
    cd cmake-3.16.4
    # 運行bootstrap
    ./bootstrap
    # 編譯gmake
    gmake
    # 進行安裝Cmake
    gmake install
    

Step1 llvm安裝

llvm源碼下載
llvm安裝教程
在這裏插入圖片描述
下載 Sources下除LLVM Test Suite外的所有源碼

  • 一鍵下載
    # LLVM 源碼下載
    wget https://releases.llvm.org/9.0.0/clang-tools-extra-9.0.0.src.tar.xz
    wget https://releases.llvm.org/9.0.0/compiler-rt-9.0.0.src.tar.xz
    wget https://releases.llvm.org/9.0.0/libunwind-9.0.0.src.tar.xz
    wget https://releases.llvm.org/9.0.0/libcxxabi-9.0.0.src.tar.xz
    wget https://releases.llvm.org/9.0.0/libcxx-9.0.0.src.tar.xz
    wget https://releases.llvm.org/9.0.0/openmp-9.0.0.src.tar.xz 
    wget https://releases.llvm.org/9.0.0/lldb-9.0.0.src.tar.xz
    wget https://releases.llvm.org/9.0.0/polly-9.0.0.src.tar.xz
    wget https://releases.llvm.org/9.0.0/lld-9.0.0.src.tar.xz
    wget https://releases.llvm.org/9.0.0/cfe-9.0.0.src.tar.xz
    wget https://releases.llvm.org/9.0.0/llvm-9.0.0.src.tar.xz
    # 放在llvm/tools 目錄下的組件
    tar Jxvf llvm-9.0.0.src.tar.xz
    mv llvm-9.0.0.src llvm
    
    tar Jxvf cfe-9.0.0.src.tar.xz
    mv cfe-9.0.0.src clang
    mv clang llvm/tools
    
    tar Jxvf lld-9.0.0.src.tar.xz
    mv lld-9.0.0.src lld
    mv lld llvm/tools
    
    tar Jxvf polly-9.0.0.src.tar.xz
    mv polly-9.0.0.src polly
    mv polly llvm/tools
    
    tar Jxvf lldb-9.0.0.src.tar.xz
    mv lldb-9.0.0.src lldb
    mv lldb llvm/tools
    
    # 放在 llvm/projects 目錄下的組件
    tar Jxvf openmp-9.0.0.src.tar.xz 
    mv openmp-9.0.0.src openmp
    mv openmp llvm/projects
    
    tar Jxvf libcxx-9.0.0.src.tar.xz
    mv libcxx-9.0.0.src libcxx
    mv libcxx llvm/projects
    
    tar Jxvf libcxxabi-9.0.0.src.tar.xz
    mv libcxxabi-9.0.0.src libcxxabi
    mv libcxxabi llvm/projects
    
    tar Jxvf libunwind-9.0.0.src.tar.xz
    mv libunwind-9.0.0.src libunwind
    mv libunwind llvm/projects
    
    
    tar Jxvf compiler-rt-9.0.0.src.tar.xz
    mv compiler-rt-9.0.0.src compiler-rt
    mv compiler-rt llvm/projects
    # clang 的子組件
    tar Jxvf clang-tools-extra-9.0.0.src.tar.xz
    mv clang-tools-extra-9.0.0.src extra
    mv extra llvm/tools/clang/tools
    # 刪除下載的tar.xz
    rm -rf *.tar.xz
    
    llvm 爲了防止污染源碼,不能在源碼目錄直接安裝,在 llvm 同級目錄下新建一個 build 目錄,進入再安裝
    cmake -G "Unix Makefiles"  \
    -DLLVM_ENABLE_ASSERTIONS=On  \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_COMPILER=/usr/local/bin/gcc \
    -DCMAKE_CXX_COMPILER=/usr/local/bin/c++ \
    -DLIBCXXABI_LIBC_INCLUDES= /path/llvm/projects/libcxxabi/include  \
    -DLIBCXX_LIBCXX_INCLUDES= /path/llvm/projects/libcxx/include \
    ../llvm
    
    make -j4
    make install
    
    如果出現以下報錯:
    CMake Error at tools/lldb/scripts/cmake_install.cmake:41 (file):
    file INSTALL cannot find "/usr/local/src/llvm/llvm/build/./lib/python2.7":
    No such file or directory.
    Call Stack (most recent call first):
    tools/lldb/cmake_install.cmake:50 (include)
    tools/cmake_install.cmake:51 (include)
    cmake_install.cmake:68 (include)
    
    執行
    cp -r lib64/python2.7 lib/python2.7
    
    如果出現以下報錯:
    CMake Error at /usr/local/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
    Could NOT find SWIG (missing: SWIG_EXECUTABLE SWIG_DIR)
    Call Stack (most recent call first):
    /usr/local/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
    /usr/local/share/cmake-3.16/Modules/FindSWIG.cmake:64 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
    tools/lldb/scripts/CMakeLists.txt:16 (find_package)
    
    執行
    yum install swig
    
    如果報以下錯
    CMake Error at /usr/local/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:146 (message):
    Could NOT find LibEdit (missing: libedit_INCLUDE_DIRS libedit_LIBRARIES)
    Call Stack (most recent call first):
    /usr/local/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake:393 (_FPHSA_FAILURE_MESSAGE)
    tools/lldb/cmake/modules/FindLibEdit.cmake:54 (find_package_handle_standard_args)
    tools/lldb/cmake/modules/LLDBConfig.cmake:94 (find_package)
    tools/lldb/CMakeLists.txt:20 (include)
    
    執行
    yum install libedit.i686 libedit-devel.i686
    

Step2 TVM安裝

tvm Install from Source

git clone --recursive https://github.com/apache/incubator-tvm tvm
git submodule init
git submodule update
  • 定製config.cmake
cd tvm $$ mkdir build
cp cmake/config.cmake build
cd build
編輯build/config.cmake文件,裏面有一些功能開關,這些配置有:

USE_CUDA,NVIDIA的GPU計算;
USE_ROCM,通用的GPU計算,AMD提出,目的很顯然...;
USE_SDACCEL,FPGA計算;
USE_AOCL,Intel FPGA SDK for OpenCL (AOCL) runtime;
USE_OPENCL,異構平臺編寫程序的框架,異構平臺可由CPU、GPU、DSP、FPGA或其他類型的處理器與硬件加速器所組成;
USE_METAL,iOS上的GPU計算;
USE_VULKAN,新一代的openGL,Android 7.x開始支持(iOS不支持,因爲有自己的metal2);
USE_OPENGL,2D/3D渲染庫標準,顯卡廠家負責實現和支持;
USE_SGX, Intel SGX ; 
USE_RPC,遠程調用,電腦和手機可以通過網絡聯調;
USE_STACKVM_RUNTIME,embed stackvm into the runtime;
USE_GRAPH_RUNTIME,enable tiny embedded graph runtime;
USE_GRAPH_RUNTIME_DEBUG,enable additional graph debug functions;
USE_LLVM,llvm support;
USE_BLAS,API標準,規範發佈基礎線性代數操作的數值庫(如矢量或矩陣乘法),不同的實現有openblas, mkl, atlas, apple
USE_RANDOM,contrib.random運行時;
USE_NNPACK,
USE_CUDNN,
USE_CUBLAS,
USE_MIOPEN,
USE_MPS,
USE_ROCBLAS,
USE_SORT,使用contrib sort;
USE_ANTLR,
USE_VTA_TSIM,
USE_RELAY_DEBUG,Relay debug模式
cmake .. //如果需要gdb跟蹤源碼的話需要加-DCMAKE_BUILD_TYPE=Debug
make -j4
make install

error:

git submodule init
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "zh_CN.utf8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

解決方法:

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

tvm系統配置

vim ~/.bashrc

export TVM_PATH=/yourpath/to/tvm  # 你自己tvm
export PYTHONPATH=$TVM_PATH/python:$TVM_PATH/topi/python:$TVM_PATH/nnvm/python:${PYTHONPATH}

source ~/.bashrc

安裝TVM python bindings by setup.py

cd tvm
cd python
python3 setup.py install --user
cd ..
cd topi/python
python setup.py install --user

測試

python3
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tvm
>>> print(tvm.__version__)
0.7.dev0
>>> 

Reference

PyTorch模型轉TVM模型全流程記錄
安裝TVM
--------------------------------------------------------- END --------------------------------------------------------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章