* 性能分析

  • 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.pswp.cn/web/94260.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94260.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94260.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后台管理系统-14-vue3之tag标签页的实现

文章目录 1 tag静态实现 1.1 CommonTag.vue(el-tag) 1.2 Main.vue(普通组件标签) 2 tag通过pinia管理 2.1 CommonAside.vue(菜单点击事件) 2.2 stores/index.js(selectMenu()和tags) 2.3 CommonTag.vue(计算属性tags) 3 点击tag之后跳转到指定页面 3.1 views/Mail.vue(商品) 3.…

CMake2: CMakeLists.txt的常用命令

参考链接: 爱编程的大丙 | CMake教程 CMakeLists指令以及常用方法 现代 CMake 教程 文章目录1. cmake_minimum_required( )2. project( )3. add_executable( )4. set()5. aux_source_directory( )6. file( )7. include_directories( )8. add_library( )9. link_libraries()与li…

Ansible入门:自动化运维基础

Ansible 基础概念与安装1. 自动化动机 (Motivation for Automation)概念解释&#xff1a; 指为什么要用Ansible等工具来替代手动管理服务器。核心动机包括&#xff1a;效率与速度&#xff1a; 同时在上百甚至上千台服务器上执行任务&#xff0c;秒级完成&#xff0c;远非人工可…

【测试】基于博客系统的测试报告

前言 本篇博客对简易的博客系统做的测试总结一份测试报告&#xff0c;包含功能测试&#xff0c;自动化测试&#xff0c;性能测试 &#x1f493; 个人主页&#xff1a;zkf ⏩ 文章专栏&#xff1a;测试 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&#x1f44d;…

Oracle:配置让插入语句时id自动输入

Oracle:配置让插入语句时id自动输入无需手动指定&#xff0c;核心是利用 序列&#xff08;Sequence&#xff09; 或 自增列&#xff08;Identity Column&#xff09; 来自动生成唯一值。以下是两种常用方案&#xff1a;方案 1&#xff1a;使用序列&#xff08;Sequence&#xf…

秒杀服务的回调方案

在秒杀场景中&#xff0c;用户点击“抢购”后&#xff0c;后端需要通过异步处理应对高并发&#xff08;避免请求阻塞&#xff09;&#xff0c;同时需通过实时回调机制将最终结果&#xff08;成功/失败&#xff09;推送给客户端并展示。核心方案是&#xff1a;“前端发起请求→后…

php apache无法接收到Authorization header

Apache 默认不传递 Authorization头到后端环境&#xff08;如 PHP&#xff09;。其表现是&#xff1a;print_r($_SERVER)时&#xff0c; 没有 [Authorization] &#xff1a;Array ([Accept-Language] > zh,en;q0.9,zh-CN;q0.8,en-US;q0.7[Accept-Encoding] > gzip, defla…

当我们想用GPU(nlp模型篇)

在个人设备上“把 GPU 真正用起来”做 NLP&#xff0c;分五步&#xff1a;准备 → 安装 → 验证 → 训练/推理 → 踩坑排查。下面每一步都给出可复制命令和常见错误。 ────────────────── 1. 硬件准备 • 一张 NVIDIA GPU&#xff0c;算力 ≥ 6.1&#xff08…

CryptSIPVerifyIndirectData函数分析

可以使用此函数从SIP接口对应的文件中提取签名信息 CryptSIPVerifyIndirectData&#xff1a;将当前文件的哈希结果做为“指纹”&#xff0c;并与从CryptSIPGetSignedDataMsg中提取的签名信息进行比较。 如果哈希结果相同&#xff0c;则意味着当前文件与之前签名的文件相同&…

20250823解决荣品RD-RK3588-MID开发板在充电的时候大概每10s屏幕会像水波纹闪烁一下

20250823解决荣品RD-RK3588-MID开发板在充电的时候大概每10s屏幕会像水波纹闪烁一下 2025/8/23 17:58【结论】&#xff1a;使用直流电源供电&#xff0c;给电池【快速】充电&#xff0c;但是直流电源的电压稳定&#xff0c;电流抖动导致的&#xff01;那个是2.4G 已经知道了我司…

CANN安装

前提条件 请参考本文档正确安装和使用CANN软件,不建议将CANN安装在共享磁盘后,通过挂载的方式使用CANN,因为CANN对文件系统有文件锁的依赖,部分共享存储不支持文件锁,可能导致任务拉起失败。 root用户和非root用户安装CANN软件包的步骤一致,当前示例步骤以非root用户为例…

docker的基础配置

目录 数据卷 数据卷容器 端口映射与容器互联 互联机制实现便捷互访(基于容器搭建论坛) 数据卷 1.创建数据卷 [rootopenEuler-1 /]# docker volume create test test [rootopenEuler-1 /]# docker volume ls DRIVER VOLUME NAME local test [ro…

VSCode Import Cost:5 分钟学会依赖瘦身

一句话作用&#xff1a;在代码里 import 时&#xff0c;实时显示包大小&#xff0c;帮你一眼揪出体积炸弹。1️⃣ 30 秒安装 & 启动 打开 VSCode → 扩展商店搜索 Import Cost → 安装重启 VSCode&#xff0c;立即生效&#xff0c;零配置。2️⃣ 使用方式&#xff08;开箱即…

TCP/UDP详解(一)

UDP报文源端口16bit 目的端口16bit校验和checksum16bit 总长度16bit--------------------------------------------------------------------------------------------------------------------------源目端口用于标识应用层协议&#xff0c;分为知名端口&#x…

数据库优化提速(一)之进销存库存管理—仙盟创梦IDE

从存储过程到通用 SQL&#xff1a;进销存系统的数据操作优化在进销存系统的开发与维护中&#xff0c;数据库查询语句的编写方式对系统的性能、兼容性和可维护性有着深远影响。本文将围绕给定的三段 SQL 代码展开&#xff0c;深入探讨将存储过程转换为通用 SQL 在进销存场景下的…

Redis面试精讲 Day 28:Redis云原生部署与Kubernetes集成

【Redis面试精讲 Day 28】Redis云原生部署与Kubernetes集成 在当今微服务与容器化浪潮中&#xff0c;Redis作为高性能缓存和消息中间件&#xff0c;已从单机部署逐步演进为云原生环境下的核心组件。Day 28 聚焦“Redis云原生部署与Kubernetes集成”&#xff0c;深入解析如何在…

leetcode刷题记录03——top100题里的6道简单+1道中等题

leetcode刷题记录03——top100题里的6道简单1道中等题上一篇博客&#xff1a; leetcode刷题记录01——top100题里的7道简单题 leetcode刷题记录02——top100题里的7道简单题 有效的括号 看懂需要用栈了&#xff0c;但是不知道怎么去写&#xff0c;看了题解mark下正确答案。 cla…

求单位球内满足边界条件 u = z³ 的调和函数

问题 6&#xff1a;在区域 {x2y2z2≤1}\{x^{2}y^{2}z^{2}\leq 1\}{x2y2z2≤1} 内找到一个调和函数 uuu&#xff0c;使得在边界 x2y2z21x^{2}y^{2}z^{2}1x2y2z21 上&#xff0c;uuu 等于 gz3gz^{3}gz3。 提示&#xff1a;根据第8.1节&#xff0c;解必须是一个三次调和多项式&…

AAA 服务器与 RADIUS 协议笔记

一、AAA 服务器概述1. 核心定义AAA 是认证&#xff08;Authentication&#xff09;、授权&#xff08;Authorization&#xff09;和计费&#xff08;Accounting&#xff09; 的简称&#xff0c;是网络安全领域中实现访问控制的核心安全管理机制&#xff0c;通过整合三种服务确保…

Vue3源码reactivity响应式篇之数组代理的方法

概览 vue3中对于普通的代理包含对象和数组两类&#xff0c;对于数组的方法是重写了许多方法&#xff0c;具体实现参见packages\reactivity\src\arrayInstrumentations.ts arrayInstrumentations实际上就是一个对象&#xff0c;对象的属性就是数组的方法&#xff0c;属性值就是重…