Mahender Hari
本次演讲的议程安排如下:
针对每个工具:
当前和未来的重点领域
NVIDIA开发者工具是一套强大的库、SDK和开发者工具,横跨桌面和移动平台,使开发者能够构建、调试、分析和部署利用加速计算硬件的软件。
更多信息请访问:https://developer.nvidia.com/tools-overview
NVIDIA的开发者工具生态系统涵盖了从开发到调试再到性能分析的整个流程:
IDE 集成:
调试器 (Debuggers):
正确性检查器 (Correctness Checker):
性能分析器 (Profiler):
在熟悉的环境中开发和调试 CUDA。
Nsight Visual Studio Edition
Nsight Visual Studio Code Edition
Nsight Eclipse Edition
JupyterLab 扩展
CUDA GDB
帮助识别 CUDA 应用程序中的风险。
Compute Sanitizer 包含多个工具,用于检测不同类型的错误:
文档: https://docs.nvidia.com/compute-sanitizer/
Github 示例: https://github.com/NVIDIA/compute-sanitizer-samples/
下图展示了 compute-sanitizer 运行 memcheck_demo 时的输出,它检测到了一个无效的全局内存写入操作,并提供了详细的错误信息,包括线程、块、地址和主机调用栈。
在熟悉的环境中开发和调试 CUDA。
Compute Debugger
- 支持 FP4/FP6/FP8 格式。
- 提供跨发行版的构建,并带回 TUI shell。
- 支持在 Mobile Linux 和 WSL 上进行后期附加(late attach)。
- 通用后端(所有平台)和性能改进。
Compute Sanitizer
- 支持 Blackwell TCMM A 内存检查。
- Initcheck 现在也覆盖共享内存。
- 支持 Python 调用栈。
- 改进了堆栈可读性。
NVTX 允许开发者标注应用程序源代码,以便在使用调试、跟踪和性能分析工具时实现执行过程的可视化。
<nvtx3/nvToolsExt.h>。nvtxMark("This is a marker");nvtxRangePush("This is a push/pop range");// Do something interesting in the range.nvtxRangePop(); // Pop 必须在与 Push 相同的线程上nvtxRangeId_t rangeId = nvtxRangeStart("This is a start/end range");// Sometime else in the code, not necessarily same thread as start callnvtxRangeEnd(rangeId);下图展示了 NVTX 标记在性能分析器时间轴上的可视化效果。
API 参考链接: https://nvidia.github.io/NVTX/doxygen/index.html 和 https://nvidia.github.io/NVTX/doxygen-cpp/index.html
可以通过 pip install nvtx (https://pypi.org/project/nvtx/) 在 Python 中使用 NVTX。
import time
import nvtx
@nvtx.annotate(color="blue")
def my_function():
for i in range(5):
with nvtx.annotate("my_loop", color="red"):
time.sleep(1)
my_function 和 my_loop 的执行时间和范围。NVTX 是一个完整的生态系统的一部分,与众多 NVIDIA SDK 和库集成,包括:
- 深度学习框架 (DL Frameworks): PyTorch (with Layers), JAX + XLA, TensorFlow
- DeepStream SDK: Accel. GStreamer Plugins, GXF
- Holoscan SDK: GXF
- 数学库 (Math Libraries): cuSPARSE, cuSOLVER, cuBLAS
- 深度学习库 (Deep Learning Libraries): TensorRT, cuDLA
- 通信库 (Comm. Libraries): NVSHMEM, NCCL
- 其他库: cuFile, cuML, cuDF
- NVTX 库: C Headers, C++ wrapper, Python wrapper, 以及新支持的 Fortran wrapper 和 RUST wrapper。
利用 NVTX 和 Nsight Systems 实现更多功能。
下图展示了 Nsight Systems 视图,其中包含了 NVTX 计数器(如吞吐量)和带有扩展负载的事件。当鼠标悬停在一个事件上时,可以看到其附加的元数据,如序列号、读/写大小和自定义消息。
主要特性:
系统级应用程序算法调优:
定位优化机会:
平衡多个 CPU 和 GPU 之间的工作负载:
集成方式: 命令行、独立应用、IDE 集成。
文档/产品链接: https://developer.nvidia.com/nsight-systems
Nsight Systems 的时间轴视图提供了对应用程序执行情况的全面可视化。
Page 16
用户可以对时间轴进行缩放和过滤,以详细观察感兴趣的特定区域,从而进行更深入的性能分析。
Page 17
Page 18
Nsight Systems 现已支持对 Grace CPU 的硬件计数器和指标进行性能分析。
Page 19
CPU 核心和 Uncore 事件:
L3 一致性结构 (Coherency Fabric):
支持可变采样频率。
Nsight Systems 提供了 Grace CPU 的 TopDown 分析方法论,以指导性能优化。
Page 20
Nsight Systems 增强了对 Python 应用程序的性能分析能力。
Page 21
Python 调用栈样本和 CUDA API 回溯:
全局解释器锁 (GIL) 跟踪:
查看流行框架和库中的注解代码范围:
该工具用于处理和分析复杂的、大型的报告或报告集合。
Page 22
可视化随时间变化的使用情况以识别:
可定制的预定义“配方”(Recipes):
用户可以将自己的数据集成到 Nsight Systems 中。
Page 23
"--enable plugin:home,flag1,arg1,arg2=val1,org3=val2,...,valN",标志和参数会在启动时传递给你的进程。
Page 24
Nsight Compute 是一个用于 CUDA 内核分析和调试的强大工具。
Page 25
主要特性:
- 交互式/非交互式内核分析和 CUDA API 调试。
- 内置的引导式分析系统:
- 提供性能优化建议和预估的加速效果。
完全可定制的数据收集和显示:
多种使用方式: 命令行、独立应用、IDE 集成、远程目标分析。
Nsight Compute 的图形用户界面提供了详细的性能指标和引导式分析。
Page 26
Nsight Compute 提供直观的内存层次结构图,以分析数据流和利用率。
Page 27
Nsight Compute 能够将性能指标与源代码、PTX(并行线程执行)代码和 SASS(汇编代码)进行关联。
Page 28
Page 29
Nsight Compute 增加了对 Blackwell 架构中新型 Tensor Memory 的分析支持。
Page 30
内核堆栈大小报告:
改进的范围性能分析:
支持多进程服务 (MPS)*:
通用搜索*:
* 即将推出
在Blackwell GPU上使用硬件事件(HES)进行低开销内核追踪
周期性指标采样:
一套新的主机和目标性能分析API:
Python API:
用于改进可调试性的符号文件
引入 Nsight Copilot
Nsight Copilot in Visual Studio Code
- 帮助用户编写和理解CUDA代码及概念。
- 提供自动补全和代码生成功能。
Nsight Copilot in Nsight Compute
- 帮助用户解答关于Nsight Compute使用、性能分析结果数据和性能优化的问题。
- 提供基于已收集数据的概念性CUDA知识的交互式聊天。
目标
- 提高Nsight工具的易用性:
- 减少对自定义调试构建/容器的需求。
- 简化从"n"个(1000s)节点收集的数据的分析和呈现。
组件
开发者工具教程: 提供涵盖Nsight Systems、Nsight Compute、Compute Sanitizer的示例。
Python性能分析:
.py文件。JupyterLab扩展: 适用于Nsight Systems和Nsight Compute。
提供了一个YouTube播放列表,旨在帮助用户开始使用NVIDIA开发者工具进行CUDA开发。该系列视频将帮助用户提高使用工具的熟练度,并将示例应用到自己的开发环境中。内容涵盖分析性能报告、调试技巧以及优化CUDA代码的最佳实践,主要关注Nsight Compute和Nsight Systems。
视频列表包括:
会议 (Sessions)
- S72527: 比你想象的更容易——使用智能开发者工具调试和优化CUDA
- S72537: 优化多语言科学模拟:一个Grace超级芯片案例研究
- S72867: 面向加速计算的AI开发者工具——稀缺数据并不可怕
- S73224: 使用Nsight Graphics进行混合CUDA/Graphics应用程序的性能分析
- S72435: 探索面向加速计算应用开发的AI辅助开发者工具
实验 (Labs)
- DLI71670: 发现瓶颈——使用Nsight Systems优化AI管道
- DLI71640: AI及其他领域的内核优化——释放Nsight Compute的力量
- DLI72423: 精通Nsight:光线追踪应用的GPU性能分析
- DLI74509: Nsight分析系统:构建自定义Python分析脚本,以单节点和多节点应用揭示性能和瓶颈
与专家交流 (Connect with the Experts)
- CWE72393: 你的开发者工具箱里有什么?CUDA和图形性能分析、优化和调试工具
- CWE72433: CUDA开发者最佳实践
- CWE72456: 性能分析和优化
- CWE73338: 如何在NVIDIA Grace CPU上运行和优化你的工作负载
现场演示 (Live demos)
- 请访问NVIDIA展位的AI辅助开发者工具展台。
开发者工具是免费的,可在线获取,并包含在CUDA工具包中。
支持可通过以下方式获得:
https://forums.developer.nvidia.com/c/developer-tools
更多信息请访问:
https://developer.nvidia.com/tools-overview