A White Paper on Neural Network Deployment
  • ❤️‍🔥A White Paper on Neural Network Deployment
    • ❤️‍🔥A White Paper on Neural Network Deployment
    • 🤠CUDA
      • 🤑CPU|GPU程序执行流程
      • 🤗QiuckLearnFromPicture
      • 🤒GPU编程模型
      • 🫣线程束和线程束分化|Warp
      • 🤭Reduction|并行规约
      • 🤔全局内存(Global Memory)访问模式
      • 🫢Share Memory|共享内存|Bank Conflicts
      • 😷CUDA流和事件
      • 🫡Nsight system和Nsight compute
      • 🤫Grid-Stride Loops
    • 😄ONNX
      • 😉ONNX中的各类Proto
      • 🤔onnx->torch
      • 🥳0x00自定义算子
      • 😕0x01自定义算子
      • 🥴ONNX 模型的修改与调试
      • 😆ONNX中的一些概念
      • 😍用python操作ONNX
      • 🥹ONNX中的广播机制
      • 🤣外部数据
      • 🥰ONNX Model hub
      • 😘ONNX IR(Intermediate Representation)
      • 🥳ONNX后端
      • 🥸概述
    • 🐶TensorRT
      • 🐱TensorRT快速入门指南
      • 🐭文档简介
      • 🐹TensorRT的功能
      • 🐰TensorRT的C++接口解析
      • 🦊TensorRT的Python接口解析
      • 🐻TensorRT如何工作
      • 🐼trtexec的使用
      • 🐻‍❄️实战:解析onnx模型保存为engine文件|from scratch
      • 🐨实战:加载engine文件并执行推理|from scratch
      • 🐯手撕TensoRT源码|0x00
    • 🫶模型量化和剪枝
      • 🖕IEEE754标准
      • 🫰浮点运算产生的误差
      • 🤲映射和偏移
      • 🫴quantization from scratch|python
      • 👏动态量化范围
      • 🤝量化粒度
      • 👍校准
      • 👊Post-Training Quantization
      • ✊Quantization-Aware Training
      • 🤞pytorch-quantization使用文档
      • ✌️Polygraphy-Cheatsheet
    • 🤺杂文不杂
      • 😾Roofline_model
      • 🤖模型部署的几大误区
      • 😽手算Ampere架构各个精度的Throughout
      • 😻Tensor Core VS CUDA Core
      • 😺PNNX计算图结构剖析
      • 🎃融合BN和Conv层
      • 👾深度神经网络编译器原理简介
      • 👽在WSL2上安装CUDA_cuDNN_TensorRT
    • 🍀CPP
      • 🪵lamda表达式|C++11
      • 🌴智能指针|C++11
      • 🌲右值引用|移动语义|完美转发|C++11
      • 🫑emplace_back 减少内存拷贝和移动|C++11
      • 🥬多线程|互斥锁|条件变量|C++11
      • 🥒异步操作|C++11
      • 🍆原子变量|CAS操作|内存顺序|C++11
      • 🍏对象生存期和资源管理|RAII设计思想
      • 🍎Pimpl设计模式|编译防火墙
      • 🌶️std::variant|C++17
      • 🫛std::any|C++17
    • 🩷部署实战
      • ❤️yolov8Multitask
      • 💚yolov5
      • 🧡pointpillars
      • 💛centerpoint
      • 🩵deepstream
      • 💜BEVfusion
      • 💙BEVLane
      • 🖤Occupancy
    • ☯️重点参考书籍
Powered by GitBook
On this page
  • Nsight systems
  • Nsight compute
  • 如何使用(推荐使用ssh远程)
  • 两者的不同

Was this helpful?

Edit on GitHub
  1. A White Paper on Neural Network Deployment
  2. CUDA

Nsight system和Nsight compute

PreviousCUDA流和事件NextGrid-Stride Loops

Last updated 1 year ago

Was this helpful?

Nsight systems

  1. 对kernel执行和memory进行timeline分析,尝试寻找是否可以优化

  • 隐藏memory access

  • 多流调度

  • 删除冗长的memory access

  • 融合kernel减少kernel launch的overhead

  • CPU与GPU的overlapping

  1. 分析DRAM以及PCIe带宽的使用率 ,可以从中分析到哪些带宽没有被充分利 用,从而进行优化

  1. 分析SM中warp的占用率,可以从中知道一个SM中资源是否被用满

Nsight compute

  1. roofline analysis 对核函数进行roofline analysis, 并且根据baseline进行优化比较

  1. occupancy analysis 对核函数的各个指标进 行估算一个warp的占用率的变化

  1. memory bindwidth analysis 针对核函数中对各个memory的数 据传输的带宽进行分析,可以比较 好的理解memory架构

  1. shared memory analysis 针对核函数中对shared memory访 问以及使用效率的分析

如何使用(推荐使用ssh远程)

  • 方法一:在host端使用Nsight进行ssh远程profiling

  • 方法二:在remote端使用Nsight进行直接profiling

  • 方法三:在remote端通过CUI获取statistics之后传输到 host端进行查看

  • 方法四:在remote端直接使用CUI进行分析

两者的不同

Nsight systems :偏重于可视化application的整体的profiling以及各个细节指标,比如说

  • PCIe bindwidth

  • DRAM bindwidth

  • SM Warp occupancy

  • 所有核函数的调度信息

  • 所有核函数的执行时间,以及占用整体时间的比例

  • 多个Stream之间的调度信息

  • 同一个stream中的多个队列的调度信息

  • CPU和GPU之间的数据传输耗时

  • Application整体上的各个核函数以及操作的消耗时间排序

  • 捕捉同一个stream中的多个event

整体上会提供一些比较全面的信息,我们一般会从这里得到很多信息进而进行优化

Nsight compute :偏重于可视化每一个CUDA kernel的profiling以及各个细节指标,比如说

  • SM中计算吞吐量

  • L1 cache数据传输吞吐量

  • L2 cache数据传输吞吐量

  • DRAM数据传输吞吐量

  • 当前核函数属于计算密集型还是访存密集型 ,Roofline model分析

  • 核函数中的L1 cache的cache hit几率, cache miss几率的多少

  • 核函数中各个代码部分的延迟 ,精确到代码部分进行highlight

  • 核函数的load bandwidth, store bandwith, load次数, store次数

  • L1 cache/shared memory, L2 cache, global memory中的memory access scheduling

  • 设置baseline,来进行核函数的优化前后的效率对比

整体上能够得到一个针对某一个kernel的非常精确的profiling,源码级别的性能捕捉,以及优化推荐。

❤️‍🔥
🤠
🫡