当前位置: 首页 > news >正文

NVIDIA Nsight Systems性能分析工具

* 性能分析

  • NVIDIA Nsight Systems (推荐):
    这是 NVIDIA 官方推荐的更现代、功能更强大的分析工具。

    1. 安装 Nsight Systems
    2. 在 Docker 容器中启动程序:
      # 确保你在启动容器时挂载了/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 等基础库,可先执行以下命令安装依赖:
    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 包安装命令:
    sudo dpkg -i nsight-systems-<版本号>_amd64.deb
    
    • 若出现依赖错误,执行以下命令修复:
      sudo apt -f install
      

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

  1. 使用 nsys-ui 命令(而非 nsight-systems):
 nsys-ui
  1. 若成功启动图形界面,说明安装完成。(OPenGL版本低运行不起来。最在本机下载nsight-systems查看)
  2. Nsight Systems 还提供命令行工具 nsys,可直接在终端中使用:
# 查看版本
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 相关信息,需要执行:

# 基本性能分析示例(分析一个可执行程序)
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 追踪):
      # 仅追踪 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 中添加):
      export PATH=/usr/local/cuda/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
      
      然后执行 source ~/.bashrc 生效。
  3. 验证 CUDA 环境是否可用
    编译并运行 CUDA 官方示例程序,确认基础 CUDA 功能正常:

    # 进入 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 信息的情况。

http://www.dtcms.com/a/346675.html

相关文章:

  • ISO 22341 及ISO 22341-2:2025安全与韧性——防护安全——通过环境设计预防犯罪(CPTED)
  • 武大智能与集成导航小组!i2Nav-Robot:用于的室内外机器人导航与建图的大规模多传感器融合数据集
  • 【字母异位分组】
  • 火车头使用Post方法采集Ajax页面教程
  • 量子计算驱动的Python医疗诊断编程前沿展望(中)
  • kubernetes-dashboard使用http不登录
  • 快速了解命令行界面(CLI)的行编辑模式
  • PyTorch框架之图像识别模型与训练策略
  • 一键部署开源 Coze Studio
  • 蓝牙链路层状态机精解:从待机到连接的状态跃迁与功耗控制
  • 全面解析了Java微服务架构的设计模式
  • 新疆地州市1米分辨率土地覆盖图
  • GOLANG 接口
  • 可自定义的BMS管理系统
  • 论文阅读:Inner Monologue: Embodied Reasoning through Planning with Language Models
  • SpringBoot 自动配置深度解析:从注解原理到自定义启动器​
  • 【JVM】JVM的内存结构是怎样的?
  • 调味品生产过程优化中Ethernet/IP转ProfiNet协议下施耐德 PLC 与欧姆龙 PLC 的关键通信协同案例
  • 字符串的大小写字母转换
  • linux中文本文件操作之grep命令
  • Linux-常用文件IO函数
  • Java:类及方法常见规约
  • UE5多人MOBA+GAS 53、测试专属服务器打包和连接,以及配置EOS
  • linux编程----网络通信(TCP)
  • 利用Prometheus监控服务器相关数据
  • SpringBoot自动配置原理解析
  • 本地文件夹即时变身 Web 服务器(文件服务器)
  • Linux问答题:归档和传输文件
  • Reactor 反应堆模式
  • 《解构React Server Components:服务端序列化与流式传输的底层逻辑》