【TVM 教程】PAPI 入门

(一)大话深度学习编译器中的自动调优·寻路 本文深入探讨了深度学习编译器中的自动调优技术,以TVM为例解析如何通过智能策略解决算子优化的组合爆炸问题。文章详细介绍了参数化模板、智能搜索策略和硬件感知评估等关键技术,并展示了AutoTVM在矩阵乘法优化中的实战效果,自动调优后的代码性能接近手工优化水平。 阅读详情

Apache TVM 是一个深度的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。更多 TVM 中文文档可访问→https://tvm.hyper.ai/

性能应用程序编程接口(Performance Application Programming Interface,简称 PAPI)是一个可在各种平台上提供性能计数器的库。在指定的运行期间,性能计数器提供处理器行为的准确底层信息,包含简单的指标,如总循环计数、缓存未命中和执行的指令,以及更高级的信息(如总 FLOPS 和 warp 占用率)。PAPI 的这些指标在 profiling 时可用。

安装 PAPI​

PAPI 可以用包管理器(Ubuntu 上用 apt-get install libpapi-dev 命令)来安装,也可以从 源代码 安装。

由于之前从源代码 pull 最新版本的 PAPI 导致了构建问题,因此推荐 checkout 标记版本 papi-6-0-0-1-t。

使用 PAPI 构建 TVM​

若要在 TVM 构建中包含 PAPI,在 config.cmake 中设置:

set(USE_PAPI ON)

若 PAPI 安装在非标准位置,可指定它的位置:

set(USE_PAPI path/to/papi.pc)

在 Profiling 时使用 PAPI​

若 TVM 是用 PAPI 构建的(见上文),可将 tvm.runtime.profiling.PAPIMetricCollector 传给 tvm.runtime.GraphModule.profile() 来收集性能指标:


import tvm
from tvm import relay
from tvm.relay.testing import mlp
from tvm.runtime import profiler_vm
import numpy as np

target = "llvm"
dev = tvm.cpu()
mod, params = mlp.get_workload(1)

exe = relay.vm.compile(mod, target, params=params)
vm = profiler_vm.VirtualMachineProfiler(exe, dev)

data = tvm.nd.array(np.random.rand(1, 1, 28, 28).astype("float32"), device=dev)
report = vm.profile(
    data,
    func_name="main",
    collectors=[tvm.runtime.profiling.PAPIMetricCollector()],
)
print(report)
Name                                    perf::CACHE-MISSES   perf::CYCLES  perf::STALLED-CYCLES-BACKEND  perf::INSTRUCTIONS  perf::STALLED-CYCLES-FRONTEND
fused_nn_dense_nn_bias_add_nn_relu                   2,494      1,570,698                        85,608             675,564                         39,583
fused_nn_dense_nn_bias_add_nn_relu_1                 1,149        655,101                        13,278             202,297                         21,380
fused_nn_dense_nn_bias_add                             288        600,184                         8,321             163,446                         19,513
fused_nn_batch_flatten                                 301        587,049                         4,636             158,636                         18,565
fused_nn_softmax                                       154        575,143                         8,018             160,738                         18,995
----------
Sum                                                  4,386      3,988,175                       119,861           1,360,681                        118,036
Total                                               10,644      8,327,360                       179,310           2,660,569                        270,044

还可以指定收集哪些指标:

report = vm.profile(
    data,
    func_name="main",
    collectors=[tvm.runtime.profiling.PAPIMetricCollector({dev: ["PAPI_FP_OPS"])],
)
Name                                  PAPI_FP_OPS
fused_nn_dense_nn_bias_add_nn_relu        200,832
fused_nn_dense_nn_bias_add_nn_relu_1       16,448
fused_nn_dense_nn_bias_add                  1,548
fused_nn_softmax                              160
fused_nn_batch_flatten                          0
----------
Sum                                       218,988
Total                                     218,988

运行 papi_avail 和 papi_native_avail 命令可得到可用指标列表。

使用PAPI进行性能测试 PAPI(Performance Application Programming Interface)是一个跨平台的性能计数接口工具集。它提供了一套标准化的API,用于访问硬件性能监测计数器(PMU),在软件中实现高精度的性能分析与优化。PAPI性能测试工具的安装、使用及实例 - Satchmo丶 - 博客园 (cnblogs.com) 阅读详情

相关推荐

TVM(一):简介与安装

简介 TVM是一个用于深度学习系统的编译器堆栈。 它旨在缩小以生产力为中心的深度学习框架与以性能和效率为中心的硬件后端之间的差距。TVM与深度学习框架合作,为不同的后端提供端到端编译。 换句话说,TVM就是一种将深度学习工作负载部署到硬件的端到端IR(中间表示)堆栈。可以表述为一种把深度学习模型分发到各种硬件设备上的、端到端的解决方案。 GitHub:https://github.com/dmlc...

u014448054的博客 1万+

OpenBLAS性能计数器:通过PAPI库监控硬件性能事件

在科学计算、机器学习和数据分析领域,矩阵运算的性能直接决定了应用程序的运行效率。作为开源线性代数库的佼佼者,OpenBLAS以其高性能和跨平台特性被广泛应用于NumPy、TensorFlow等主流框架中。然而,当你调用`dgemm`或`sgemm`等核心函数时,是否思考过这些函数在底层硬件上的真实表现?为什么相同的代码在不同硬件上性能差异可达3倍以上?如何定位矩阵乘法中的缓存失效或指令冲突问题? ...

gitblog_00786的博客 384

【TVM系列二】TVM介绍

文章同步更新在公众号 AIPlayer,欢迎扫码关注,共同进步 目录 一、TVM的工作流程 1、整体流程 2、关键数据结构 3、Transformations 4、搜索空间和基于机器学习的转换 5、目标代码转化 二、逻辑架构组件 三、运行TVM实例 1、交叉编译runtime 2、编译模型 3、运行模型 四、总结 一、TVM的工作流程 TVM主要由两个部分组成: (1)TVM编译器:负责编译和优化模型 (2)TVM runtime:提供目标设备上运行模型的API ..

Flying Cat 6695

linux安装计数软件,【PAPI】Linux下安装PAPI读取硬件性能计数器数据

零、PAPI简介PAPI (Performance Application Programming Interface),它是一套API,通过它可以访问CPU性能计数器,性能性能计数器的数据,例如 L1/L2 Cache,CPU Cycle,CPU Instruction,TLB等.一、安装前提确保内核中安装了 perfctr 模块并且是动态加载方式(modprobe perfctr),并且支持A...

weixin_28795851的博客 617

智能问数系统的完整技术栈与实现逻辑

提取并增强数据库 Schema(含业务语义)选择 LLM(开源 qwen2 / 商业 GPT-4o)构建 RAG 向量库(存储历史问法)实现 SQL 安全校验与权限控制添加结果自然语言解释 + 可视化部署到只读数据库环境🔑核心原则“先保证安全,再追求智能”—— 一个能生成错误 SQL 的智能问数系统,比没有更危险。

我们的征途是星辰大海 1625

激光及激光器超全细节&原理总结

本文详细展示了激光、激光器、PN结、半导体激光器、光纤激光器的原理和应用;

guangwulv的博客 5353

TVM计算图分割--Collage

准确的指定执行平台对于发挥后端全部能力至关重要。后端模板(backend pattern)定义了一组算子和可以直接部署在各个后端的算子组合。然后Collage提供了一个两阶段的抽象,对于简单的pattern,直接列举出全部支持的算子pattern。对于复杂情况,用户可以指定pattern创建规则,如指定简单算子类型和复杂算子融合规则。当融合规则给定,整个计算图上的满足条件的模板都会被保存在后端模板注册表中。

欢迎订阅 -- 小源笔迹 1219

PADS VX2.4差分对设置避坑指南:常见错误与解决方案

本文深度解析了在PADS VX2.4中进行高速PCB设计时,差分对设置的核心要点与常见陷阱。针对Layout规则设置、Router布线实战中的阻抗控制、线长匹配等关键环节,提供了具体的避坑指南和解决方案,帮助工程师确保信号完整性,提升设计质量。

weixin_29216049的博客 359

Ubuntu20.04部署TVM流程及编译优化模型示例

记录自己安装TVM的流程,以及一个简单的利用TVM编译优化模型示例。

Briwisdom的博客 2672

基于STM32的电子时钟设计

基于STM32的电子时钟设计1、设计目的2、设计具体要求3、proteus仿真图4、程序代码 1、设计目的 (1)掌握使用KEIL MDK5进行软件开发的具体流程; (2)掌握硬件电路的设计方法; (3)掌握STM32微控制器的程序设计及代码编写方法。 2、设计具体要求 (1)通过STM32自带的实时时钟功能获取时间信息; (2)在OLED显示屏上显示日期、时、分、秒等时间信息; (3)通过按键可对时间信息进行修改; (4)具有闹钟设定功能; (5)加分项:自行增加其他功能。 3、proteus仿真图 4

唯一的博客 2万+

保姆级避坑指南:在NVMe SSD上安装Ubuntu 24.04,搞定RST错误和分区方案

本文提供在NVMe SSD上安装Ubuntu 24.04的详细指南,解决RST错误和分区方案问题。从BIOS设置到分区策略优化,帮助用户充分发挥NVMe固态硬盘性能,避免常见安装陷阱,实现无痛安装和后期调优。

weixin_26976635的博客 560

TVM 从入门到精通 | 安装 TVM (Part 1)

手把手教学之从源码安装 TVM

HyperAI超神经 3203

关于Fluent模拟中的动态接触角UDF实现,详细设计

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1147

性能调优利器:TVM-CN项目中PAPI全链路性能分析指南

当你花费数周优化深度学习模型架构,却发现部署到生产环境后推理速度远低于预期——90%的开发者都会遇到这种困境。性能分析工具PAPI(Performance Application Programming Interface,性能应用程序编程接口)正是解决这一难题的关键。本文将带你掌握从环境配置到高级指标分析的完整流程,读完你将获得: - 3分钟定位TVM算子性能瓶颈的实战技巧 - 10+核心硬件

gitblog_00750的博客 553

CKAD-CN考试之路----12

显然,对应的value都已经实现了加密.保存退出,等待pod重新创建。确认secret是否被加密。编辑secret文件。

Q先生 446

CKA-题库-简洁参考答案-反复练习20遍-必过!!!

新版CKA考试已于2020年9月1日正式上线! 考试模式:线上考试 考试时间:2小时 认证有效期:3年 软件版本:Kubernetes v1.19 重考政策:可接受1次重考 经验水平:中級 题目数量:17题 题库量小:随机的题目重复率极高 考试时可打开两个浏览器Tab,一个是考试窗口,一个用来查阅官方文档](https://kubernetes.io/docs/) 01 Task - 英文 Create a new ClusterRole named deployment-clusterrole tha.

随笔记录-分享&记忆 7318

终极TVM算子验证实战:构建可靠的深度学习编译器测试体系

在深度学习编译器领域,TVM作为一款开源的深度学习编译器栈,支持CPU、GPU和专用加速器,其算子验证是确保模型正确性和性能的关键环节。本文将带你深入了解TVM算子验证的实战方法,帮助你构建可靠的测试体系,确保每一个算子都能稳定高效地运行。 ## 为什么算子验证对TVM至关重要? 算子是深度学习模型的基本构建块,其正确性直接影响整个模型的准确性。TVM作为一个支持多平台、多后端的编译器,需要确

gitblog_00533的博客 676

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python中的TVM库在量化交易中有哪些应用?

TVM是一个开源的机器学习编译器框架,它的目标是提供一个统一的接口来编译、优化和部署深度学习模型到各种硬件设备上,包括CPU、GPU、FPGA等。TVM通过提供一个中间表示(IR)来抽象不同硬件平台的特性,使得模型可以在不同的设备上高效运行。

股票量化的博客 430

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TVM 深度学习部署库安装(linux环境,持续更新中......)

a、下载源码:git clone --recursive https://github.com/apache/tvm tvm。需要直接从源码进行安装,直接用pip install tvm会失败,虽然直接没有提示失败,但是import tvm会失败。完成后直接python -c "import tvm"即可成功。

weixin_30957413的博客 824

蓝牙模块HM-10手册

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

性能计数器linux,Linux下安装PAPI读取硬件性能计数器数据

零、PAPI简介PAPI (Performance Application Programming Interface),它是一套API,通过它可以访问CPU性能计数器,性能性能计数器的数据,例如 L1/L2 Cache,CPU Cycle,CPU Instruction,TLB等.一、安装前提确保内核中安装了 perfctr 模块并且是动态加载方式(modprobe perfctr),并且支持A...

weixin_39931101的博客 331

TVM代码库结构概述

前言 在看一个开源的项目,之前必须要先了解其代码库的组织结构以及每部分的功能作用。 tvm根目录 首先在TVM的的根目录下,有以下几个子目录,它们一起构成了大量的代码库。 Src:C++ code for operator compilation and deployment runtimes. 用于运算符编译和部署运行时的C++代码。 src/relay:Implementation ...

Ahuier21 4471

【PAPI】Linux下安装PAPI读取硬件性能计数器数据

一、安装前提    确保内核中安装了perfctr动态加载模块,并且支持APIC;    确保perfctr使用正常,所有测试实例能够正常运行;   “perfctr模块安装”请查看“Linux内核编译以及perfctr模块安装”                                           http://blog.youkuaiyun.com/zklth/archive/2010/08/21/5828629.aspx二、安装步骤    摘自papi目录下的INSTALL.txt文件General

风声 5629

PAPI性能测试工具的安装、使用及实例

一、PAPI简介 PAPI是田纳西大学创新计算实验室开发的一组可以在多个处理器平台上对硬件性能计数器进行访问的标准接口,它的目标是方便用户在程序运行时监测和采集由硬件性能计数器记录的处理器事件信息。用户可以使用其提供的high/low api对程序某一段的使用时钟周期数,执行指令数,L1/L2 cache miss/access数,TLB miss数等等都统计出来,使用户能够直观的了解到程序的局...

weixin_30797027的博客 1361

程序性能数据采集工具--PAPI

PAPI PAPI 接口概览 PAPI (Performance Application Programming Interface) 是一组用于访问处理器硬件性能计数器的本地接口,用户可以利用它获得程序运行过程中产生的各种处理器事件的发生次数,进而将这些数据作为评估和分析程序性能的可靠依据,有助于更准确地发现程序性能问题的根源。 不同的处理器会根据自身的体系结构特

shenshanmiaoke的博客 4187

TVM Compiler中文教程:TVM.Relay使用外部库

文章目录TVM.Relay中使用外部库创建一个简单的网络使用cuda后端构建和运行卷积层使用cuDNN实现验证结果结论 TVM.Relay中使用外部库 这篇教程介绍怎么在Relay中使用cuDNN、cuBlas这样的外部库。 Relay在内部使用TVM生成特定目标的代码。例如,使用cuda作为后端,TVM为用户提供的网络生成所有层的cuda kernel代码。但是有时,将设备厂商提供的外部库合并到...

Mars_WH的专栏 3913

深度学习0:数学知识:正态分布1

步骤内容结果1引入e−x2e^{-x^2}e−x2钟形曲线2算它的面积I∫−∞∞e−x2dxI∫−∞∞​e−x2dx3平方变成二重积分I2I^2I24换极坐标简化计算5算出I2πI^2 = \piI2πIπIπ​6代入σ\sigmaσ和μ\muμ做变量替换得到σ2πσ2π​7除以它归一化得到正态分布公式2π2π​不是随便写的,它来自高斯积分∫−∞∞e−x2。

tellmewhoisi的博客 196
上一篇: 在线教程丨北大施柏鑫团队联合贝式计算提出视频实例重绘方法 VIRES,多项性能指标达 SOTA
下一篇: 58k+ star! RAGFlow集成Qwen3 Embedding,轻松处理复杂格式数据;Webclick解锁网页理解新维度
HyperAI超神经
博客等级 码龄7年 8872粉丝 1753原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值