发行说明
发行说明和已知问题。
新增功能
Nsight Systems 2025.1 亮点:
支持 CUDA 12.8
保留最后 N 秒 CLI 选项 -
nsys stop
现在接受--keep=N
选项,以便在尝试记录不可预测的事件时保留最相关的数据。每个范围(NVTX 或 CUDA 内核)的 GPU 指标样本摘要的配方
生成包含 ETW 数据的 Windows 报告时,减少了内存开销
Windows 图形资源跟踪器跟踪资源优先级更改
Pytorch 性能分析
用于启用 pytorch autograd NVTX 性能标记的新命令行选项
跟踪重要的 pytorch 函数
支持用 Python 3.12 编写的脚本和配方
Linux 自解压 .run 安装程序现已可用于 Arm64 SBSA 系统。
预览:多通道脚本,用于运行 Arm 顶向下分析中涉及的所有 CPU 事件
已知问题
一般问题
Nsight Systems 使用的默认时间转换在 WSL 上不可靠,我们需要回退到更安全但精度较低的时间系统。为此,请将配置文件选项 CuptiUseRawGpuTimestamps 设置为 false。可以使用以下命令设置配置文件选项
mkdir -p "$(dirname "$(nsys -z)")" echo 'CuptiUseRawGpuTimestamps=false' >> "$(nsys -z)"
在未来的版本中正确处理时间戳转换之前,这是必需的。
Nsight Systems 版本,从 2024.2 开始,不再支持 Power PC,我们建议您使用旧版本,可从 https://developer.nvidia.com/gameworksdownload 下载。
Nsight Systems 版本,从 2024.4 开始,不再支持 11.4 之前的 cuBLAS 版本。如果您无法更新 cuBLAS,我们建议您使用旧版本,可从 https://developer.nvidia.com/gameworksdownload 下载。
当前版本的 Nsight Systems CLI 不支持使用长度超过 127 个字符的名称命名会话。使用名称超过 111 个字符的可执行文件进行性能分析也不受
nsys profile
命令的支持。这些限制将在未来版本的 CLI 中删除。Nsight Systems 2020.4 引入了在没有完整采样的情况下收集线程调度信息的功能。虽然这允许以较低的成本获取系统信息,但它确实增加了开销。要关闭线程调度信息收集,请将
--cpuctxsw=none
添加到命令行,或在 GUI 中关闭。目前不正式支持超过 5 分钟的性能分析。在高活动应用程序、高性能机器上进行长时间分析,可能会创建大型结果文件,这些文件可能需要很长时间才能加载、耗尽内存或锁定系统。如果您的应用程序很复杂,我们建议从不超过 5 分钟的短时间性能分析会话开始进行初始分析。如果您的应用程序具有自然的重复模式(通常称为帧或迭代),您通常只需要几个这样的模式。建议的限制将在未来的版本中增加。
使用 x86_64 Linux 目标时,不支持从 GUI 附加或重新附加到进程。可以通过使用交互式 CLI 启动进程,然后在多个点启动和停止分析来获得等效的结果。
为了减少开销,Nsight Systems 在跟踪 API 时,会跟踪可能影响性能的 API 调用的子集,而不是所有可能的调用。目前,使用 CLI 时无法更改正在跟踪的子集。有关默认跟踪的调用列表,请参阅本文档中相应库的部分。CLI 限制将在未来版本的产品中删除。
工具用于记录收集期间的跟踪事件的默认大小存在上限。如果您看到以下诊断错误,则 Nsight Systems 已达到上限。
Reached the size limit on recording trace events for this process. Try reducing the profiling duration or reduce the number of features traced.
当分析使用 CUPTI 的框架或应用程序时,例如某些版本的 TensorFlow(tm),由于 CUPTI 的限制,Nsight Systems 将无法跟踪 CUDA 使用情况。这些限制将在未来版本的 CUPTI 中得到纠正。如果需要 CUDA 跟踪,请考虑关闭应用程序对 CUPTI 的使用。
不支持跟踪使用非线程安全内存分配器的应用程序。
不支持在预加载 glibc 符号的应用程序中跟踪 OS 运行时库,并且可能导致未定义的行为。
Nsight Systems 无法分析通过虚拟窗口管理器(如 GNU Screen)启动的应用程序。
将 Nsight Systems MPI 跟踪功能与 Darshan 运行时模块一起使用可能会导致段错误。要解决此问题,请卸载该模块。
module unload darshan-runtime
使用 MPI_Status 作为参数分析 MPI Fortran API(例如 MPI_Recv、MPI_Test[all]、MPI_Wait[all])可能会导致 MPICH 3.0.x 版本的内存损坏。原因是 MPICH 3.0.x 中的 MPI_Status 结构具有与其他 MPICH 版本(已测试 2.1.x 和 >=3.1.x)以及我们用于编译 Nsight Systems MPI 拦截库的版本 (3.3.2) 不同的内存布局。
如果目标文件系统不支持文件锁定,则使用
nsys export
导出到 SQLite 数据库将失败。错误消息将提及
std::exception::what: database is locked
在某些使用 VNC 的 Linux 系统上,某些小部件可能无法正确呈现,或者 Nsight Systems 在打开“分析摘要”或“诊断摘要”页面时可能会崩溃。在这种情况下,请尝试强制使用特定的软件渲染器:
GALLIUM_DRIVER=llvmpipe nsys-ui
由于 Open MPI 4.0.1 中的已知错误,目标应用程序在被 Nsight Systems 分析时可能会在执行结束时崩溃。要避免此问题,请使用不同的 Open MPI 版本,或将
--mca btl ^vader
选项添加到mpirun
命令行。Python 中的 multiprocessing 模块通常被客户用于创建新进程。在 Linux 上,该模块默认使用“fork”模式,在该模式下,它会 fork 新进程,但不调用 exec。根据 POSIX 标准,不带 exec 的 fork 会导致未定义的行为,并且像 Nsight Systems 这样依赖注入的工具只允许在此类进程中进行异步信号安全调用。这使得像 Nsight Systems 这样的工具很难收集性能分析信息。请参阅 https://docs.pythonlang.cn/3/library/multiprocessing.html#contexts-and-start-methods
使用 multiprocessing 模块中的 set_start_method 将启动方法更改为“spawn”,这更安全,并允许像 Nsight Systems 这样的工具收集数据。请参阅上面链接中给出的代码示例。
用户需要确保进程正常退出(例如,在 multiprocessing 模块的对象中使用 close 和 join 方法)。否则,Nsight Systems 无法正确刷新缓冲区,您可能会丢失跟踪。
当 CLI 序列 launch、start、stop 用于分析进程树时,LinuxPerf 会执行深度优先搜索 (DFS),以在对 OS 进行编程以收集数据之前找到进程树启动的所有线程。如果在 DFS 期间,进程树创建了一个或多个线程,则这些线程可能找不到,并且 LinuxPerf 将不会收集它们的数据。
请注意,一旦通过 perf_event_open 对线程进行编程,由于设置了 perf_event_open 继承位,该线程生成的任何后续子进程或线程都将被跟踪。
没有其他 CLI 命令序列会受到此可能问题的影响。此外,如果使用系统范围模式,则不存在该问题。
vGPU 问题
在 vGPU 上运行 Nsight Systems 时,您应始终使用 profiler grant。有关为 NVIDIA vGPU 启用 NVIDIA CUDA Toolkit profiler 的详细信息,请参阅虚拟 GPU 软件文档。如果没有 grant,意外的迁移可能会导致正在运行的会话崩溃、报告错误并中止。它也可能会静默生成损坏的报告,这些报告可能无法加载或显示不准确的数据,而不会发出警告。
从 vGPU 13.0 开始,即使在 vGPU 上,设备级别指标收集也向最终用户公开。设备级别指标将提供有关 GPU 上执行的所有工作的信息。该工作可能与同一 VM 或同一物理 GPU 上运行的其他 VM 相关。
截至 CUDA 11.4 和 R470 TRD1 驱动程序版本,vGPU 环境中支持 Nsight Systems,这需要 vGPU 许可证。如果 20 分钟后未获得许可证,该工具仍可工作,但报告的 GPU 性能指标数据将不准确。这是因为 vGPU 环境中的一项功能会降低性能,但会保留 Grid 许可用户指南 中指定的功能。
Docker 问题
在 Docker 中,当系统主机使用的内核版本早于 v4.3 时,除非主机和 Docker 都运行使用内核版本 3.10.1-693 或更高版本的 RHEL 或 CentOS 操作系统,否则 Nsight Systems 无法收集采样数据。未来版本将提供用户覆盖此设置的功能。
当在正在运行的容器上调用
docker exec
并且从该 shell 内调用的命令保持 stdout 打开时,exec shell 会挂起,直到命令退出。您可以通过使用docker exec --tty
运行来避免此问题。请参阅以下错误报告:
CUDA 跟踪问题
cudaMemPrefetchAsync() API 允许用户指定流以将内存预取操作排队。但是,Nsight Systems 无法从 UVM 后端获取 UVM 页面迁移的流信息。因此,Nsight Systems 无法正确显示与 cudaMemPrefetchAsync() API 调用关联的流信息。这将在未来版本中修复。
当使用 CUDA Toolkit 10.X 时,跟踪 DtoD 内存复制操作可能会导致崩溃。要避免此问题,请将 CUDA Toolkit 更新到 11.X 或最新版本。
当在 Volta 设备或更高版本的设备上的目标应用程序中找到 CDP(CUDA 动态并行)内核时,Nsight Systems 将不会跟踪内核。
在 Tegra 平台上,CUDA 跟踪需要 root 权限。使用项目设置中的 以 root 身份启动 复选框,使分析的应用程序以 root 身份运行。
如果目标应用程序使用来自多个线程的多个流,则 CUDA 事件缓冲区可能无法正确释放。在这种情况下,您将看到以下诊断错误
Couldn't allocate CUPTI bufer x times. Some CUPTI events may be missing.
请联系 Nsight Systems 团队。
在本版本的 Nsight Systems 中,如果您使用交互式 CLI 在应用程序内部启动和停止性能分析,则 CUDA 内存分配图的生成仅保证在第一个性能分析范围内是正确的。此限制将在未来版本的产品中删除。
CUDA GPU 跟踪收集需要一部分 GPU 内存。如果您的应用程序使用了所有可用的 GPU 内存,则 CUDA 跟踪可能无法工作或可能破坏您的应用程序。例如,如果 GPU 内存分配失败,cuDNN 应用程序可能会因
CUDNN_STATUS_INTERNAL_ERROR
错误而崩溃。对于早于 4.4 的旧 Linux 内核,当分析在性能分析会话中间退出的非常短期的应用程序(约 1 秒)时,Nsight Systems 可能不会在时间轴上显示 CUDA 事件。
当应用程序中执行超过 64k 个串行 CUDA 内核和内存复制时,您可能会在性能分析期间遇到以下异常
InvalidArgumentException: "Wrong event order detected"
请至少升级到 CUDA 9.2 驱动程序以避免此问题。如果您无法升级,则可以使用 CLI 进行部分分析,可能会丢失大部分 CUDA 事件。
在 Vibrante 上,当运行具有多个目标的性能分析会话时,这些目标是在 NAT 后面的 CCC 配置中的来宾 VM,您可能会在性能分析期间遇到以下文本的错误
Failed to sync time on device.
请编辑组连接设置,选中那里的 同一 SoC 上的目标 复选框,然后重试。
当使用 CUDA Tool Kit 11.1 附带的 455 驱动程序,并使用 Nsight Systems 跟踪 CUDA 时,您可能会在应用程序退出时遇到崩溃。要避免此问题,请在应用程序退出之前结束性能分析会话或更新您的驱动程序。
多报告分析问题
请注意,在您的工作站上设置 Dask 分析需要在系统上进行一些额外的工作。对于小型数据输入,在没有 Dask 的情况下运行配方可能会更快。