Nsight Systems/Compute 使用分享笔记
本文原视频出自百度培训中心: https://www.bilibili.com/video/BV15P4y1R7VG/?vd_source=a6509cab8ccb8b81d6a70af693cc008f
利用工具:autocut-dev 转录,以及claude2 缩写
prompt:
-
请你根据全文,分章节阐述讲了什么
-
详细讲解一下章节X
全文概括
第一章 介绍了NVIDIA的GPU性能分析工具Nsight的产品组成,它包含了Nsight System、Nsight Compute和Nsight Graphics三个组件,各自用于不同的性能分析场景。
第二章 介绍了Nsight System的功能和特点,它可以进行系统级性能分析,通过pipeline时间线分析CPU和GPU的协同情况,同时支持多进程和多节点应用的分析。
第三章 介绍了Nsight Compute的功能和特点,它可以进行CUDA kernel级别的细粒度性能分析,查看硬件指令执行情况等信息,用于优化kernel性能。
第四章 通过几个案例介绍了Nsight System和Nsight Compute的具体使用,包括分析深度学习训练流程、优化BERT性能、优化矩阵转置kernel等,讲解了如何使用Nsight进行性能分析与优化。
第五章 总结了Nsight的优势,它是一个功能强大的GPU 性能分析平台,可以帮助开发者定位各种性能瓶颈并进行优化,提升CUDA应用的性能。
对于具体使用部分的阐述
Nsight System可以捕获CUDA运行时API调用,如内存复制、kernel启动等,通过pipeline时间线分析CPU和GPU时间占比、空闲状态等。支持添加NVTX注释进行代码注释。输出标准性能分析文件供查看分析。
Nsight Compute可以分析CUDA kernel的细粒度性能数据,如每个thread的stall原因、instruction throughput、memory throughput等。可以比较不同kernel的性能数据。支持汇编代码分析。
案例一利用Nsight System分析深度学习训练流程,发现数据加载阶段GPU空闲时间过长。通过增加DataLoader线程数,缩短GPU空闲时间,提升性能。
案例二利用Nsight System分析BERT训练,发现矩阵乘法kernel占比过高。采用混合精度及TensorCore优化,加速矩阵乘法计算,提升训练吞吐。
案例三利用Nsight Compute分析矩阵转置kernel,发现Global Memory读写效率过低。通过使用Shared Memory优化,解决不连续访问问题,显著提升性能。
以下是分章节阐述
案例一:分析训练流程,增加dataloader并行
案例一利用Nsight System分析一个PyTorch的图像分类模型的训练流程,主要包含以下步骤:
-
构建包含卷积层和全连接层的ResNet模型,以及损失函数和优化器。
-
准备MNIST数据集,并用DataLoader加载,batch size设为128。
-
在训练循环中,调用model进行前向传播计算loss,然后optimizer进行反向传播更新参数。
-
使用Nsight System生成默认配置的时间线分析图,发现GPU在DataLoader阶段出现大量空闲。
-
添加NVTX注释,标记出计算图的主要阶段。重新生成时间线,验证DataLoader阶段GPU空闲。
-
DataLoader使用了单线程,导致GPU等待数据加载。将DataLoader线程数提升到8个,图片加载时间降低8倍。
-
重启分析,GPU空闲时间显著减少。每轮训练时间由460ms降至290ms。
案例二:分析BERT训练,加速乘法计算
案例二利用Nsight System分析基于BERT的transformer模型的训练流程,主要包含以下步骤:
-
构建transformer模型,包含多层encoder和decoder结构。