nvidia 性能分析工具

总体结构

nsight system

是个系统级的工具,可以综合看系统的全貌。
特别适合于查看那些负载卸载到了GPU上,哪些操作各自耗时多少,CPU是否在等待数据等等。
如下图所示。

另外,只能启动程序并测量,不能attach进程,稍微有点不方便。
可以选择手动start测量。

nsight compute

介绍

可参考https://devblogs.nvidia.com/using-nsight-compute-to-inspect-your-kernels/

Important Features
Interactive kernel profiler and API debugger
Graphical profile report
Result comparison across one or multiple reports within the tool
Fast Data Collection
UI and Command Line interface
Fully customizable reports and analysis rules

试用问题

图形界面直接启动程序始终无法连接上

问题现象:
试图使用该工具观察jupyter-notebook时,图形界面上使用launch启动后,始终报错连接不上(把程序改为/usr/bin/python3也一样),而attach列表中也始终看不到任何进程(使用命令行工具/opt/nvidia/nsight-compute/2019.5.0/nv-nsight-cu-cli –mode=launch 启动也一样)。

问题解决:
nsight compute分析有几个先决条件:
1 必须由compute来启动程序
2 程序必须要走到调用cuda库的地方,compute才能看到并连接上
3 compute默认只监控其启动的主程序,如果是主程序的child启动cuda(jupyter-notebook就属于这类),并且希望使用Interactive Profile模式,需要调用命令行工具nv-nsight-cu-cli –mode=launch –target-processes all启动程序,然后再在图形界面上attach。
注:
Profile模式下有Target Process选项,选择all就无需使用cli了,如下图所示。

问题分析过程:
由于图形界面上看不到任何有效的提示信息,转而考虑使用命令工具,看看有没有有用的提示。
使用如下方式启动nv-nsight-cu-cli –mode=launch后再nv-nsight-cu-cli –mode=attach –hostname 127.0.0.1给出了一个有用的提示。

1
==WARNING== Profiling kernels launched by child processes requires the --target-processes all option

再看nv-nsight-cu-cli 的help信息,原来默认情况下compute只监控主进程不监控child。于是改为如下命令启动。

1
/opt/nvidia/nsight-compute/2019.5.0/nv-nsight-cu-cli  --mode=launch --target-processes all jupyter-notebook

在图形界面中attach仍然看不到任何进程。
考虑到compute需要连接cuda,可能是没有执行到cuda。
在浏览器中连接jupyter-notebook并启动一个工作脚本,
此时图形界面attach列表中就出现了进程。

采集性能时报没有权限,没有出现数据

参考https://developer.nvidia.com/nvidia-development-tools-solutions-ERR_NVGPUCTRPERM-permission-issue-performance-counters。
为了简单起见,在个人电脑上可以直接允许所有用户采集GPU 性能。
在/etc/modprobe.d新建一个文件,写入如下一行,并重启一下就可以了。

1
options nvidia "NVreg_RestrictProfilingToAdminUsers=0"

试用感受

compute是一个比较综合和强大的工具,与intel的vtune类似,它还提供了基本的优化建议。其示例界面如下图所示。

在nvidia gpu调优时应该会起到很好的辅助作用。

NVIDIA Visual Profiler

似乎无法处理较新的GPU,采集不到数据。
考虑到它似乎属于较为旧的工具,暂没有进一步分析不能使用的原因。