news 2026/8/27 17:04:04

5分钟快速上手 torchprof:pip 安装 + 完整示例,让 PyTorch 模型剖析变得简单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
5分钟快速上手 torchprof:pip 安装 + 完整示例,让 PyTorch 模型剖析变得简单

5分钟快速上手 torchprof:pip 安装 + 完整示例,让 PyTorch 模型剖析变得简单

【免费下载链接】torchprofPyTorch layer-by-layer model profiler项目地址: https://gitcode.com/gh_mirrors/to/torchprof

torchprof是一个专为 PyTorch 打造的逐层模型剖析工具(layer-by-layer model profiler)。只需一行pip install torchprof,你就能快速定位"模型里哪一层最耗时、哪一层最占显存",是 PyTorch 模型性能分析与优化的轻量级好帮手。本文带你 5 分钟完成安装、运行完整示例、读懂剖析报告,并附常见问题解答。


🔍 为什么需要逐层剖析?

训练或推理变慢时,我们常会遇到这样的困惑:

  • 模型整体耗时 2 秒,到底慢在卷积层还是全连接层?
  • 显存不够用了,是哪一层在"偷吃"显存?

time.time()手动计时只能拿到整体耗时;而 torchprof 会基于 PyTorch 内置的 autograd profiler,自动为每一层"挂钩",按树状结构输出每个模块的耗时与内存指标,让瓶颈一目了然。

⚠️ 开始前的版本须知(30秒看完)

项目说明
Python3.5+
PyTorch>= 1.1.0, < 1.9(见 setup.py 依赖声明)
许可证MIT

💡重要提示:由于 PyTorch 1.9 对官方 profiler 做了大改动,torchprof 已标记为弃用(deprecated)。如果你使用的是 PyTorch 1.9 及以上版本,建议直接使用 PyTorch 官方内置的torch.profiler;但如果你维护的是 torch 1.1~1.8 的旧项目,torchprof 依然是最简单的逐层剖析方案。

📦 第一步:pip 安装(10秒)

pip install torchprof

依赖极轻——它只依赖 torch 本身,不引入任何额外重型库,装完即用。

🚀 第二步:完整示例(10行代码跑起来)

下面用 AlexNet 演示最标准的用法(CPU 环境即可运行):

import torch import torchvision import torchprof model = torchvision.models.alexnet(pretrained=False) x = torch.rand([1, 3, 224, 224]) with torchprof.Profile(model) as prof: model(x) print(prof.display(show_events=False))

运行后你会得到一张模块树状报告(节选):

Module | Self CPU total | CPU total | Number of Calls ---------------|----------------|-----------|---------------- AlexNet | | | ├── features | | | │├── 0 | 1.832ms | 7.264ms | 1 │├── 1 | 51.858us | 76.564us | 1 │├── 2 | 75.993us | 157.855us | 1 ... └── classifier | | | └── 6 | 62.258us | 77.356us | 1

📌有 GPU 怎么办?只需两处改动:模型和数据加.cuda(),剖析器加use_cuda=True

model = torchvision.models.alexnet(pretrained=False).cuda() x = torch.rand([1, 3, 224, 224]).cuda() with torchprof.Profile(model, use_cuda=True, profile_memory=True) as prof: model(x)

此时报告会自动扩展出Self CUDA totalCUDA total以及 4 列显存指标,帮你区分"GPU 计算慢"还是"CPU↔GPU 传输慢"。

📊 第三步:读懂剖析报告的 5 个指标

列名含义
Self CPU total该层自身在 CPU 上花的时间(不含子模块)
CPU total该层及其所有子层的 CPU 总耗时
Self CUDA / CUDA totalGPU 端对应指标(需use_cuda=True
Self CPU Mem / CUDA Mem 等该层占用/分配的内存(需profile_memory=True
Number of Calls该层前向被调用的次数

💡 概念小贴士:Self 时间= 这一层自己干的活;total 时间= 自己 + 所有子模块的总账。对比两者,就能找出"哪一层真正吃掉了时间"。

🔬 想看层内的底层算子?

传入show_events=True,即可下钻到每层内部的aten::conv2daten::relu_等底层操作:

print(prof.display(show_events=True))

这样就能回答"卷积慢在 cudnn 卷积核,还是慢在内存整理"这类更深的问题。

🎯 进阶:只剖析你关心的层

大模型逐层剖析开销较大?用paths参数精确指定要剖析的层(路径是元组形式的模块名路径,且不限于叶子层):

paths = [("AlexNet", "features", "3"), ("AlexNet", "classifier")] with torchprof.Profile(model, paths=paths) as prof: model(x) print(prof)

其他层将被自动跳过,只输出你指定的层——调试时特别实用。

🧩 项目结构与源码导读

项目代码非常精简,核心就两个文件,适合通读学习:

文件作用
torchprof/profile.py核心Profile类:遍历模型子模块、为每层forward动态挂钩 profiler
torchprof/display.py将剖析事件汇总成上面的树状表格报告
torchprof/__init__.py对外导出Profile,当前版本 1.4.0
tests/test_profile.py验证 AlexNet 各层的剖析事件结构
tests/test_set_paths.py验证paths参数只剖析指定层
setup.py/requirements.txt打包与依赖(torch 1.7.0 / torchvision 0.8.1 用于测试)

Profile的完整参数一览(定义于torchprof/profile.py):

  • model:要剖析的模型
  • enabled=True:设为False可一键禁用剖析(方便调试开关)
  • use_cuda=False:是否统计 GPU 指标
  • profile_memory=False:是否统计内存(要求 torch ≥ 1.6)
  • paths=None:仅剖析指定路径的层

❓ 常见问题(FAQ)

Q1:报告里为什么只有 CPU 三列?A:默认只统计 CPU。GPU 列需use_cuda=True,内存列需profile_memory=True才会显示。

Q2:运行profile_memory=True时出现 RuntimeWarning?A:说明你的 PyTorch 版本低于 1.6,不支持内存剖析。torchprof 会自动降级为普通模式并继续运行,不影响结果。

Q3:剖析器可以反复使用吗?A:每个Profile实例在with块内不可重入(re-enter 会抛错),退出with后才能调用display()raw()。不过你可以在同一个with块里多次调用model(x),结果会自动聚合,Number of Calls会累加。

Q4:想要原始数据做二次分析?A:调用prof.raw(),会返回 PyTorch 原始的 EventList 数据,可自由导出、绘图或统计。

🏁 小结

你想知道对应操作
哪层最耗时print(prof)看树状报告
哪层占显存profile_memory=True
层内算子细节show_events=True
只看某几层paths=[...]

pip install torchprof到拿到第一张逐层剖析报告,全程不到 5 分钟。对于 torch 1.1~1.8 环境下的 PyTorch 模型性能分析,这是一个零配置、极简依赖的实用选择。快去找出你模型里最慢的那一层吧!🚀

【免费下载链接】torchprofPyTorch layer-by-layer model profiler项目地址: https://gitcode.com/gh_mirrors/to/torchprof

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 17:02:54

WiFi密码字典破解指南:用Wifi-Brute如何找回遗忘的热点密码

WiFi密码字典破解指南&#xff1a;用Wifi-Brute如何找回遗忘的热点密码 【免费下载链接】Wifi-Brute A tool to crack a wifi password with a help of wordlist. This may take long to crack a wifi depending upon number of passwords your wordlist contains. Also it is …

作者头像 李华
网站建设 2026/8/27 17:02:32

MiyooCFW 2.0.0 完整指南:复古掌机固件刷写与电视输出一次搞定

MiyooCFW 2.0.0 完整指南&#xff1a;复古掌机固件刷写与电视输出一次搞定 【免费下载链接】MiyooCFW Custom firmware source code and resources for BittBoy, PocketGo, PowKiddy V90-Q90-Q20 and third party handheld consoles 项目地址: https://gitcode.com/gh_mirror…

作者头像 李华
网站建设 2026/8/27 17:02:29

2000-2024年地级市八大类商品价格指数CPI

数据介绍 居民消费价格指数&#xff0c;是度量一定时期内城乡居民所购买的生活消费品和服务项目价格水平变动趋势和程度的相对数&#xff0c;由国家统计局统一编制发布。它是在特定时段内度量一组代表性消费商品及服务项目的价格水平随时间而变动的相对数&#xff0c;是用来反…

作者头像 李华
网站建设 2026/8/27 17:02:29

构建工具测试要覆盖真实打包链路

构建工具测试要覆盖真实打包链路 1. 线上白屏的警钟&#xff1a;单测全过&#xff0c;打包之后却直接崩溃 上个月的发布中&#xff0c;发生过一起隐蔽的线上事故。 一次核心路由动态导入重构后&#xff0c;本地 Vite 开发环境中的 Vitest 用例均通过。单元测试覆盖率较高&…

作者头像 李华