Apache TVM is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
TVM 是 acmer 陈天奇的作品,是一种用于CPU,GPU和专用加速器的开放式深度学习编译器堆栈。 它旨在缩小以生产力为中心的深度学习框架与以性能或效率为导向的硬件后端之间的差距。
在我自己的实际测试中,pytorch模型在x86平台优化后效率提升了10倍之多,而在arm平台——树莓派3B同时加载pytorch和tvm模型时,效率提升18.79倍。
由于TVM仍然处于快速开发阶段,国内相关资料不全,官方Docs在实际使用的时候存在一定的问题,所以用这篇博文记录。
这篇文章基于官方的文档,详细记录如何在X86平台启用ARM的交叉编译、并启用 Relay Arm ® Compute Library Integration
从 github 克隆源存储库。使用选项一起克隆子模块非常重要。<span class="pre">--recursive</span>
<pre>git clone --recursive https://github.com/apache/incubator-tvm tvm </pre>
对于使用图形化 github 工具的用户,可以打开 git shell,并键入以下命令。
<pre>git submodule init git submodule update </pre>
我们的目标是构建共享库:
<pre>sudo apt-get update sudo apt-get install -y python3 python3-dev python3-setuptools gcc libtinfo-dev zlib1g-dev build-essential cmake libedit-dev libxml2-dev </pre>
最低编译要求是
我们使用 cmake 来构建库。TVM的配置可以通过配置.cmake进行修改。
首先,检查系统中的 cmake。如果您没有 cmake,可以从官方网站获取最新版本
首先创建生成目录,将 复制到目录。<span class="pre">cmake/config.cmake</span>
<pre>mkdir build cp cmake/config.cmake build </pre>
编辑以自定义编译选项<span class="pre">build/config.cmake</span>
<span class="pre">-lc++abi</span>
<span class="pre">set(USE_CUDA</span><span> </span><span class="pre">OFF)</span>``<span class="pre">set(USE_CUDA</span><span> </span><span class="pre">ON)</span>
<span class="pre">set(USE_GRAPH_RUNTIME</span><span> </span><span class="pre">ON)</span>``<span class="pre">set(USE_GRAPH_RUNTIME_DEBUG</span><span> </span><span class="pre">ON)</span>
安装 Relay Arm ® Compute Library Integration
进入 docker/install, 以root身份运行:
如果是嵌入式设备,需要先修改 ubuntu_install_arm_compute_lib.sh
vim ubuntu_install_arm_compute_lib.sh +71
## 将编译线程调整为 -j1 或 -j2
chmod u+x *.sh
sudo sh ubuntu_install_arm_compute_lib.sh
TVM 可选取决于 LLVM。需要 LLVM 的 CPU 代码根需要 LLVM。
对于X86设备 我们还需要修改<span class="pre">build/config.cmake</span>
对于ARM设备 我们还需要修改<span class="pre">build/config.cmake</span>
然后,我们可以构建 tvm 和相关库。
x86设备
cd build
cmake ..
make -j4
cd build
cmake .. -G Ninja
ninja
ARM设备
cd build
cmake ..
make runtime -j4
根据您的开发环境,您可能需要使用虚拟环境和包管理器(如 或)来管理 python 包和依赖项。virtualenv conda
安装和维护 python 开发环境。
python 包位于tvm/python有两种方法可以安装该包:
对于可能更改代码的开发人员,建议使用此方法。
设置环境变量PYTHONPATH以告诉 python 在哪里可以找到库。例如,假设我们在主目录上克隆了 tvm =。然后我们可以在/.bashrc 中添加以下行。提取代码并重建项目后,将立即反映更改(无需再次调用)`<span class="pre">setup
export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}
现在可以运行以下命令测试一下了!
python3
import tvm