Nsight System模型性能分析工具入坑记录

文章讲述了作者在Windows环境下使用NsightSystem进行模型性能分析的过程,尤其是在处理缺少GPU信息的问题后,作者介绍了NsightSystem的功能、用途和安装步骤,以及如何编写脚本进行性能分析和优化,展示了从安装到分析的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nsight System模型性能分析工具入坑记录

起因


在windows环境下使用torch的profiler+TensorBoard试图进行模型的性能分析,发现在TB上只有CPU的信息,缺少GPU的信息,试图去社区寻找解决方案,发现早在22年该问题就被提出来了,但是帖子里只有提问而无人解答。所以至此也一直无法解决(本人能力有限,等一个大佬救救孩子)。。。。原帖url:Pytorch官方社区的原帖

于是乎,改变思路转而换成Nsight System进行。但是关于ns用于性能分析的教程较少,我也是啃了一上午官方文档才勉强实现需求。

关于Nsight System

Nsight Systems是一款由NVIDIA开发的性能分析工具,旨在帮助开发人员优化并深入了解其CUDA应用程序的性能特征。以下是关于Nsight Systems的简要介绍:

  1. 用途

    • Nsight Systems用于分析和优化CUDA应用程序的性能,帮助开发人员找到性能瓶颈并实现优化。
  2. 功能特点

    • 提供可视化的性能分析工具,用于捕获和分析CUDA应用程序的执行情况。
    • 支持查看CUDA核心活动、内核执行时间、内存操作、调用堆栈等详细信息。
    • 提供时间线视图、统计信息和图表,帮助用户深入了解应用程序的性能表现。
  3. 适用范围

    • 适用于CUDA应用程序的性能分析和优化。
    • 可用于不同领域的GPU加速应用程序的性能调优,包括深度学习、科学计算、图形渲染等。
  4. 工作流程

    • 用户可以使用Nsight Systems执行性能分析命令,生成性能分析文件。
    • 分析文件可以进一步在Nsight Systems图形化界面中打开,并进行性能分析和优化。
  5. 优势

    • 提供全面的性能分析工具,帮助用户发现应用程序的性能瓶颈。
    • 可视化展示分析结果,方便用户理解和解决性能问题。
    • 支持详细的时间线视图和统计信息,帮助用户精确定位性能瓶颈。

总的来说,Nsight Systems是一款强大的性能分析工具,专为CUDA应用程序开发者设计,帮助他们深入了解和优化应用程序的性能,提高应用程序的效率和性能表现。

下载并安装NS

正片:性能分析流程

  • 我们需要用到两个程序:
    • nsys.exe(位于:安装路径/NVIDIA Corporation\Nsight Systems 2024.2.1\target-windows-x64)
    • nsys-ui.exe(位于:安装路径/NVIDIA Corporation\Nsight Systems 2024.2.1\host-windows-x64)
    • 将nsys.exe加入到环境变量,方便命令行直接调用
  1. 第一步需要我们编写一个py脚本引入我们需要的模型并执行几轮推理,用于给nsys调用收集设备信息。(这是我的,我需要分析MobileNetV2模型)
import torch
import torchvision.transforms as transforms
from torchvision import datasets
from torch.utils.data 
### 寻找 Day2Night 预训练模型 对于图像处理或计算机视觉项目中的 day2night 转换需求,可以考虑使用基于 GAN (Generative Adversarial Networks) 的方法来实现这一目标。这些模型能够学习白天和夜晚场景之间的映射关系,并有效地将日间图像转换成夜间效果。 #### 使用 CycleGAN 实现 Day2Night 转换 CycleGAN 是一种无监督的图像到图像翻译网络,在不需要配对样本的情况下也能很好地工作。这意味着即使没有对应的日夜图片对也可以训练该模型[^1]。 ```python import torch from torchvision import transforms from PIL import Image from cyclegan.models.cycle_gan_model import CycleGANModel def load_day2night_model(model_path='checkpoints/day2night/latest_net_G_A.pth'): device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') opt = { "input_nc": 3, "output_nc": 3, "ngf": 64, "ndf": 64, "netG": "resnet_9blocks", "norm": "instance", "no_dropout": True, "init_type": "normal", "init_gain": 0.02, "gpu_ids":[], "isTrain": False } model = CycleGANModel(opt) state_dict = torch.load(model_path, map_location=device) model.netG_A.load_state_dict(state_dict['model']) return model.to(device) def transform_image(image_path): transform_list = [ transforms.Resize((256, 256)), transforms.ToTensor(), transforms.Normalize(mean=[0.5]*3,std=[0.5]*3)] transform = transforms.Compose(transform_list) img = Image.open(image_path).convert('RGB') tensor_img = transform(img).unsqueeze(0) return tensor_img def apply_day2night_conversion(input_image_path, output_image_path): model = load_day2night_model() input_tensor = transform_image(input_image_path) with torch.no_grad(): result_tensor = model.netG_A(input_tensor) result_image = ((result_tensor.squeeze().permute(1, 2, 0)+1)/2*255).clamp_(0, 255).byte().numpy() from matplotlib.pyplot import imsave imsave(output_image_path, result_image) ``` 此代码片段展示了如何加载预训练好的 CycleGAN 模型并将其用于单张图片的日转夜操作。需要注意的是,实际应用时可能还需要调整参数以适应特定的数据集特性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值