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.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 = z3 的調和函數

問題 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;屬性值就是重…