【TVM 教程】PAPI 入门

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_availpapi_native_avail 命令可得到可用指标列表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值