TVM AutoTVM 树莓派 4B 调优
细节请参阅官方文档,这里只作相关内容记录和踩坑记录而已。
##
Build TVM Runtim on Raspberry Pi 4B
我们只用树莓派跑模型,所以只需要构建 Runtime
网络条件差的话记得更换 apt 的源
git clone --recursive https://github.com/apache/tvm tvm
cd tvm
mkdir build
cp cmake/config.cmake build
cd build
cmake ..
make runtime -j4
如果在 cmake ..
的时候说找不到 cmake 那就
sudo apt update
sudo apt install -y cmake
如果在 cmake ..
的时候找不到 llvm 那就
sudo apt install -y llvm
我执行这条指令的时间是 2021 年 2 月 19 日,清华源 apt 给我装的是 llvm-7
编译好 runtime 之后,我们需要设置 PYTHONPATH
环境变量(如果你用的是 bash,那你编辑 .bashrc,如果是 zsh,那你编辑 .zshrc)
(下面这条命令的 current working directory 为:~
,使用的是 zsh
)
echo "export PYTHONPATH=$PYTHONPATH:~/tvm/python" >> ~/.zshrc
source ~/.zshrc
##
Config RPC Server on Raspberry Pi 4B
由于 Raspberry OS 里,python 默认是 python2.7 ,所以我们这里强制使用 python3
python3 -m tvm.exec.rpc_server --host 0.0.0.0 --port=9090
(Tips:共建和谐未来,建议所有项目都是用 python3, 抛弃 python2 人人有责)
如果你看到了这样的字眼,说明你成功在树莓派上启动了 RPC 服务器:
INFO:RPCServer:bind to 0.0.0.0:9090
##
Prepare Pre-trained model
查看 target (-mtriple 的值)
➜ ~ gcc -dumpmachine
aarch64-linux-gnu
# 通过 gcc -dumpmachine 即可了解到 -mtriple 要写的值
# 这条指令是在树莓派上运行的
target = tvm.target.Target('llvm -device=arm_cpu -model=bcm2711 -mtriple=aarch64-linux-gnu -mattr=+neon')
# 这个代码是在训练机上运行的
树莓派的 CPU 为 bcm2711,mtriple 是 aarch64-linux-gnu,mattr 一律写 +neon
##
踩坑记录(注意事项)
RPC tracker - server 的模式,不能通过 frp 反代使用。
没有公网 IP 的话,必须 VPN 异地组网打洞才可以。
最终决定本地搭建一个 TVM 环境,用服务器进行 training,把模型下载到笔记本虚拟机,然后 tuning raspi