TVM源码编译安装
由于TVM依赖LLVM,安装TVM之前需要先安装LLVM
1、LLVM 安装
1.1 LLVM需要C++14的特性,所以编译器gcc>=5 ,cmake>3.5
1.2 安装其他依赖
yum install -y libffi-devel graphviz-devel elfutils-libelf-devel readline-devel libedit-devel libxml2-devel protobuf-devel gtext-devel doxygen swig
1.3 下载LLVM的源码:
下载地址:https://releases.llvm.org/download.html
1.4 解压各个tar.xz并放到对应的目录
LLVM的各个子组件必须放到LLVM源码的固定位置,使用固定的名称。
解压llvm-10.0.0.src.tar.xz 生成llvm-10.0.0.src
放到llvm-10.0.0.src/tool的组件
解压clang-10.0.0.src.tar.xz 重命名为llvm-10.0.0.src/tool/clang
解压lld-10.0.0.src.tar.xz 重命名为llvm-10.0.0.src/tool/lld
解压lldb-10.0.0.src.tar.xz 重命名为llvm-10.0.0.src/tool/lldb
解压polly-10.0.0.src.tar.xz 重命名为llvm-10.0.0.src/tool/polly
放到llvm-10.0.0.src/project的组件:
解压openmp-10.0.0.src.tar.xz 重命名为llvm-10.0.0.src/project/openmp
解压libcxx-10.0.0.src.tar.xz 重命名为llvm-10.0.0.src/project/libcxx
解压libcxx-api-10.0.0.src.tar.xz 重命名为llvm-10.0.0.src/project/libcxxabi
解压libunwind-10.0.0.src.tar.xz 重命名llvm-10.0.0.src/project/libunwind
解压compiler-rt-10.0.0.src.tar.xz 重命名为llvm-10.0.0.src/project/compiler-rt
clang子组件
解压clang-tools-extra-10.0.0.src.tar.xz 重命名为llvm-10.0.0.src/tools/clang/tools/extra
1.5、使用CMake生成Makefile
cd llvm-10.0.0.src
mkdir build && cd build
设置环境变量:
export PATH=~/gcc-5.4.0/bin:$PATH
export LD_LIBRARY_PATH=~/gcc-5.4.0/lib64:$LD_LIBRARY_PATH
export CC=~/gcc-5.4.0/bin/gcc
export CXX=~/gcc-5.4.0/bin/g++
export CXXFLAGS='-std=c++14'
export LDFLAGS='-lstdc++ -ldl'
cmake:
cmake .. \
-DLLVM_OPTIMIZED_TABLEGEN=ON \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_ENABLE_EH=ON \
-DLLVM_INSTALL_UTILS=ON \
-DWITH_POLLY=ON \
-DLINK_POLLY_INTO_TOOLS=ON \
-DLLVM_TARGETS_TO_BUILD=X86 \
-DLIBOMP_ARCH=X86_64 \
-DBUILD_SHARED_LIBS=ON \
-DLIBOMP_ENABLE_SHARED=ON\
-DLLVM_ENABLE_LIBCXX=ON \
-DLLDB_RELOCATABLE_PYTHON=ON \
-DLLVM_ENABLE_FFI=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCLANG_DEFAULT_CXX_STDLIB=libc++ \
-DCLANG_INCLUDE_TESTS=OFF \
-DENABLE_LINKER_BUILD_ID=ON \
-DENABLE_X86_RELAX_RELOCATIONS=ON \
-DLIBCXXAPI_INCLUDE_TESTS=OFF \
-DLIBCXX_INCLUDE_BENCHMARKS=OFF \
-DLIBCXX_INCLUDE_TESTS=OFF \
-DLIBOMP_TSAN_SUPPORT=ON \
-DLLDB_BUILD_INTEL_PT=OFF \
-DLLDB_INCLUDE_TESTS=OFF \
-DLLVM_ENABLE_OCAMLDOC=OFF\
-DLLVM_INCLUDE_EXAMPLES=OFF\
-DLLVM_INCLUDE_GO_TEST=OFF\
-DLLVM_INCLUDE_test=OFF\
-DLLVM_INSTALL_BINUTILS_SYMLINK=ON\
-DLLVM_TOOL_LLGO_BUILD=ON \
-DLLVM_TOOL_PARALLEL_LIBS_BUILD=ON\
-DLLVM_ENABLE_PIC=ON \
-DLIBUNWIND_ENABLE_SHARED=OFF \
-DLIBCXX_ENABLE_PEDANTIC=ON \
-DLIBCXXAPI_LIBDIR_SUFFIX=64\
-DLIBCXX_LIBDIR_SUFFIX=64\
-DLIBUNWIND_LIBDIR_SUFFIX=64\
-DLLVM_LIBDIR_SUFFIX=64
make -j 8
make install DESTDIR=xxx #自定义安装目录,如果没有定义默认安装到/usr/local下面
2.安装TVM
2.1、下载源码
git clone --recursive https://github.com/apache/incubator-tvm tvm
2.2 、编译动态库
cd tvm
mkdir build
cp cmake/config.cmake build
cd build
修改config.cmake
Change set(USE_CUDA OFF) to set(USE_CUDA ON) to enable CUDA backend.
set(USE_GRAPH_RUNTIME ON) and set(USE_GRAPH_RUNTIME_DEBUG ON)
设置LLVM
set(USE_LLVM /path/to/your/llvm/bin/llvm-config)
编译
cd build
cmake -DCMAKE_CXX_COMPILER=~/gcc-5.4.0/bin/g++ .. #TVM需要C++14的特征,所有需要gcc>5
make -j
make install DESTDIR=xxx
2.2、python包安装
方法一: 设置环境变量(推荐)
export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
方法二:通过 setup.py安装
# install tvm package for the current user
# NOTE: if you installed python via homebrew, --user is not needed during installaiton
# it will be automatically installed to your user directory.
# providing --user flag may trigger error during installation in such case.
export MACOSX_DEPLOYMENT_TARGET=10.9 # This is required for mac to avoid symbol conflicts with libstdc++
cd python; python setup.py install --user; cd ..
Ref:https://tvm.apache.org/docs/install/index.html
(完)