在 Ubuntu 上安装和使用 nsys
安装
nsys
来自包 cuda-nsight-systems-11-7
(和自己的 CUDA 版本对应一下)。
在网上一直都没有搜到安装方式,官网也说的不明不白。尝试过两个错误的包:
nsight-systems
:这个是 Qt 写的图形界面程序,提供的二进制可执行程序是nsight-sys
。nvidia-nsight
:这个是 Java 写的图形界面程序,提供的二进制可执行程序是nsight
。
使用
用 nsys profile --stat=true xxx
运行完程序后得到 report1.nsys-rep,report 后面的编号是自动增长的,而 --stat=true
表示用文本形式在命令行输出信息。如果有条件可以把 report1.nsys-rep 下载下来然后用本地的图形化程序加载分析。
但是这样导出的程序看不到 CUDA 内存占用。为了看到 CUDA 内存占用情况,考虑:
nsys profile --cuda-um-cpu-page-faults=true \
--cuda-um-gpu-page-faults=true \
--cudabacktrace=all \
--cuda-memory-usage=true \
--gpu-metrics-device=0 <program>
但还是没有成功:
- 从结果来看程序占用了 32 MiB 显存,但是
nvidia-smi
这类工具认为程序占用了 800 MiB 显存。难道是显存分配但未读写的部分不会被计入 nsys? - 受到 paranoid 等级的限制,CPU 无法采样,CUDA backtrace 和 CUDA memory usage 无法开启。
又用 echo 2 | sudo tee /proc/sys/kernel/perf_event_paranoid
改了宿主机(不是容器)的 paranoid 等级(我的容器启动参数有 --pid=host
,没有 --privileged
),可以采样 CPU 了。
现在 nsys-ui
的诊断信息中还有一个错误(之前是两个),看上去是权限不够,得在创建容器的时候给 --cap-add=SYS_ADMIN
。
Caution
不清楚 paranoid 等级具体有什么用,我测试完已经改回去了。
接下来可以考虑的方法:参考 https://stackoverflow.com/questions/38758627 把容器停止,修改参数,然后重启 docker 服务。但是重启整个 docker 服务对我来说不太现实。Commit 现有容器再创建新容器也有点麻烦,就没兴趣继续看下去了。