计算GMAC和GFLOPS

这篇具有很好参考价值的文章主要介绍了计算GMAC和GFLOPS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GMAC 代表“Giga Multiply-Add Operations per Second”(每秒千兆乘法累加运算),是用于衡量深度学习模型计算效率的指标。它表示每秒在模型中执行的乘法累加运算的数量,以每秒十亿 (giga) 表示。

乘法累加 (MAC) 运算是许多数学计算中的基本运算,包括矩阵乘法、卷积和深度学习中常用的其他张量运算。每个 MAC 操作都涉及将两个数字相乘并将结果添加到累加器。

可以使用以下公式计算 GMAC 指标:

 GMAC =(乘法累加运算次数)/(10⁹)

乘加运算的数量通常通过分析网络架构和模型参数的维度来确定,例如权重和偏差。

通过 GMAC 指标,研究人员和从业者可以就模型选择、硬件要求和优化策略做出明智的决策,以实现高效且有效的深度学习计算。

计算GMAC和GFLOPS

GFLOPS 代表“每秒千兆浮点运算”,是用于衡量计算机系统或特定运算的计算性能的指标。它表示每秒执行的浮点运算次数,也是以每秒十亿 (giga) 表示。

浮点运算包括涉及以 IEEE 754 浮点格式表示的实数的算术计算。这些运算通常包括加法、减法、乘法、除法和其他数学运算。

GFLOPS 通常用于高性能计算 (HPC) 和基准测试,特别是在需要繁重计算任务的领域,例如科学模拟、数据分析和深度学习。

计算 GFLOPS公式如下:

 GFLOPS =(浮点运算次数)/(以秒为单位的运行时间)/ (10⁹)

GFLOPS 是比较不同计算机系统、处理器或特定操作的计算性能的有用指标。它有助于评估执行浮点计算的硬件或算法的速度和效率。GFLOPS 是衡量理论峰值性能的指标,可能无法反映实际场景中实现的实际性能,因为它没有考虑内存访问、并行化和其他系统限制等因素。

GMAC 和 GFLOPS 之间的关系

 1 GFLOP = 2 GMAC

如果我们想计算这两个指标,手动写代码的话会比较麻烦,但是Python已经有现成的库让我们使用:

ptflops 库就可以计算 GMAC 和 GFLOPs

 pip install ptflops

使用也非常简单:

 importtorchvision.modelsasmodels
 importtorch
 fromptflopsimportget_model_complexity_info
 importre
 
 #Model thats already available
 net=models.densenet161()
 macs, params=get_model_complexity_info(net, (3, 224, 224), as_strings=True,
 print_per_layer_stat=True, verbose=True)
 # Extract the numerical value
 flops=eval(re.findall(r'([\d.]+)', macs)[0])*2
 # Extract the unit
 flops_unit=re.findall(r'([A-Za-z]+)', macs)[0][0]
 
 print('Computational complexity: {:<8}'.format(macs))
 print('Computational complexity: {} {}Flops'.format(flops, flops_unit))
 print('Number of parameters: {:<8}'.format(params))

结果如下:

 Computational complexity: 7.82 GMac
 Computational complexity: 15.64 GFlops
 Number of parameters: 28.68 M

我们可以自定义一个模型来看看结果是否正确:

 importos
 importtorch
 fromtorchimportnn
 
 classNeuralNetwork(nn.Module):
     def__init__(self):
         super().__init__()
         self.flatten=nn.Flatten()
         self.linear_relu_stack=nn.Sequential(
             nn.Linear(28*28, 512),
             nn.ReLU(),
             nn.Linear(512, 512),
             nn.ReLU(),
             nn.Linear(512, 10),
         )
 
     defforward(self, x):
         x=self.flatten(x)
         logits=self.linear_relu_stack(x)
         returnlogits
     
 custom_net=NeuralNetwork()
 
 macs, params=get_model_complexity_info(custom_net, (28, 28), as_strings=True,
                                         print_per_layer_stat=True, verbose=True)
 # Extract the numerical value
 flops=eval(re.findall(r'([\d.]+)', macs)[0])*2
 
 # Extract the unit
 flops_unit=re.findall(r'([A-Za-z]+)', macs)[0][0]
 print('Computational complexity: {:<8}'.format(macs))
 print('Computational complexity: {} {}Flops'.format(flops, flops_unit))
 print('Number of parameters: {:<8}'.format(params))

结果如下:

 Computational complexity: 670.73 KMac
 Computational complexity: 1341.46 KFlops
 Number of parameters: 669.71 k

我们来尝试手动计算下GMAC,为了演示方便我们只写全连接层的代码,因为比较简单。计算GMAC的关键是遍历模型的权重参数,并根据权重参数的形状计算乘法和加法操作的数量。对于全连接层的权重,GMAC的计算公式为

(输入维度 x 输出维度) x 2

。根据模型的结构,将每个线性层的权重参数形状相乘并累加得到总的GMAC值。

 importtorch
 importtorch.nnasnn
 
 defcompute_gmac(model):
     gmac_count=0
     forparaminmodel.parameters():
         shape=param.shape
         iflen(shape) ==2:  # 全连接层的权重
             gmac_count+=shape[0] *shape[1] *2
     gmac_count=gmac_count/1e9  # 转换为十亿为单位
     returngmac_count

根据上面给定的模型,计算GMAC的结果如下:

 0.66972288

GMAC的结果是以十亿为单位,所以跟我们上面用类库计算的结果相差不大。最后再说一下,计算卷积的GMAC稍微有些复杂,公式为

((输入通道 x 卷积核高度 x 卷积核宽度) x 输出通道) x 2

,这里给一个简单的代码,不一定完全正确,供参考

 defcompute_gmac(model):
     gmac_count=0
     forparaminmodel.parameters():
         shape=param.shape
         iflen(shape) ==2:  # 全连接层的权重
             gmac_count+=shape[0] *shape[1] *2
         eliflen(shape) ==4:  # 卷积层的权重
             gmac_count+=shape[0] *shape[1] *shape[2] *shape[3] *2
     gmac_count=gmac_count/1e9  # 转换为十亿为单位
     returngmac_count

https://avoid.overfit.cn/post/338fd20f0d014afabe273aaca4b05408文章来源地址https://www.toymoban.com/news/detail-459096.html

到了这里,关于计算GMAC和GFLOPS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GMAC网卡Fixed-Link模式

    GMAC fixed-link 固定链接模式,mac与对端的连接方式是写死的,通常用于mac to mac(不排除mac to phy的情况)。内核要支持 fixed-link 模式,需要打开 CONFIG_FIXED_PHY 配置。 社区版linux的gmac网卡platform平台驱动中,在设备树默认下支持 fixed-link ,gmac网卡platform平台驱动默认不支持ACPI模式

    2024年02月05日
    浏览(18)
  • 【网络BSP开发经验】Linux gmac驱动调试

    网络设备驱动是linux内核中三大类设备驱动之一,它用来完成高层网络协议的底层数据传输及设备控制。 网络设备与其他两种设备的区别: 网络接口不存在于linux的文件系统中,及/dev下没有设备文件,用户通过套接口socket函数使用网络。 网络除了响应来自内核的请求外,还

    2024年02月10日
    浏览(35)
  • 深度学习基础之GFLOPS(2)

    神经网络的GFLOPS(Giga FLoating-Point Operations Per Second)代表了神经网络模型执行计算的速度和计算能力。这可以用一个类比来解释: GFLOPS就像神经网络模型的\\\"运算速度\\\"标签。 想象你有两个数学家,他们都能够解决复杂的数学问题,但一个速度非常快,另一个速度较慢。GFLOPS就

    2024年02月07日
    浏览(14)
  • openssl3.2 - 官方demo学习 - mac - gmac.c

    使用GMAC算法, 设置参数(指定加密算法 e.g. AES-128-GCM, 设置iv) 用key执行初始化, 然后对明文生成MAC数据 官方注释给出建议, key, iv最好不要硬编码出现在程序中

    2024年01月16日
    浏览(44)
  • 深度学习进阶篇[9]:对抗生成网络GANs综述、代表变体模型、训练策略、GAN在计算机视觉应用和常见数据集介绍,以及前沿问题解决

    【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、

    2024年02月08日
    浏览(98)
  • 【易混区分】 tensor张量 Numpy张量的各种矩阵乘法、点积的函数对比 (dot, multiply,*,@matmul)

    又称为数量积、标量积(scalar product)或者内积(inner product) 它是指实数域中的两个向量运算得到一个实数值标量的二元运算。也就是对应元素的位置相乘 举例: 对于向量 a = ( x 1 , y 1 ) 和 b = ( x 2 , y 2 ) ,他们的点积就是 a ⋅ b = x 1 x 2 + y 1 y 2 a=(x_1,y_1)和b=(x_2,y_2),他们的点

    2024年01月25日
    浏览(46)
  • 【EAI 010】MultiPLY: A Multisensory Object-Centric Embodied Large Language Model in 3D World

    论文标题:MultiPLY: A Multisensory Object-Centric Embodied Large Language Model in 3D World 论文作者:Yining Hong, Zishuo Zheng, Peihao Chen, Yian Wang, Junyan Li, Chuang Gan 作者单位:UMass Amherst, UCLA, MIT-IBM Watson AI Lab 论文原文:https://arxiv.org/abs/2401.08577 论文出处:– 论文被引:–(02/02/2024) 项目主页:

    2024年02月22日
    浏览(45)
  • STM32编译错误:…\OBJ\USART.axf: Error: L6200E: Symbol __stdout multiply defined

    STM32编译错误: …OBJUSART.axf: Error: L6200E: Symbol __stdout multiply defined (by stdio_streams.o and usart.o). 在usart.c中添加代码:

    2024年02月15日
    浏览(47)
  • Leetcode 3035. Maximum Palindromes After Operations

    Leetcode 3035. Maximum Palindromes After Operations 1. 解题思路 2. 代码实现 题目链接:3035. Maximum Palindromes After Operations 这一题的话因为可以任意交换,因此事实上要考察回文的最大个数,我们只需要统计所有单词当中字符出现的频次,看看他们能组成多少回文即可。 而这部分,我们只

    2024年02月19日
    浏览(39)
  • CUDA小白 - NPP(2) - Arithmetic and Logical Operations(1)

    cuda小白 原文链接 NPP GPU架构近些年也有不少的变化,具体的可以参考别的博主的介绍,都比较详细。还有一些cuda中的专有名词的含义,可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus,可以看这里。 如有问题,请指出,谢谢 Arithmetic Operati

    2024年02月10日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包