Nsight Systems 时间线:看 CPU、GPU、CUDA API、NCCL 与数据加载的重叠和空档
Nsight Systems(nsys)做系统级时间线分析:把 CPU 线程、CUDA API、kernel、显存拷贝、NCCL 通信、cuDNN/cuBLAS、OS runtime 和 NVTX 标记放在同一条时间轴上。它回答“GPU 为什么在等”“数据加载是否拖慢训练”“通信和计算有没有重叠”,不深入到单个 kernel 内部的指令和 stall 分析;后者用 Nsight Compute(ncu)。
典型用途:训练吞吐低、GPU 利用率忽高忽低、多卡通信与计算串行、DataLoader 成为瓶颈、推理服务排队。先用 nsys 找时间线上的空档,再用 ncu 分析具体 kernel。
# 采集 CUDA、NVTX、OS runtime 和 cuDNN/cuBLAS,生成报告
nsys profile -t cuda,nvtx,osrt,cudnn,cublas -o report ./app
# 采集后在终端看统计摘要
nsys stats report.nsys-rep
# 只采集指定时长,避免报告过大
nsys profile --duration=30 -o report ./app
# 采集 GPU 指标(需要支持的平台)
nsys profile --gpu-metrics-device=0 -o report ./app
# 用 NVTX 标记训练阶段,时间线里更容易定位
nsys profile -t cuda,nvtx -o report python train.py
# 通过 CUDA Profiler API 控制采集范围
nsys profile --capture-range=cudaProfilerApi --capture-range-end=stop -o report ./app
# 打开图形界面查看报告
nsys-ui report.nsys-rep
PyTorch 可以用 torch.cuda.nvtx.range_push/pop 或 torch.profiler 配合 NVTX;关键是给数据加载、前向、反向、优化器步进打上可读的区间名。
nsys 和 ncu 混用:nsys 看系统时间线和重叠,ncu 看单 kernel 的指令、内存和 occupancy;先 nsys 找瓶颈,再 ncu 下钻。--duration、--capture-range 或只跑几步。--resolve-symbols;Python 框架还要保留对应版本信息。合上页面,先回答,再展开对照。
nsys 和 ncu 的分析层次有什么不同?nsys 做系统级时间线,关注 CPU/GPU/通信/拷贝的重叠与空档;ncu 做单 kernel 级分析,关注指令、内存、occupancy 和 stall。
小程序版
微信扫码,随时查命令