* 性能分析
-
NVIDIA Nsight Systems
(推薦):
這是 NVIDIA 官方推薦的更現代、功能更強大的分析工具。- 安裝 Nsight Systems
- 在 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
- 在本機上啟動 Nsight Systems GUI,然后選擇 “Attach to process” 或 “Launch Application” (推薦)。
如果你在宿主機上啟動并選擇 “Launch Application”,可以直接指定 Docker 容器中的video_blur
可執行文件。
如果你的 Docker 運行在 SSH 遠程主機上,Nsight Systems 也支持遠程分析。 - 分析指標: 關注 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
- 訪問 NVIDIA 官方下載頁面(需注冊 NVIDIA 開發者賬號,免費)
- 選擇適合 Ubuntu 系統的版本(如
.deb
安裝包,推薦)- 例如:
nsight-systems-2023.3.1_2023.3.1.100_amd64.deb
(版本號可能更新)
- 例如:
步驟 3:安裝 Nsight Systems
- 執行
.deb
包安裝命令:sudo dpkg -i nsight-systems-<版本號>_amd64.deb
- 若出現依賴錯誤,執行以下命令修復:
sudo apt -f install
- 若出現依賴錯誤,執行以下命令修復:
步驟 4:驗證安裝:啟動圖形界面(可視化分析工具)
- 使用 nsys-ui 命令(而非 nsight-systems):
nsys-ui
- 若成功啟動圖形界面,說明安裝完成。(OPenGL版本低運行不起來。最在本機下載nsight-systems查看)
- 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 邏輯未執行、設備選擇錯誤等),這是最常見的基礎問題。
驗證方法:
-
運行程序時,用
nvidia-smi
實時監控 GPU 占用
打開兩個終端:- 終端 1:執行
watch -n 1 nvidia-smi
(每秒刷新一次 GPU 狀態),觀察GPU-Util
(GPU 利用率)和Processes
(進程占用)列。 - 終端 2:運行你的程序
./main
。 - 若
GPU-Util
始終為0%
,且Processes
中無./main
進程,說明 程序根本沒調用 GPU,此時nsys
自然無法追蹤到 GPU 事件。
- 終端 1:執行
-
檢查程序代碼中的 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 后綴的版本)。
- 若為 CUDA 程序:確認是否有
第二步:若程序確實調用了 GPU,再檢查「nsys Profiling 配置是否正確」
若 nvidia-smi
能看到程序占用 GPU,但 nsys
報告中無 GPU 信息,說明 Profiling 時未正確啟用 CUDA 追蹤,需重新檢查命令參數。
常見配置問題及修復:
-
確認 Profiling 命令是否帶了
--trace cuda
選項
只有啟用--trace cuda
,nsys
才會追蹤 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
打開查看。 - 錯誤命令(無 CUDA 追蹤):
-
檢查 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 事件,環境異常會導致追蹤失敗。
環境檢查步驟:
-
檢查 NVIDIA 驅動版本
執行nvidia-smi
,查看右上角的Driver Version
(需 ≥ 450.51,推薦 ≥ 525 版本,適配新 GPU)。- 若提示
command not found
:驅動未安裝或未加載,需重新安裝匹配 GPU 型號的驅動(參考 NVIDIA 官網驅動下載)。
- 若提示
-
檢查 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
生效。
- 若提示
-
驗證 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 信息的核心入口:
-
打開報告后,進入「CUDA 視圖」
- 啟動
NVIDIA Nsight Systems
并加載report.nsys-rep
后,在左側菜單欄找到 「CUDA」 相關選項(不同版本可能略有差異,常見標簽如CUDA Kernels
、CUDA Memory
、CUDA Streams
):CUDA Kernels
:查看所有 CUDA 核函數的執行時間、調用次數、占用設備(GPU 0/1)等(核心指標,若有數據說明 GPU 被調用)。CUDA Memory
:查看 H2D(主機到設備)、D2H(設備到主機)、D2D(設備內部)的內存拷貝時間和數據量。CUDA Streams
:查看不同 CUDA 流的并發情況,判斷是否存在流阻塞。
- 啟動
-
通過「Timeline 視圖」直觀觀察 CPU-GPU 并行
- 在左側菜單欄選擇 「Timeline」,在上方工具欄勾選 「CUDA」 和 「CPU」(確保兩者都顯示)。
- 界面會顯示時間軸:上方是 CPU 線程活動,下方是 GPU 活動(如
CUDA Kernel Execution
、CUDA Memory Copy
)。 - 若時間軸中無「GPU 活動」區域,或區域內無任何事件,說明仍未追蹤到 GPU 數據,需回到前幾步重新排查。
總結排查流程(按優先級排序)
- 用
nvidia-smi
確認程序是否真的占用 GPU → 若否,修復程序代碼; - 確認
nsys profile
命令帶了--trace cuda
→ 若否,重新生成報告; - 檢查
nvidia-smi
和nvcc -V
確認驅動/CUDA 正常 → 若異常,修復環境; - 在
nsys-ui
中通過「CUDA Kernels」或「Timeline」視圖查找 GPU 事件。
按此流程操作后,通常能定位到「程序未調用 GPU」或「Profiling 配置錯誤」的核心問題,進而解決 nsys-ui
中無 GPU 信息的情況。