* 性能分析
-
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 信息的情况。