| 工具 | 定位 | 常见可执行文件 |
| Nsight Systems | 系统级时间线/采样分析(CPU+GPU+IO+OS) | nsys, nsys-ui |
| Nsight Compute | CUDA kernel 级硬件计数器/瓶颈诊断 | ncu, ncu-ui |
| Nsight Graphics | 图形 API(Vulkan/GL/DirectX)调试与帧捕获 | nsight-graphics |
在服务器安装:TODO
在本地安装分析工具(带图形界面)
# MacOS --cask表示是安装带UI的版本 brew install --cask nvidia-nsight-systems
# 查看状态 nsys status -e # trace表示记录哪些项目,使用逗号分割(无空格) # 常用项目包括:cuda,cublas,cudnn,osrt,nvtx等 # ./a.out是可执行程序,后面可以正常传递程序参数 # 这是最基础的使用方式,a.out的执行全程都记录 # 还可以指定记录时长,或者交互式执行nsys nsys profile --trace=cuda -o stf_log ./a.out # 执行完成后会生成nsys-rep文件,可以在UI工具中打开查看 # 记录显存占用历史 nsys profile --sample=process-tree --trace=cuda,nvtx,osrt --gpu-metrics-devices=0 --gpu-metrics-frequency=100 --gpu-metrics-set=memory -o log1 ./a.out # 权限不够,记录显存会报错 Illegal --gpu-metrics-devices argument: 0. Insufficient privilege, see https://developer.nvidia.com/ERR_NVGPUCTRPERM. Use the '--gpu-metrics-devices=help' switch to see the full list of values. # 记录CPU历史 nsys profile --sample=process-tree --trace=cuda,nvtx,osrt -o log1 ./a.out
trace项目的解释[AI]:
| 选项 | 说明 |
| cuda | CUDA API 调用(包含 kernel 启动、内存拷贝) |
| nvtx | 你自己插入的 NVTX 标签 |
| osrt | 操作系统运行时(线程创建、上下文切换) |
| cublas | cuBLAS 库调用(矩阵乘法) |
| cudnn | cuDNN 库调用(卷积、深度学习层) |
| opengl | OpenGL API |
| vulkan | Vulkan API |
| openmp | OpenMP 运行时(多线程) |
| mpi | MPI 调用 |
| nsys_nvperf | 采集底层硬件性能计数器 |
PS:当kernel的Grid太大的时候,好像记录会失败(如果trace项目里面有cuda),这时建议手动使用nvtx在代码中打点,只记录nvtx
TODO