这部分主要记录部署环境的搭建。
在电脑或服务器上编译,需要搭建完整的TVM工具链;树莓派上仅负责运行,因此只编译runtime即可。
先从简单的开始
一 在树莓派上编译runtime
我的树莓派是新装的系统,那就从头搭建环境吧。
我用的树莓派最新系统,自带python3.11,但tvm官网表示不支持python3.9以上版本!不想看到版本不兼容导致的各种bug,使用miniconda3再装一个python3.8版本。
root@raspberrypi:/home/yblir_pi/tvm/build#
root@raspberrypi:/home/yblir_pi/tvm/build#
root@raspberrypi:/home/yblir_pi/tvm/build# python
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
- 搭建python环境
# 记得选择aarch64格式
# 当前设备,miniconda3最高只能到4.9.2,
# 更新的版本会抛出 "$CONDA_EXEC" constructor --prefix "$PREFIX" --extract-conda-pkgs问题。
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py38_4.9.2-Linux-aarch64.sh
bash Miniconda3-py38_4.9.2-Linux-aarch64.sh
# 这里,选择安装路径,默认root下,我改到了/usr/local目录下
- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below
[/root/miniconda3] >>> /usr/local/miniconda3
- 树莓派自带了gcc,g++, 但没有cmake,需要另外安装
apt-get install cmake
cmake --version
# 需要安装llvm, 高版本的会有安装问题,用13版本
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-project-13.0.1.src.tar.xz
tar xvf llvm-project-13.0.1.src.tar.xz
mkdir /usr/local/llvm
mkdir llvm-project-13.0.1.src/build
cd llvm-project-13.0.1.src/build
cmake -G "Unix Makefiles" -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_TARGETS_TO_BUILD=X86 -DCMAKE_BUILD_TYPE="Release" -DLLVM_INCLUDE_TESTS=OFF -DCMAKE_INSTALL_PREFIX="/usr/local/llvm" ../llvm
# 使用cmake --build而不用make,是为了跨平台。这步要耗时很久,编译了6个小时~
cmake --build . -j3
cmake --build . --target install
# 查看llvm版本
llvm-as --version
# 若显示no command,需要再配置bashrc
vim ~/.bashrc
# 添加自己的llvm路径
export LLVM_HOME=/usr/local/llvm/bin
export PATH=$LLVM_HOME:$PATH
# 再执行llvm-as --version就能看到安装的版本号了
LLVM (http://llvm.org/):
LLVM version 13.0.1
Optimized build.
Default target: aarch64-unknown-linux-gnu
Host CPU: cortex-a72
# 再写入python路径
export PYTHONPATH=$PYTHONPATH:/home/yblir_pi/tvm/python
- 编译安装opencv
# 先安装必要的依赖包,应该有些包不是必要的,装不成功就跳过
apt-get install build-essential -y
apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev -y
apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev -y
依次执行以下命令,cmake 指定的opencv路径换成自己的
cmake -DCMAKE_BUILD=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_ZLIB=ON \
-DBUILD_JPEG=ON \
-DBUILD_JASPER=ON \
-DBUILD_WEBP=ON \
-DBUILD_PNG=ON \
-DBUILD_TIFF=ON \
-DBUILD_OPENEXR=ON \
-DBUILD_TBB=ON \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DBUILD_JAVA=OFF \
-DWITH_TBB=ON \
-DWITH_CUDA=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D CUDA_nppicom_LIBRARY=stdc++ \
-DWITH_NVCUVID=ON \
-DWITH_CUBLAS=ON \
-DWITH_CUFFT=ON \
-DWITH_CUDNN=ON \
-DCUDA_FAST_MATH=ON \
-DWITH_FREETYPE=ON \
-DWITH_FFMPEG=ON \
-DWITH_V4L=ON \
-DOPENCV_GENERATE_PKGCONFIG=YES \
/home/yblir_pi/opencv_install/opencv-4.7.0
# 树莓派4b只有4个线程,开太多有卡死
make -j3
make install
# ldconfig命令的作用主要是在默认搜寻目录/lib和/usr/lib以
# 及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库
ldconfig
- 编译安装tvm runtime, 这部分官网写的最详细
git clone --recursive https://github.com/apache/tvm tvm
cd tvm
mkdir build
cp cmake/config.cmake build
cd build
# 必须把 set(USE_LLVM OFF) -> set(USE_LLVM ON)
vim config.cmake
cmake ..
make runtime -j3
二 本地电脑安装交叉编译器
2.1 本地电脑需要是Linux或wsl系统,win系统会有各种bug
本地电脑也需要llvm,安装步骤通上
需要完整版的tvm,安装步骤也同上,需要改变一点,make runtime -j3 -> make -j3,目标是生成libtvm.so,libtvm_runtime.so两个文件。这里步骤不再重复描述了。
2.2 安装交叉编译器
# 在本地电脑上安装
apt-get install g++-arm-linux-gnueabihf
# 查看安装后的版本信息
arm-linux-gnueabihf-g++ -v
三 总结
流程写到有点乱, 只写了主要搭建过程,因为官方文档写的比我清楚https://tvm.hyper.ai/docs/install/from_source
这里就不再写重复的流程了.