【深度笔记】模型理论性能计算调研

定义

1. 计算量

FLOP:浮点运算次数(Floating Point Operations)

MAC:乘加累积操作数

FLOPs/S:每秒的FLOP,可视作性能

公式:
在这里插入图片描述
FLOP 公式
ReLU	Hin * Win * Cin
Sigmoid	Hin * Win * Cin*4
Conv	K * K *Cin*Cout * Hout * Wout
DSConv	K * K *Cin * Hout * Wout
FC	J * I
Pool1	Hin * Win * Cin

计算工具:

https://github.com/Lyken17/pytorch-OpCounter
https://github.com/sovrasov/flops-counter.pytorch
https://github.com/facebookresearch/detectron2
https://github.com/rbgirshick/yacs
https://github.com/facebookresearch/pycls

2. 访存量

访存量是指模型计算时所需访问存储单元的字节大小,反映了模型对存储单元带宽的需求。访存量一般用 Bytes(或者 KB/MB/GB)来表示,即模型计算到底需要存/取多少 Bytes 的数据。

在这里插入图片描述

3. 计算密度与计算访存比

计算密度是指一个程序在单位访存量下所需的计算量,单位是 FLOPs/Byte。,用于反映一个程序相对于访存来说计算的密集程度。

计算访存比是每秒计算量与每秒访存量之比。

很多博客把这两个东西混淆了。

  • 举例:
    图1为不同模型计算密度,图2为Resnet50各层的计算密度。

在这里插入图片描述

4. Roofline

RoofLine 模型是一个用于评估程序在硬件上能达到的性能上界的模型,可用下图表示:
在这里插入图片描述

通常情况下Conv,BN,Pool等算子为ComputeBound,relu等算子为MemoryBound。

  1. 理论计算时间

MomoryBond区间:

计算时间= 访存量/带宽

ComputeBond区间:

计算时间= 计算量/算力	

通过这两个公式可以由实际计算时间,获取实际带宽实际算力,再与理论带宽和理论算力做对比。

理论计算密度或者计算访存比只能用来判断单个算子属于哪个区间,再根据这个算子的计算量在模型整体中占比来估算理论性能。

访存量则需要知晓带宽,该信息取决于硬件以及当前数据类型所占字节,通常不会在python框架内计算。

Nvidia相关工具:

Nsight Compute 2020.1 - New Features | NVIDIA Developer

参考:
https://jackkosaian.github.io/files/slides/sc21_abft.pdf
https://developer.nvidia.com/nsight-compute-2020_1-new-features

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

canmoumou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值