前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于TVM实现ARM架构模型优化 | 安装篇

基于TVM实现ARM架构模型优化 | 安装篇

作者头像
uniartisan
发布2022-03-21 15:33:54
1.5K0
发布2022-03-21 15:33:54
举报
文章被收录于专栏:uu的自留地

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>

生成共享库

我们的目标是构建共享库:

  • 在 Linux 上,目标库libtvm.so
  • 在 macos 上, 目标库是libtvm.dylib
  • 在 Windows 上, 目标库是libtvm.dll

<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>

最低编译要求是

  • 支持 14(g+-5 C++ 或更高)的最近 c++ 编译器
  • CMake 3.5 或更高版本
  • 我们强烈建议使用 LLVM 进行构建,以启用所有功能。
  • 如果要使用 CUDA,需要 CUDA 工具包版本 >= 8.0。如果要从旧版本升级,请确保清除旧版本并在安装后重新启动。
  • 在 macOS 上,您可能希望安装Homebrew以便轻松安装和管理依赖关系。

我们使用 cmake 来构建库。TVM的配置可以通过配置.cmake进行修改。

首先,检查系统中的 cmake。如果您没有 cmake,可以从官方网站获取最新版本

首先创建生成目录,将 复制到目录。&lt;span class=&quot;pre&quot;&gt;cmake/config.cmake&lt;/span&gt;

<pre>mkdir build cp cmake/config.cmake build </pre>

编辑以自定义编译选项&lt;span class=&quot;pre&quot;&gt;build/config.cmake&lt;/span&gt;

  • 在 macOS 上,对于某些版本的 Xcode,您需要在 LDFLAGS 中添加,否则可能会出现链接错误。&lt;span class=&quot;pre&quot;&gt;-lc++abi&lt;/span&gt;
  • 更改为启用 CUDA 后端。对要构建的其他后端和库(OpenCL、RCOM、METAL、VulKAN、...)也做同样的处理。&lt;span class=&quot;pre&quot;&gt;set(USE_CUDA&lt;/span&gt;&lt;span&gt;&#xA0;&lt;/span&gt;&lt;span class=&quot;pre&quot;&gt;OFF)&lt;/span&gt;``&lt;span class=&quot;pre&quot;&gt;set(USE_CUDA&lt;/span&gt;&lt;span&gt;&#xA0;&lt;/span&gt;&lt;span class=&quot;pre&quot;&gt;ON)&lt;/span&gt;
  • 为了帮助调试,请确保使用 和&lt;span class=&quot;pre&quot;&gt;set(USE_GRAPH_RUNTIME&lt;/span&gt;&lt;span&gt;&#xA0;&lt;/span&gt;&lt;span class=&quot;pre&quot;&gt;ON)&lt;/span&gt;``&lt;span class=&quot;pre&quot;&gt;set(USE_GRAPH_RUNTIME_DEBUG&lt;/span&gt;&lt;span&gt;&#xA0;&lt;/span&gt;&lt;span class=&quot;pre&quot;&gt;ON)&lt;/span&gt;

安装 Relay Arm ® Compute Library Integration

进入 docker/install, 以root身份运行:

如果是嵌入式设备,需要先修改 ubuntu_install_arm_compute_lib.sh

代码语言:javascript
复制
vim ubuntu_install_arm_compute_lib.sh +71
## &#x5C06;&#x7F16;&#x8BD1;&#x7EBF;&#x7A0B;&#x8C03;&#x6574;&#x4E3A; -j1 &#x6216; -j2
代码语言:javascript
复制
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设备

代码语言:javascript
复制
cd build
cmake ..
make -j4
  • 您也可以使用ninja生成系统,而不是 Unix Makefile。与使用 Makefile 时,构建速度可能更快。
代码语言:javascript
复制
cd build
cmake .. -G Ninja
ninja

ARM设备

代码语言:javascript
复制
cd build
cmake ..
make runtime -j4

Python 包安装

TVM

根据您的开发环境,您可能需要使用虚拟环境和包管理器(如 或)来管理 python 包和依赖项。virtualenv conda

安装和维护 python 开发环境。

python 包位于tvm/python有两种方法可以安装该包:

对于可能更改代码的开发人员,建议使用此方法。

设置环境变量PYTHONPATH以告诉 python 在哪里可以找到库。例如,假设我们在主目录上克隆了 tvm =。然后我们可以在/.bashrc 中添加以下行。提取代码并重建项目后,将立即反映更改(无需再次调用)`<span class="pre">setup

代码语言:javascript
复制
export TVM_HOME=/path/to/tvm
export PYTHONPATH=$TVM_HOME/python:${PYTHONPATH}

完成

现在可以运行以下命令测试一下了!

代码语言:javascript
复制
python3
import tvm
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导语
  • 安装
  • 生成共享库
  • Python 包安装
    • TVM
    • 完成
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档