Pytorch 计算深度模型的大小

news2024/12/25 12:36:27

计算模型大小的方法

卷积 时间复杂度 与 空间复杂度 的计算方式:
在这里插入图片描述

C 通道的个数,K卷积核大小,M特征图大小,C_l-1是输入通道的个数,C_l是输出通道的个数

1 模型大小 MB

计算模型的大小的原理就是计算保存模型所需要的存储空间的大小,一般以字节为单位,由于模型常常较大,通常使用 MB (million byte)为单位,在算法层面是就是空间复杂度。

NOTE: 有的地方算 参数量 or 模型大小 会x4,因为模型参数一般都是FP32存储的,FP32是单精度,占4个字节

计算方式:

# 计算了
total_params = sum(p.numel() for p in model.parameters())
total_params += sum(p.numel() for p in model.buffers())

print(f'{total_params:,} total parameters.')
print(f'{total_params/(1024*1024):.2f}M total parameters.')
total_trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad)
    
print(f'{total_trainable_params:,} training parameters.')
print(f'{total_trainable_params/(1024*1024):.2f}M training parameters.')

2 计算量 FLOPs

算法的时间复杂度,每秒浮点数运算的次数

  • 计算量的要求是在于芯片的floaps(指的是gpu的运算能力)
  • 参数量取决于显存大小

3 相关第三方库

3.1 torchstat

安装

pip install torchstat

用法

from torchstat import stat

model = CNN()
stat(model, (3, 224, 224))

版本报错解决:https://blog.csdn.net/u013963578/article/details/133672751

输出:

  • params: 网络的参数量
  • memory: 节点推理时候所需的内存
  • Flops: 网络完成的浮点运算
  • MAdd网络完成的乘加操作的数量。一次乘加=一次乘法+一次加法,所以可以粗略的认为Flops ≈2*MAdd
  • MemRead: 网络运行时,从内存中读取的大小
  • MemWrite: 网络运行时,写入到内存中的大小
  • MemR+W: MemR+W = MemRead + MemWrite

torchstat存在的问题:

1.torchstat bug

版本问题输入为None

解决:修改源码 torchstat/reporter.py

df = df._append(total_df)

2.不能计算含有Transformer结构的模型大小

3.2 torchsummary

安装

pip install torchsummary

使用

model.to(torch.device("cuda:0"))
torchsummary.summary(model, input_size, batch_size=-1, device="cuda")

BUG修复

修改torchsummary.py源码

# 注销源码
# summary[m_key]["input_shape"] = list(input[0].size())
# summary[m_key]["input_shape"][0] = batch_size

# input 为 None的时候等于input
if len(input) != 0:
    summary[m_key]["input_shape"] = list(input[0].size())
    summary[m_key]["input_shape"][0] = batch_size
else:
    summary[m_key]["input_shape"] = input

torchsummary支持对Transformer模型大小的计算

3.3 thop

安装:

pip install thop

使用:

from thop import profile
input_size = (1, 3, 512, 512)
a = torch.randn(input_size)
flops, params = profile(model=model, inputs=(a, ))  # 注意 逗号

print(f"flops: {flops / 1e9} GFlops")
print(f"params: {params / 1e6} MB")

参考:

计算原理:https://blog.csdn.net/hxxjxw/article/details/119043464
计算Param 和 GFlops https://blog.csdn.net/qq_41573860/article/details/116767639
torchstat 输出参数解析 https://blog.csdn.net/m0_56192771/article/details/124672273
torchsummary bug 解决 tuple out of index https://blog.csdn.net/onermb/article/details/116149599
thop:https://blog.csdn.net/qq_21539375/article/details/113936308
参数大小与计算量:https://blog.csdn.net/qq_40507857/article/details/118764782
总结:https://blog.csdn.net/qq_41573860/article/details/116767639

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1620528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sprinboot+人大金仓配置

1. .yml 配置 spring:datasource:type: com.alibaba.druid.pool.DruidDataSource#driverClassName: dm.jdbc.driver.DmDriver## todo 人大金仓driverClassName: com.kingbase8.Driverdruid:## todo 人大金仓master:url: jdbc:kingbase8://111.111.111.111:54321/dbname?cu…

区块链钱包开发——专业区块链开发

随着区块链技术的发展,钱包开发成为了一项至关重要的任务。本文将探讨区块链钱包开发的重要性,分析当前面临的挑战,并展望未来的发展趋势。 一、区块链钱包概述 区块链钱包是一种用于存储和管理数字货币的软件工具。它为用户提供了一个安全的…

巧用断点设置查找bug【debug】

默认设置的断点,当代码运行到断点处MCU就会被挂起,从而停在断点处。 但在某些情况下,如调试FCCU时,如果设置断点,MCU停下后将会导致 FCCU 配置WDG超时。或在调试类似电机控制类的应用时,不适当的断点会导 致…

中科院1区TOP ! 影响因子8.5,稳定检索33年口碑老刊,另附同领域SCI,录用快,手慢无!

【SciencePub学术】今天小编给大家带来了一本计算机类的高分优刊解读,隶属于Elsevier出版社,JCR1区,中科院1区TOP,影响因子高达8.5,领域相符的学者可考虑! Expert Systems With Applications 1 期刊概况 …

代码随想录算法训练营第四十八天| LeetCode198.打家劫舍、213.打家劫舍II、337.打家劫舍III

一、LeetCode198.打家劫舍(线性) 题目链接/代码讲解/视频讲解:https://programmercarl.com/0198.%E6%89%93%E5%AE%B6%E5%8A%AB%E8%88%8D.html 状态:已解决 1.思路 这个题的关键就在于想清楚如何抉择某个房间偷不偷的问题。根据题…

Axure RP 9 for Mac/win:打造极致交互体验的原型设计神器

在数字化浪潮席卷全球的今天,原型设计作为产品开发的关键环节,其重要性不言而喻。Axure RP 9,作为一款专为设计师和开发者打造的原型设计软件,以其出色的交互设计能力和高效的协作体验,赢得了广大用户的青睐。 Axure …

不同语种下的应用该如何测试?

在测试的过程中,我们有时候会遇到不同语种的页面,通常涉及到国际化(Internationalization, i18n)和本地化(Localization, l10n),在测试的过程中如何保障不同语种软件或应用质量,值得…

xgp会员一年多少钱?xgp一个月多少钱?微软商店xgp会员价格指南

xgp是xbox游戏平台。xgp是类似于steam、epic等,拥有丰富游戏资源的平台。该平 台的全称为“XBox Game Pass”,俗称为“西瓜皮”。xgp是会员订阅模式,开启会员后,所有游戏资源都为你开放。pc版的,第一个月10港币&#x…

1688代采系统:解决全球化采购难题的技术创新

跨境寻源通(1688代采系统)是面向全球化采购市场的一项技术创新,它旨在帮助企业更高效、便捷和安全地进行跨境采购。以下是这项服务的几个关键特点: 多语言支持:跨境采购往往面临语言障碍问题,而跨境寻源通…

XxlJob外网访问

Xxl-Job使用外网访问 服务注册中心配置 ### web server.port8088 server.servlet.context-path/xxl-job-admin### actuator management.server.base-path/actuator management.health.mail.enabledfalse### resources spring.mvc.servlet.load-on-startup0 spring.mvc.static…

大功率回馈式直流电子负载箱优点和应用

大功率回馈式直流电子负载箱是先进的电力设备,它能够模拟各种复杂的负载情况,对电源进行测试和校准。这种设备具有许多优点,被广泛应用于各种领域。 大功率回馈式直流电子负载箱具有高精度和高稳定性。它能够精确地模拟各种负载情况&#xff…

CISC和RISC

CISC(Complex Instruction Set Computer)和RISC(Reduced Instruction Set Computer)是两种不同的计算机架构哲学,它们在指令集的设计、性能优化、硬件复杂度以及应用领域上有着根本的区别。 CISC(复杂指令…

皮带机巡检解决方案

在化工行业中、皮带机人工巡检存在的疲劳安全、巡检质量、数据分析等问题,通过以智能巡检机器人为中心的设备生命周期运维管理系统,完成对皮带机的巡检巡逻和排查预警,有效降低人员和设备的安全隐患,更助力企业运维水平和智能化作…

极快!宝藏EI,2-4周录用,接受范围广!

本周投稿推荐 SSCI • 2/4区经管类,2.5-3.0(录用率99%) SCIE(CCF推荐) • 计算机类,2.0-3.0(最快18天录用) SCIE(CCF-C类) • IEEE旗下,1/2…

后端程序员利用 AI 给网站制作专业 favicon

看看你的 Chrome 浏览器顶部的标签页,每个标签页前面有一个小小的图标,这个就是 favicon,如果你将网页保存到收藏夹,前面也会是这个小图标。这个图标有时候就是网站的 Logo,有时候也不太一样。 上面截图中&#xff0c…

leetcode 每日一题目 (树的直径 +DFS的深刻理解)

如下是题目的简单描述: 给你一棵二叉树的根节点 root ,二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟,感染 将会从值为 start 的节点开始爆发。 每分钟,如果节点满足以下全部条件,就会被感染&…

代码随想录算法训练营第四十九天| LeetCode121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

一、LeetCode121. 买卖股票的最佳时机 题目链接/文章讲解/视频讲解:https://programmercarl.com/0121.%E4%B9%B0%E5%8D%96%E8%82%A1%E7%A5%A8%E7%9A%84%E6%9C%80%E4%BD%B3%E6%97%B6%E6%9C%BA.html 状态:已解决 1.思路 学了双指针的同学可能会下…

LeetCode 热题 100 Day06

矩阵相关题型 Leetcode 48. 旋转图像【中等】 题意理解: 将一个矩阵顺时针旋转90度,返回旋转后的矩阵。 要求: 在原地修改,不借助额外的空间 如果可以使用辅助数组来实现转置,则有 matrix_new[i][j]matrix[j][row-i-1]; 解…

【图片格式转换】ICO、JPG、JPEG、PNG图片格式在线免费转换

ICO、JPG、JPEG、PNG图片格式转换 图片格式转换 https://orcc.online/image 支持ICO、JPG、JPEG、PNG等 主页 https://www.orcc.online 其他工具 pdf在线免费转word文档 https://orcc.online/pdf 时间戳转换 https://orcc.online/timestamp Base64 编码解码 https://orcc…

书生·浦语大模型开源体系(四)作业

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…