热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Pytorchprofilerwithtensorboard.

文章目录前言:你将学到什么?一、准备数据集和模型二、使用profiler来记录执行的事件三、执行profiler四、使用TensorBoard来观察结果


文章目录

  • 前言:你将学到什么?
  • 一、准备数据集和模型
  • 二、使用profiler来记录执行的事件
  • 三、执行profiler
  • 四、使用TensorBoard来观察结果并对模型性能做出分析
  • 最后:总结


前言:你将学到什么?

注意:以下所有的内容均来自pytorch官网,建议想了解profiler的同学可以直接上官网查询。

这篇教程针对的是PyTorch1.8+以上版本新更新的profiler API,目的是实时记录电脑CPU和GPU的工作情况,以更好的提升模型的性能,解决模型遇到的瓶颈。
通过这篇教程,你将学到如何利用TensorBoard和pytorch profiler在一个简单的ResNet (残差)模型来完成模型的性能分析,并将通过此来举一反三。(举一反三要自悟)

学习步骤如下:


  1. 准备需要用到的数据集CIFAR10 dataset和模型ResNet model
  2. 使用profiler来记录执行的事件。
  3. 运行profiler。
  4. 使用TensorBoard来查看结果,并对模型性能进行分析。
  5. 在profiler的帮助下来提升模型的性能。
  6. 用跟高级的方式来分析模型的性能。。

一、准备数据集和模型

Tips:可以跟着我的代码一步一步复制到你的编辑器内,也可以直接复制文末总代码到编辑器内。代码内容一样。

首先Import必要的包,并完成对CIFAR10 dataset的加载和格式转换。

import torch
import torch.nn
import torch.optim
import torch.profiler
import torch.utils.data
import torchvision.datasets
import torchvision.models
import torchvision.transforms as T
transform = T.Compose([T.Resize(224),T.ToTensor(),T.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
train_set = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_set, batch_size=32, shuffle=True)

之后准备我们的模型:

device = torch.device("cuda:0")
model = torchvision.models.resnet18(pretrained=True).cuda(device)
criterion = torch.nn.CrossEntropyLoss().cuda(device)
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
model.train()

定义训练每一批数据的训练步骤:

def train(data):inputs, labels = data[0].to(device=device), data[1].to(device=device)outputs = model(inputs)loss = criterion(outputs, labels)optimizer.zero_grad()loss.backward()optimizer.step()

二、使用profiler来记录执行的事件

Profiler常见的一些参数如下:


  • schedule - callable that takes step (int) as a single parameter and returns the profiler action to perform at each step.

在本例中, 我们设置 wait=1, warmup=1, active=3, repeat=2, profiler将会跳过第一次的iteration, 在第二次训练时候开始warm up, 并记录下接下来三次的iterations, 之后profiler跟踪将变为可用,并调用on_trace_ready(如果设置)。总的来说,这个循环重复两次。在TensorBoard插件中,每个循环都被称为“Span”。

在Wait步骤中,profiler被禁用。在warm up步骤中,profiler开始跟踪,但结果被丢弃。这是为了减少分析开销。分析开始时的开销很高,很容易导致分析结果出现偏差。在active步骤中,profiler工作并记录事件。


  • on_trace_ready - callable that is called at the end of each cycle;

在这个例子中,我们使用torch.profiler.tensorboard_trace_handler来为Tensorboard生成结果文件。在Profiling后,结果文件将保存到’/log/resnet18’目录。将此目录指定为logdir参数,以分析TensorBoard中的profile(配置)。


  • record_shapes - whether to record shapes of the operator inputs.

  • profile_memory - Track tensor memory allocation/deallocation. Note, for old version of pytorch with version before 1.10, if you suffer long profiling time, please disable it or upgrade to new version.

  • with_stack - Record source information (file and line number) for the ops. If the TensorBoard is launched in VSCode (reference), clicking a stack frame will navigate to the specific code line.

代码如下:

prof = torch.profiler.profile(schedule=torch.profiler.schedule(wait=1, warmup=1, active=3, repeat=2),on_trace_ready=torch.profiler.tensorboard_trace_handler('/log/resnet18'),record_shapes=True,with_stack=True)
prof.start()
for step, batch_data in enumerate(train_loader):if step >= (1 + 1 + 3) * 2:breaktrain(batch_data)prof.step()
prof.stop()

三、执行profiler

执行以上代码 ,配置结果会被保存在’/log/resnet18’文件夹中。
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。


四、使用TensorBoard来观察结果并对模型性能做出分析


  1. 安装Pytorch Profiler TensorBoard plugin.
    shell端执行

pip install torch_tb_profiler

  1. 打开TensorBoard
    shell端执行

tensorboard --logdir=/log

Vscode端可以打开Tensorboard,可以看到如下情况:
或者直接从浏览器进入指定的网址也可以。
http://localhost:6007/#pytorch_profiler
1

整个网页展示了模型性能的一个总结,例如中间的GPU Summary显示了你的GPU的配置,和GPU的使用情况等等。

下面的Step Time Breakdown显示了执行每部分所花费的世界,可以看出来,在这个例子中,dataloader花费的时间最多。
在这里插入图片描述
网页最先还有一个Performance Recommendation,会给出你一些优化建议,如下图所示:
它说我们把大量的时间花在了读取数据集上,让我们对数据集的读取多设几个num_workers,或者用multi-process来读取数据。同时也说我们的GPU利用率低,可以让我们通过提升batch_size来提升。
巧了,这正是我之前遇到的一些问题,并记录在自己的blog内了,GPU利用率和显存占用的问题,这现在人家给你自动给出建议了,还是不错的。
1
当然,左边的滑动栏还有其它选项可以展示,这里就不一一展示了,大家可以自己去探索。(就像初玩Terraria时的开荒一样,总能给你意想不到的惊喜)
当然,给个提示,如果在VSCODE内打开的Tensorboard,还可以直接从Tensorboard定位到代码,如何在Vscode内打开Tensorboard


最后:总结

当然,还有一些更多的用法值得去探索,你们可以在官方教程中去探索。因为看完了教程,发现并没有自己需要的东西(只利用pytorch计算param和flops),所以就不再添加那些高级方式来分析模型性能了。


推荐阅读
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • 本文探讨了如何使用pg-promise库在PostgreSQL中高效地批量插入多条记录,包括通过事务和单一查询两种方法。 ... [详细]
  • 本文介绍了Kettle资源库的基本概念、类型及其管理方法,同时探讨了Kettle的不同运行方式,包括图形界面、命令行以及API调用,并详细说明了日志记录的相关配置。 ... [详细]
  • 图神经网络模型综述
    本文综述了图神经网络(Graph Neural Networks, GNN)的发展,从传统的数据存储模型转向图和动态模型,探讨了模型中的显性和隐性结构,并详细介绍了GNN的关键组件及其应用。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • ML学习笔记20210824分类算法模型选择与调优
    3.模型选择和调优3.1交叉验证定义目的为了让模型得精度更加可信3.2超参数搜索GridSearch对K值进行选择。k[1,2,3,4,5,6]循环遍历搜索。API参数1& ... [详细]
  • 本文深入探讨了WebGL与Three.js在构建多样化3D场景中的应用,详细解析了两者如何协同工作以实现高性能的3D渲染,并提供了实践指南。 ... [详细]
  • 本文介绍如何使用 Java 编程语言来判断一个给定的年份是否为闰年,并提供两种不同的实现方法。 ... [详细]
  • 在Win10上利用VS2015构建Caffe2环境
    本文详细介绍如何在Windows 10操作系统上通过Visual Studio 2015编译Caffe2深度学习框架的过程。包括必要的软件安装、环境配置以及常见问题的解决方法。 ... [详细]
  • 图像分类算法的优化策略与实践
    本文探讨了《Bag of Tricks for Image Classification with Convolutional Neural Networks》论文中的多项技术,旨在通过具体实例和实验验证,提高卷积神经网络在图像分类任务中的性能。文章详细介绍了从模型训练加速、网络结构调整到训练参数优化等多个方面的改进方法。 ... [详细]
  • 深入解析 TiDB Binlog:Pump Storage 实现详解(上)
    本文作者赵一霖,将继续探讨 TiDB Binlog 系统中 Pump Storage 的实现细节,包括其核心功能如持久化存储、数据排序及配对等。 ... [详细]
  • 本文基于《GPU编程与CG语言入门》一书的内容,详细介绍了体数据的概念及其在计算机图形学中的应用。文章不仅解释了体数据的基本概念,还探讨了体数据的来源及专业术语。 ... [详细]
author-avatar
Duanzd09
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有