姜汉:使用 TVM 做边缘设备的模型编译和推理实践

TVM优化Deep Learning GPU算子 TVM优化Deep Learning GPU算子 高效的深度学习算子是深度学习系统的核心。通常,这些算子很难优化,需要HPC专家付出巨大的努力。 端到端张量IR / DSL堆栈TVM使这一过程变得更加容易。 如何在TVM的帮助下编写高性能GPU运算符内核。本文以深度卷积(即topi.nn.depthwise_conv2d_nchw)为例,并演示如何在tensorflow中改进已经手工优化的CUDA内核。在不同的工作负载下,最终版本比tf-1.2中优化的内核快2到4倍,在启用了算子融合的情况下,最终版本快3到 阅读详情

By 超神经

内容一览:本文整理自 OpenBayes贝式计算工程副总裁姜汉在 2023 Meet TVM 上海站的分享,主题为「使用 TVM 做边缘设备的模型编译和推理实践」,HyperAI超神经做了不改变原意的删减整理。

关键词:2023 Meet TVM   机器学习编译   

我是来自 OpenBayes贝式计算的姜汉,我的工作是进行 AI 算法开发和做编译器模型推理。今天的分享从使用者的角度,介绍如何用 TVM 做边缘设备的模型编译和推理实践。

ee9551d148d376755e06e138801adb6f.png

OpenBayes贝式计算提供能够在边缘设备上实现图像分类、目标检测、视频追踪的推理模型。这些模型的使用场景会涉及各种不同的硬件,这产生了一个需求,即希望已训练好的模型能在不同设备上跑起来,这符合 TVM 的使用场景。

今天分享的案例,使用的边缘设备是同时搭载 GPU、NPU 的 RK3588 及 RK3399,使用的 TVM 源码是 v0.10 版本。大家可以根据自己的需求选择是否使用交叉编译。

 在 Mali (GPU) 上进行模型推理 

 前情提要 

Mali (GPU) 基于 ARM 框架,很多硬件都使用 Mali (GPU),很多计算库支持 Mali (GPU)。编译过程中软件选择的是 OpenCL 。

 用 Mali (GPU) 进行模型推理的编译 

首先回顾 TVM 编译流程:

db07c5a31580259b359f18d60d59966d.png

* 导入不同框架的前端模型;

* 生成高层的 RelayIR;

* 生成 TE(张量表示);

* 使用 Auto-Scheduler 进行自动优化;

* 用训练出的优化方案生成后续的 TE 和 TIR;

* 生成底层中间表示 TIR;

* 编译得到对应目标设备的图标代码,生成可执行文件。

这个过程看起来漫长,写代码时却很容易。直接使用时不会涉及很多优化,可以直接加载模型,确定固定的数据尺寸。

d0dfe74fdda7d43e89bc55afd12e88ac.png

这个案例选择了使用 onnx。在使用 TVM 中,不同的前端框架,onnx 需要确定固定的依赖版本,这样使用时更顺畅,避免使用时因版本不对导致操作不兼容。选择 onnx 还需注意,模型和 TVM 支持的 onnx 算子支持列表对应。

经过编译运行,可以导出直接转化的模型。这个模型没有经过优化,只是翻译了一遍。

 使用 Auto Scheduler 优化性能 

使用优化涉及到 Auto-Scheduler 的过程:

7050cca1e5d40be4b23352c37f0d149d.png

Auto-Scheduler 作为 TVM 中无模版的优化模块,会在计算中先把计算图拆成子图,再在每一次迭代中进行提取特征、优化、固定、发到指定硬件上评测性能数据指标的操作。Auto-Scheduler 拿到性能指标后,再返回,让系统进行下一步迭代优化,经过一段迭代轮次后,可以达到迭代目标或者完成迭代次数。

Auto-Scheduler 无模版,使用过程中可以不用定义很多参数范围。

75867c264bde99fa099fea1e41d07f3c.png

如上图,只需定义好网络,把网络放入优化调度中,迭代次数时可设置成 10000 或 20000。模型一般在几个小时内运行完,运行时间会受设备、图片尺寸影响。得到优化模型的可执行文件后,可以加载模型,使用模型处理图像或输入数据,得到更好的性能和识别结果。在 ARM 0 上进行测试,模型效果表现为从普通推理的 200ms 提升到 40ms。

Mali(GPU)是常用设备, TVM 方法有令模型推理少写代码,提升模型性能的效果。

 如何使用 NPU 推理模型 

案例中实验是在有 NPU 的 RK3588 上进行的,NPU 的支持与 GPU 支持差别巨大,想在 NPU 上推理模型,需要 NPU 提供对应的 API 和算子支持列表,硬件需提供对应的支持和开发。用 NPU 进行推理的实践是在 RK3399 上实现的,RK3588 并不支持用 NPU 进行模型推理。

TVM 需实现对应的后端,即 Codegen。不同的厂商提供了多种硬件,目前 NPU 种类多样。这时使用 TVM 可以分为三种情况:

* TVM 本身支持一种 NPU,这种情况可以直接使用 TVM;

* 厂商提供第三方支持,用自己的库接入 TVM 支持;

* 没有支持,只能选择自己使用开源接口进行后续的开发。

使用 BYOC 方法实践 Codegen,下图为编译流程:

1ae142808df0909bc615b37dd390a0de.png

* 生成图的表示,并将其提供给图的引擎,类似 TensorRT(需要第三方支持);

* 生成汇编,编译器生成可执行文件(需提供动态链接库和 Include 头文件);

* 如果 NPU 本身没有支持,需按照以下流程进行。

d1ccdbe381d78ccca3a170a458a491ed.png

实现 NPU 脚本后,可以将脚本应用在 RK3399 上应用 yolo 进行目标检测实践。这引入了一个问题,如何用 TVM 处理更多的模型呢?这一是需要前端的支持,这样 TVM 模型改动较少,遇到的问题就只有模型本身的动态图问题。

有一种解决方式是直接令动态图尺寸固定,这可能影响模型的性能,但后续不再需要额外操作。如果动态部分只在模型开始或是最后出现,可以直接删掉,工程师在后面接写 CPU 代码。

Relax 社区目前在推进解决动态图问题,但是不提倡一味去等社区的工作成果,可以想办法绕过这类问题。

支持更多模型还涉及到一个问题,即后端的不同支持,这和之前提到的 NPU 提供的支持相似,基于硬件厂商已经开放的设备和接口,做相应的 BYOC 支持。

硬件厂商一般给出非常直接的支持:接口开放、给出算子。工程师只需调用算子即可,并不存在很多可以自己调整的部分。这样,接 BYOC 的优化过程好像只是翻译一遍,优化的效果可能不是非常好,但是解决了把不同框架模型转换到硬件上的问题。

实现应用 TVM 后,工作流程提高了效率,很好地加快了开发速度。

 Q&A

Q1:分享一些 TVM 编译步骤在边缘端进行的经验。

A1:主要看硬件怎么搭,如果设备设计的时候就比较完善,像一台小型服务器一样,那么可以直接在上面跑,没必要选择交叉编译。如果系统环境只支持模型驱动,就只能交叉编译。因为盒子已经很小,所以就没必要考虑 Docker 或者其他环境。一般来说,将盒子的环境配成 TVM 编译过程中需要的环境,就和将来执行环境是一套环境,出问题的概率较小。

Q2:能拿到 RK3588 底层的 API 哪些信息?BIOC 这套流程相当于逐段生成对应 API,这样去调 RK3588 硬件,岂不是会在 CPU 和异构设备之间来回倒腾,这种方法的性能相比直接使用 RK3588 提供的 SDK 做 onnx 模型优势在哪?

A2:RK3588 是用不了的,这个问题只能讨论 RK3399。对于 RK3399 有两种办法:

1. 用芯原的 TVM 库。这个库好几年没有用,我将它的代码拿来合并及修 Bug,用它做转载生产代码。

2. 第三方本身支持 TVM ,并需要有一个库。

Q3:将 TVM 部署到具体的 BYOC 硬件遇到什么困难?如果是比较早期的硬件,相应的基础软件不完善的情况下还可以用起来么?使用模拟器?

A3:比较难的部分就是考虑要部署的模型有没有用到它不支持的部分,如果不支持就需要找对应的实现;如果是单纯开发,用模拟器也可以,但我们还是希望能够把模型用起来。因为模拟器是跑在另一个服务器以及非硬件的环境上,只能说在模拟条件能够走通。而且我之前发现能走通模拟器的放到指令硬件上,也有跑不出来的情况。所以我就比较偏向于要么等一等,要么看当下有什么样的条件先跑一下。

Q4:使用 TVM 的考量是什么?

A4:TVM 是一个编译框架。OpenBayes贝式计算本身做算法平台,要提供各种各样的模型,前端现在会有多种框架,后端会有多种设备,硬件也分为 ARM 和 AMD。Openbayes贝式计算平台需要将多样的框架模型转化到多样的硬件的终端下,即有多到多的转化需求,所以选择 TVM。

以上为姜汉在 2023 Meet TVM 上海站的演讲整理内容。接下来,本次活动其他嘉宾分享的详细内容也将陆续在本公众号中发布推出,欢迎持续关注!

获取 PPT:关注微信公众号「HyperAI超神经」,后台回复关键字「TVM 上海」,获取完整 PPT。

 更多资料 

TVM 中文文档:https://tvm.hyper.ai/

GitHub 地址:https://github.com/apache/tvm

 关于 OpenBayes贝式计算

OpenBayes贝式计算是国内领先机器学习及高性能计算服务提供商,通过为新一代异构芯片嫁接经典软件生态及机器学习模型,进而为工业企业及高校科研提供更加快速、易用的数据科学计算产品,其产品已被数十家大型工业场景或头部科研院所所采用。

访问官网:https://openbayes.com/

—— 完 ——

d03a85893e97466d40d623c549f0a50c.jpeg

扫描二维码,加入讨论群

获得更多优质数据集

了解人工智能落地应用

关注顶会&论文

回复「读者」了解更多

更多精彩内容(点击图片阅读)

0b886d029711eb018092d574be38a91b.png

62a0098140409b8f743796d0c280f0f6.png

38abaf7f3c3dd2cd68b213db7fc7385c.png

49e960a261930ed8335e942e54686c3e.gif

TVM自动调度器 TVM自动调度器 随着模型大小,算子多样性和硬件异构性的不断增长,优化深度神经网络的执行速度非常困难。从计算的角度来看,深度神经网络只是张量计算的一层又一层。这些张量计算(例如matmul和conv2d)可以通过数学表达式轻松描述。在现代硬件上为其提供高性能的实现可能会非常具有挑战性。必须应用各种低级优化,利用特殊的硬件内在函数来实现高性能。建立线性代数和神经网络加速库(如CuBLAS,CuDNN,oneMKL和oneDNN)需要大量的工程工作。 如果可以编写数学表达式,将其神奇地转化为有效的代码实现,那么 阅读详情

相关推荐

TVM在ARM GPU上优化移动深度学习

TVM在ARM GPU上优化移动深度学习 随着深度学习的巨大成功,将深度神经网络部署到移动设备的需求正在迅速增长。与在台式机平台上所做的类似,在移动设备中使用GPU可以提高推理速度和能源效率。但是,大多数现有的深度学习框架都不能很好地支持移动GPU。困难在于移动GPU架构和台式机GPU架构之间的差异。这意味着在移动GPU上进行优化需要付出特殊的努力。繁琐的额外工作最终导致大多数深度学习框架中对移动GPU的支持不佳。 TVM通过引入统一的IR堆栈解决了部署不同硬件的困难,通过该IR堆栈可以轻松完成针对不同硬件

吴建明wujianming_110117 1196

使用调度模板和 AutoTVM 以及 AutoSchedule优化 Operator

首先要知道为啥要用这个调优,上一篇说到,咱们tile选择的bn = 32,但是硬件后端多种多样,不一定说32就能得到最好的结果,所以AutoTVM和AutoSchedule可以帮我们在搜索空间中一个个尝试,找到最好的结果(但是哦,大家想一想,搜索空间有局限对不对?) 使用AutoTVM进行调优 import logging import sys import numpy as np import tvm from tvm import te from tvm.autotvm.task import Tas

pkapkaever的博客 596

Windows 安装TVM 及各种报错解决!无GPU版本

TVM安装 模型部署 模型量化

chwei20002005的博客 2734

TVM -- Design and Architecture

本文档适用于想要了解 TVM 架构和/或积极开发项目的开发人员。该页面的组织如下: 示例编译流程概述了 TVM 将模型的高级描述转换为可部署模块所采取的步骤。 要开始使用,请先阅读本节。 逻辑架构组件部分描述了逻辑组件。 后面的部分是针对每个逻辑组件的特定指南,按组件的名称组织。 设备/目标交互页面描述了 TVM 如何与每个受支持的物理设备和代码生成目标进行交互。 请随意查看开发人员操作指南以获取有用的开发技巧。 本指南提供了架构的一些补充视图。 首先,我们回顾了一个端到端的编译流程,并讨论了关键的数据

zachariah2000的博客 4499

TVM(端到端深度学习编译器)简介

算子编译器前后端引入 引入 2021.2.8 和振伟聊了关于HW OD的工作内容,深度上很好的方向, 目前纯OP的high level的设计,业界已经内卷了即难以进步。 torch已经很好用了社区也好,想从纯软件上进步很难。 而硬骨头OP在硬件上的优化比如GPU有前途但研发周期长,人才紧缺,还在缓慢发展中。 TVM是业界有名气的平台,HW的TBE对标TVM 要做一个接口在前端(各种框架)和后端(异构)。 有了前后端的经验,那么整个行业的Edge端都可以用到,市场很大。 ...

wendaocp的博客 1万+

TVM(端到端的优化栈)概述

陈天奇团队宣布推出 TVM,在微博上表示,「我们今天发布了 TVM,和 NNVM 一起组成深度学习到各种硬件的完整优化工具链,支持手机,cuda, opencl, metal, javascript 以及其它各种后端。欢迎对于深度学习,编译原理,高性能计算,硬件加速有兴趣的同学一起加入 dmlc 推动领导开源项目社区 。」 大多数现有系统针对窄范围的服务器级 GPU 进行优化,且需要在包括手机、I...

学渣的博客 6661

AutoSchedule和AutoTVM

简介 AutoTVM 用户自己手写一个模版,在模版里面自己定义一下tune的参数,例如tile size等。给定一个模版,在这个模版里面去搜索参数,使得可以达到一组最好的参数使得张量计算的结果最好。但是,它是一种基于模板的方法,因此仍然需要领域专家为每个平台上的每个算子实现一个性能比较好的模板。今天,TVM 代码库中有超过 15,000 行这些模板的代码。除了非常难以开发之外,这些模板通常效率低下且搜索空间有限,无法实现最佳性能。 Auto Schedule : Template-free Auto Sch

free1993的博客 1519

tvm模型部署c++ 分析

tvm模型部署c++ 分析 tvm c++部署官方教程 https://github.com/apache/tvm/tree/main/apps/howto_deploy https://tvm.apache.org/docs/how_to/deploy/cpp_deploy.html 官方说执行run_example.sh脚本就可以完成部署。 使用C++ API部署TVM模块 提供了一个关于如何在apps/howto_deploy中,部署TVM模块的示例。要运行该示例,可以使用以下命令 cd apps/h

吴建明wujianming_110117 2237

TVM编译器推理加速模型

简单上手深度学习TVM推理框架

Y_snower的博客 1823

一文搞懂 RC Correlation Scale Factor 的生成与应用

pre-route 用的是统计估算模型,post-route 用的是详细布线提取,signoff 用的是第三方 QRC 或 StarRC——三个工具,三套参数体系,结果自然天差地别。不同 RC corner(rc_worst/rc_best/rc_typical)对应不同的工艺角和温度环境,每个 corner 的 R/C 偏差比例不同,必须分别生成和应用各自的 scale factor。别被名字骗了,这个工具专门干一件事——统计拟合两组 SPEF 之间的偏差,自动推荐最优 scaling factor。

weixin_47770727的博客 563

影刀RPA进阶:Excel多条件筛选与数据提取实战

本文详细介绍了如何利用影刀RPA实现Excel多条件筛选与数据提取的自动化。通过拆解文本、数值、日期及颜色筛选等核心指令,并结合实战案例,指导用户构建稳健的销售数据提取机器人,从而高效处理复杂数据报表,提升工作效率。

onion的博客 534

RK3588安装TVM-GPU版本

Mali-G610 是 Arm 公司开发的第三代 Valhall 架构的 GPU。它于 2022 年 7 月发布,面向中端和高端移动设备。Mali-G610 采用 Armv9 架构,具有 10 个核心,每个核心都有 128 个 FP32 ALU。它还支持 FP16、INT8 和 INT4 计算,以及硬件加速的 AI 功能。Mali-G610 的性能比前代 Mali-G57 提高了 20%。它能够在 1080p 分辨率下以 60fps 的帧率运行复杂的游戏和应用程序。核心数:10 个。

weixin_43999691的博客 8947

深入剖析一个卷积块(ConvBlock)

深入剖析一个卷积块(ConvBlock)

qq_45670407的博客 1926

王中阳Go赠书活动第一期:《TVM编译器原理与实践》

随着人工智能的发展,计算机视觉、自然语言处理和语音识别等领域的需求不断增加。为了更好地满足这些需求,许多深度学习框架被开发出来,其中TVM(TVirtual Machine)是一种优秀的编译器,能够将深度学习模型编译为高效的机器码。而且TVM编译器的核心思想,就是将深度学习模型转化为高效的计算图,并优化图中的计算节点。这样一来,模型运行时的计算时间就会大大减少,同时还可以提高模型的功耗效率。TVM编译器的实现过程可以分为三个主要部分:前端、中间层和后端。

王中阳讲编程 2431

java链接opc报异常org.jinterop.dcom.common.JIException: Access is denied解决

记录一下这次从发现问题到解决问题的过程 项目是通过java链接OPC,读取数据,并且发送数据的 程序一直运行正常,最近客户反馈说无法读取数据,通过查看,发现访问异常了。花了2天的时间才解决了这个异常。 org.jinterop.dcom.common.JIException: Access is denied, please check whether the [domain-username-password] are correct. Also, if not already done please c

机器学习菜鸟 1万+

RAGFlow本地部署遇阻:解析进度卡顿的排查与修复指南

本文针对RAGFlow本地部署中常见的文档解析进度卡顿问题,提供了详细的排查与修复指南。核心原因是模型下载网络受阻,解决方案是通过修改环境配置文件,将模型下载源切换至国内镜像站,从而快速解决解析停滞问题。

weixin_29297127的博客 341

TVM 加速模型,优化推断

TVM 是一个开源深度学习编译器,可适用于各类 CPUs, GPUs 及其他专用加速器。它的目标是使得我们能够在任何硬件上优化和运行自己的模型。不同于深度学习框架关注模型生产力,TVM 更关注模型在硬件上的性能和效率。 本文只简单介绍 TVM 的编译流程,及如何自动调优自己的模型。更深入了解,可见 TVM 官方内容: 文档: https://tvm.apache.org/docs/ 源码: https://github.com/apache/tvm 编译流程 TVM 文档 Design and Arch

GoCoding 981

19、英国模式:银行体系的演变与现代金融架构

本文深入探讨了英国银行体系从专业化向全能银行的演变过程,分析了自律监管模式的优劣,并解析了围栏制度对金融稳定的影响。同时,文章还介绍了信用合作社、建筑协会和投资银行的角色与转型,全面展示了英国金融体系的多样性与复杂性,以及其在全球金融市场中的重要作用。

embedding5hiker的博客 105

rk3588(香橙派5pro)使用gpu(tvm)进行推理

香橙派5pro配置tvm驱动gpu跑ai

我叫tacom,是个菜鸟程序员 5112

2026 拉勾网:JA4+指纹绕过 + sign逆向 + 动态城市参数,月采集10万+数据实战

2026年拉勾网反爬技术全面升级,采用JA4+ TLS指纹识别、动态sign签名等多维度防护体系。本文提供工业级爬虫解决方案,通过curl_cffi模拟浏览器指纹、逆向sign加密算法、动态生成城市参数三大核心技术,实现高效稳定的数据采集。系统采用分层架构设计,包含任务调度、签名生成、多线程引擎等模块,单月可获取10万+条招聘数据。重点解析了JA4+指纹识别原理、传统方法的局限性,以及通过HMAC-SHA256算法逆向sign参数的完整过程。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2395

如何使用事务码SMICM分析ABAP代码发起的HTTP请求的错误

当我用CL_HTTP_CLIENT往一个外网的url发请求时,遇到错误:ICM_HTTP_SSL_PEER_CERT_UNTRUSTED 错误是从这段ABAP代码里抛出来的: CALL METHOD lo_http_client->get_last_error IMPORTING code = lv_sysubrc message = ev_error_message. "BREAK-...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3209

tvm学习笔记(五):tvm工作原理

一、总体流程: TVM的工作流程:首先,将网络表示成统一的表示形式(Intermediate Representation),并进行一些可重用的图优化;然后,利用不同的后端生成对应设备代码,如图1所示。 图1 tvm 工...

sinat_31425585的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

使用TVM优化深度学习GPU算子:深度卷积实例

以下内容翻译自:Optimize Deep Learning GPU Operators with TVM: A Depthwise Convolution Example 高效的深度学习算子是深度学习系统的核心。通常这些算子很难优化,并且需要高性能计算专家的努力。TVM,端到端张量IR/DSL堆栈,使得这项任务更容易。 这个博客教你如何在TVM的帮助下编写高性能GPU运算核心。我们使用深度卷...

yiran103的专栏 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

关于tvm的学习记录

1、tvm把用不同框架的机器学习模型导入,然后统一到Relay层,首先搞懂用不同的机器学习框架训练的模型有什么区别?

weixin_52291847的博客 823

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

初探TVM--使用Tensor Engine来编写算子

TVM的tensor expression

shaojie_wang的博客 1697

TVM框架详解

在上面TVM的架构图中,主要包含三个部分内容:Unified IR/*!*//*!/*!/*!*//*!/*!/*!/*!/*!/*!*//*!在该部分中,主要包含三个方面的内容。

探索未知,成就非凡 3749
上一篇: 【TVM 学习资料】快速入门:编译深度学习模型
下一篇: GTC 2023 | 「皮衣刀客」黄仁勋畅谈 AI Top 5,科学计算、生成式 AI、Omniverse 榜上有名
HyperAI超神经
博客等级 码龄7年 8873粉丝 1753原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值