Ubuntu:
1.先下载TVM: git clone --recursive https://github.com/dmlc/tvm
2.安装LLVM:
如果需要模型在CPU上运行,则必须安装LLVM。对于Ubuntu,TVM已经提供了编译好的库,直接下载link.
也可源码编译(方法下面给出), 但是没必要。
3.配置:
① cd tvm ②mkdir build ③cp cmake/config.cmake build
④set(USE_LLVM /path/to/your/llvm/bin/llvm-config)
⑤set(USE_CUDA ON)....(需要GPU的话)
4.编译:
①cd build ②cmake .. ③make -j4
5.设置python路径:
export TVM_HOME=/path/to/tvm export PYTHONPATH=$TVM_HOME/python:$TVM_HOME/topi/python:$TVM_HOME/nnvm/python:${PYTHONPATH}
能 import tvm 说明安装成功
Centos:
由于官方并没有给出llvm已经编译好的库,所以需要我们从头编译llvm,这里是6.0.0版本。编译完成后会占很大的内存,一定要确保空间足够。并且这里是源码编译(某些原因不能联网)。
源码编译llvm,其他步骤与Ubuntu相似。
1.下载llvm源码
wget http://llvm.org/releases/6.0.0/llvm-6.0.0.src.tar.xz
tar xf llvm-6.0.0.src.tar.xz
mv llvm-6.0.0.src llvm
2.下载clang源码
cd llvm/tools
wget http://llvm.org/releases/6.0.0/cfe-6.0.0.src.tar.xz
tar xf cfe-6.0.0.src.tar.xz
mv cfe-6.0.0.src clang
cd ../..
3. 下载clang-tools-extra源码
cd llvm/tools/clang/tools
wget http://llvm.org/releases/6.0.0/clang-tools-extra-6.0.0.src.tar.xz
tar xf clang-tools-extra-6.0.0.src.tar.xz
mv clang-tools-extra-6.0.0.src extra
cd ../../../..
4. 下载compiler-rt源码
cd llvm/projects
wget http://llvm.org/releases/6.0.0/compiler-rt-6.0.0.src.tar.xz
tar xf compiler-rt-6.0.0.src.tar.xz
mv compiler-rt-6.0.0.src compiler-rt
cd ../..
这样之后 clang,clang-tool-extra 和 compiler-rt 就可以和 llvm 一起编译了。
下载后,接下来就开始编译了。
①mkdir build ②cd build ③cmake path/to/llvm/source/root ④cmake --build .
这里到第4步就可以了,不需要继续往下编,因为我们只需要它生成的文件。
编译模型的时候:
1.target=’cuda':
找到出错的地方 把一个向量改成[1024,1024,1024]只要 乘积大于2048就行,但是不能太大。
2.target='llvm -target=aarch64-linux-gnu'
保存.so的时候不能用
libpath = "../tvm_output_lib/mobilenet.so"
lib.export_library(libpath)
因为这时候的编译器是linux下的gcc,目标确是arm板上的文件。
所以要用:
lib.export_library("xxxxx.so", ndk.create_shared)
对于生成直接在目标平台上运行的文件。
①:可以直接生成.o文件然后在arm上编译。
②:lib.export_library("depress_deploy.so", tvm.contrib.cc.create_shared, cc="/usr/bin/arm-linux-gnueabihf-g++")
在cc后面写上交叉编译器的g++路径。
实验记录:
检测模型(pytorch训练),利用TVM在