NVIDIA Nsight Systems性能分析工具

* 性能分析

  • NVIDIA Nsight Systems (推荐):

    这是 NVIDIA 官方推荐的更现代、功能更强大的分析工具。

    1. 安装 Nsight Systems

    2. 在 Docker 容器中启动程序:

      bash 复制代码
      # 确保你在启动容器时挂载了/usr/local/cuda/targets/x86_64-linux/lib/ 和 /usr/local/nvidia/lib64
      # 通常会映射到容器内部的相同路径
      # 例如:docker run --gpus all -it -v $(pwd):/app -w /app your_image bash
      
      # 在容器内部执行:
      ./video_blur -i data/input.mp4 -o data/output.mp4
    3. 在本机上启动 Nsight Systems GUI,然后选择 "Attach to process" 或 "Launch Application" (推荐)。
      如果你在宿主机上启动并选择 "Launch Application",可以直接指定 Docker 容器中的 video_blur 可执行文件。
      如果你的 Docker 运行在 SSH 远程主机上,Nsight Systems 也支持远程分析。

    4. 分析指标: 关注 CUDA 核函数执行时间、内存拷贝时间 (D2H, H2D)、CUDA 流的并发情况、CPU-GPU 同步点等。

1. 安装 Nsight Systems

在 Ubuntu 系统上安装 Nsight Systems(NVIDIA 的系统级性能分析工具)可以按照以下步骤进行:

步骤 1:确认系统要求

  • 操作系统:Ubuntu 16.04 及以上版本(64位)

  • 依赖:需要安装 libgtk-3-0 等基础库,可先执行以下命令安装依赖:

    bash 复制代码
    sudo apt update && sudo apt install -y libgtk-3-0 libasound2 libnss3 libxss1

步骤 2:本机下载 Nsight Systems

  1. 访问 NVIDIA 官方下载页面(需注册 NVIDIA 开发者账号,免费)
  2. 选择适合 Ubuntu 系统的版本(如 .deb 安装包,推荐)
    • 例如:nsight-systems-2023.3.1_2023.3.1.100_amd64.deb(版本号可能更新)

步骤 3:安装 Nsight Systems

  1. 执行 .deb 包安装命令:

    bash 复制代码
    sudo dpkg -i nsight-systems-<版本号>_amd64.deb
    • 若出现依赖错误,执行以下命令修复:

      bash 复制代码
      sudo apt -f install

步骤 4:验证安装:启动图形界面(可视化分析工具)

  1. 使用 nsys-ui 命令(而非 nsight-systems):
bash 复制代码
 nsys-ui
  1. 若成功启动图形界面,说明安装完成。(OPenGL版本低运行不起来。最在本机下载nsight-systems查看)
  2. Nsight Systems 还提供命令行工具 nsys,可直接在终端中使用:
bash 复制代码
# 查看版本
nsys --version

# 基本性能分析示例(分析一个可执行程序)
nsys profile ./main

步骤 5:分析指标: 关注 CUDA 核函数执行时间、内存拷贝时间 (D2H, H2D)、CUDA 流的并发情况、CPU-GPU 同步点等。

注意事项

  • 确保系统已安装匹配的 NVIDIA 驱动(推荐 450.51 及以上版本)

通过以上步骤,即可在 Ubuntu 系统上完成 Nsight Systems 的安装,用于分析 GPU/CPU 性能、追踪程序执行流程等场景。

步骤6:验证确认「程序是否真的调用了 GPU」

如果在 nsys-ui 中未看到 GPU 相关信息,需要执行:

bash 复制代码
# 基本性能分析示例(分析一个可执行程序)
nsys profile --trace cuda,osrt ./main

如果还没有,通常是 Profiling 阶段未正确追踪 CUDA/GPU 事件 ,或 程序本身未实际调用 GPU。可按以下步骤逐步排查,定位问题根源:

第一步:先确认「程序是否真的调用了 GPU」

首先排除「程序本身未使用 GPU」的情况(比如代码中 CUDA 逻辑未执行、设备选择错误等),这是最常见的基础问题。

验证方法:
  1. 运行程序时,用 nvidia-smi 实时监控 GPU 占用

    打开两个终端:

    • 终端 1:执行 watch -n 1 nvidia-smi(每秒刷新一次 GPU 状态),观察 GPU-Util(GPU 利用率)和 Processes(进程占用)列。
    • 终端 2:运行你的程序 ./main
    • GPU-Util 始终为 0%,且 Processes 中无 ./main 进程,说明 程序根本没调用 GPU ,此时 nsys 自然无法追踪到 GPU 事件。
  2. 检查程序代码中的 GPU 调用逻辑

    • 若为 CUDA 程序:确认是否有 cudaSetDevice(0)(指定设备)、cudaMalloc(内存分配)、kernel<<<...>>>(核函数调用)等核心逻辑,且无 cudaError_t 错误(建议在代码中添加错误检查,比如 cudaCheck(cudaGetLastError()))。
    • 若为 PyTorch/TensorFlow 等框架:确认是否设置了 device='cuda',且无 CPU-only 版本框架的误安装(比如 pip install torch 未带 CUDA 支持,需安装 torch==xx.xx.xx+cu121 这类带 CUDA 后缀的版本)。

第二步:若程序确实调用了 GPU,再检查「nsys Profiling 配置是否正确」

nvidia-smi 能看到程序占用 GPU,但 nsys 报告中无 GPU 信息,说明 Profiling 时未正确启用 CUDA 追踪,需重新检查命令参数。

常见配置问题及修复:
  1. 确认 Profiling 命令是否带了 --trace cuda 选项

    只有启用 --trace cudansys 才会追踪 GPU 相关事件(核函数、内存拷贝、流操作等)。

    • 错误命令(无 CUDA 追踪):nsys profile ./main(仅追踪 CPU,无 GPU 信息)。

    • 正确命令(强制启用 CUDA 追踪):

      bash 复制代码
      # 仅追踪 CUDA(GPU)事件
      nsys profile --trace cuda ./main
      # 推荐:同时追踪 CUDA + CPU(方便分析 CPU-GPU 同步)
      nsys profile --trace cuda,osrt --output=report_fillcrop.nsys-rep ./main

    重新执行上述正确命令,生成新的报告(如 report2.nsys-rep),再用 nsys-ui 打开查看。

  2. 检查 Profiling 时是否有「CUDA 追踪失败」的警告

    执行 nsys profile ./your_programe 命令时,注意终端输出是否有类似警告:

    • Warning: CUDA tracing is disabled because no CUDA devices were found.(未找到 CUDA 设备)
    • Warning: CUDA context creation failed.(CUDA 上下文创建失败)
      若有此类警告,说明 nsys 本身无法识别 GPU,需进一步检查 GPU 驱动和 CUDA 环境。

第三步:若仍无 GPU 信息,检查「GPU 驱动与 CUDA 环境是否正常」

nsys 依赖 NVIDIA 驱动和 CUDA 工具链来追踪 GPU 事件,环境异常会导致追踪失败。

环境检查步骤:
  1. 检查 NVIDIA 驱动版本

    执行 nvidia-smi,查看右上角的 Driver Version(需 ≥ 450.51,推荐 ≥ 525 版本,适配新 GPU)。

    • 若提示 command not found:驱动未安装或未加载,需重新安装匹配 GPU 型号的驱动(参考 NVIDIA 官网驱动下载)。
  2. 检查 CUDA Toolkit 是否安装且配置正确

    执行 nvcc -V(注意是大写 V),查看 CUDA 版本(需与驱动兼容,比如驱动 525 支持 CUDA 12.0~12.4)。

    • 若提示 command not found:未安装 CUDA Toolkit,或未配置环境变量。需安装后添加环境变量(如 .bashrc 中添加):

      bash 复制代码
      export PATH=/usr/local/cuda/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

      然后执行 source ~/.bashrc 生效。

  3. 验证 CUDA 环境是否可用

    编译并运行 CUDA 官方示例程序,确认基础 CUDA 功能正常:

    bash 复制代码
    # 进入 CUDA 示例目录(默认路径,若自定义安装需调整)
    cd /usr/local/cuda/samples/1_Utilities/deviceQuery
    make  # 编译
    ./deviceQuery  # 运行设备查询
    • 若输出 Result = PASS:CUDA 环境正常;
    • 若输出 Result = FAIL:CUDA 环境异常(如驱动与 CUDA 版本不兼容、GPU 硬件问题),需先修复环境。

第四步:在 NVIDIA Nsight Systems 2025.5.1 中正确定位 GPU 相关信息

若上述步骤确认程序调用了 GPU、Profiling 命令正确、环境正常,可能是在 nsys-ui 中未找到正确的查看入口。

NVIDIA Nsight Systems 2025.5.1 查看 GPU 信息的核心入口:
  1. 打开报告后,进入「CUDA 视图」

    • 启动 NVIDIA Nsight Systems 并加载 report.nsys-rep 后,在左侧菜单栏找到 「CUDA」 相关选项(不同版本可能略有差异,常见标签如 CUDA KernelsCUDA MemoryCUDA Streams):
      • CUDA Kernels:查看所有 CUDA 核函数的执行时间、调用次数、占用设备(GPU 0/1)等(核心指标,若有数据说明 GPU 被调用)。
      • CUDA Memory:查看 H2D(主机到设备)、D2H(设备到主机)、D2D(设备内部)的内存拷贝时间和数据量。
      • CUDA Streams:查看不同 CUDA 流的并发情况,判断是否存在流阻塞。
  2. 通过「Timeline 视图」直观观察 CPU-GPU 并行

    • 在左侧菜单栏选择 「Timeline」 ,在上方工具栏勾选 「CUDA」「CPU」(确保两者都显示)。
    • 界面会显示时间轴:上方是 CPU 线程活动,下方是 GPU 活动(如 CUDA Kernel ExecutionCUDA Memory Copy)。
    • 若时间轴中无「GPU 活动」区域,或区域内无任何事件,说明仍未追踪到 GPU 数据,需回到前几步重新排查。

总结排查流程(按优先级排序)

  1. nvidia-smi 确认程序是否真的占用 GPU → 若否,修复程序代码;
  2. 确认 nsys profile 命令带了 --trace cuda → 若否,重新生成报告;
  3. 检查 nvidia-sminvcc -V 确认驱动/CUDA 正常 → 若异常,修复环境;
  4. nsys-ui 中通过「CUDA Kernels」或「Timeline」视图查找 GPU 事件。

按此流程操作后,通常能定位到「程序未调用 GPU」或「Profiling 配置错误」的核心问题,进而解决 nsys-ui 中无 GPU 信息的情况。

相关推荐
程序员 _孜然6 小时前
Ubuntu/Debian修改网卡名字enP3p49s0为eth0
linux·运维·驱动开发·嵌入式硬件·ubuntu·debian
Fireworkitte18 小时前
Ubuntu 系统 tar 包源码安装 Nginx
linux·nginx·ubuntu
ElendaLee19 小时前
笔记本电脑Windows+Ubuntu 双系统,Ubuntu无法挂载Windows的硬盘 报错问题解决
linux·运维·ubuntu
QtSeeker19 小时前
Ubuntu22.04安装VMware Tools
linux·ubuntu
wzb5620 小时前
Ubuntu 的 apt-get 强制使用 IPv4 网络
ubuntu
小猪写代码1 天前
解释一下,Linux,shell,Vmware,Ubuntu,以及Linux命令和shell命令的区别
linux·ubuntu
源代码杀手1 天前
大模型微调训练资源占用查询:Windows 10 查看 NVIDIA 显卡GPU状态教程(替代 Ubuntu 下 watch nvidia-smi)
linux·windows·ubuntu
孙霸天1 天前
Ubuntu20系统上离线安装MongoDB
数据库·mongodb·ubuntu·备份还原
愚昧之山绝望之谷开悟之坡2 天前
| `cat /etc/os-release` | 发行版详细信息(如 Ubuntu、CentOS) |
linux·ubuntu·centos