使用 Nsight Systems 分析 Isaac Lab 性能#
Isaac Lab 支持通过 NVIDIA Nsight Systems(nsys) 分析 CPU 和 GPU 的运行性能,帮助定位瓶颈,并为环境和任务选择合适配置。性能分析会带来一定运行开销,且输出文件较大,因此更适合针对性排查,而非长时间无人值守的训练。
常见用途#
训练迭代很慢 :采集 3–5 次迭代,查看时间主要花在物理、渲染、环境重置、观测还是其他环节。
环境初始化需要 40 秒 :分析一次启动,查看各模块导入、核函数编译等耗时。
如何选择物理和渲染后端? 使用不同后端组合分析任务,找到合适方案。
GPU 核函数是否高效? 查看 nsys 中的 CUDA 行,定位 GPU 空闲时段,寻找优化机会。
代码修改后是否变慢? 对修改前后的性能分析结果进行 A/B 比较。
快速开始#
本节介绍首次采集 nsys 性能数据所需的完整步骤。
先决条件#
Nsight Systems :安装适合当前平台的版本。
用于源码插桩的
nvtxPython 包,安装到 Isaac Lab 环境:python -m pip install nvtx
采集性能数据#
以下命令通过 rsl_rl 训练框架,对 Isaac-Cartpole 任务的 3 次迭代采集性能数据:
nsys profile \
-t nvtx,cuda \
--python-functions-trace=scripts/benchmarks/nsys_trace.json \
-o my_profile \
uv run isaaclab train --rl_library rsl_rl \
--task=Isaac-Cartpole \
--max_iterations=3
nsys profile \
-t nvtx,cuda \
--python-functions-trace=scripts/benchmarks/nsys_trace.json \
-o my_profile \
./isaaclab.sh train --rl_library rsl_rl \
--task=Isaac-Cartpole \
--max_iterations=3
选项说明:
-t nvtx,cuda:采集 NVTX 区间(CPU 泳道)和 CUDA 活动(GPU 行)。--python-functions-trace=...:函数注解文件,由 Isaac Lab 提供。-o my_profile:输出路径;nsys 会追加.nsys-rep。
查看性能分析结果#
打开 Nsight Systems 界面,选择 File > Open ,打开上一步生成的 .nsys-rep 文件。展开 Threads ,即可看到各个域的泳道,分别显示为独立行。点击函数,会高亮其他泳道中的相关函数。展开 CUDA HW 行,可对照查看该 CPU 区间内启动的 GPU 核函数。
跟踪定义 JSON#
跟踪定义文件位于 scripts/benchmarks/nsys_trace.json ,保存需要关注的 Isaac Lab Python 函数的元数据。nsys 在运行时动态替换这些函数,自动发出 NVTX 区间。
结构:
[
{
"domain": "MyDomain",
"color": "0x9C27B0",
"module": "isaaclab.envs.manager_based_env",
"functions": [
"ManagerBasedEnv.step",
{"function": "ManagerBasedEnv.reset", "color": "0xAB47BC"}
]
}
]
编辑 JSON 后,运行同步测试,确认每个条目都能解析:
python -m pytest scripts/benchmarks/test/test_nsys_trace.py
故障排除#
预期的域没有出现在时间轴上:
确认 Isaac Lab 环境已安装
nvtx(python -m pip show nvtx)。确认被分析的运行过程确实调用了该函数。
运行上面的同步测试,验证 JSON 条目。
同步测试出现
AttributeError:JSON 中列出的函数已不在指定路径。将路径改为重命名后的函数路径;或
如果函数已删除,则移除该条目。
另请参阅#
仿真或训练速度低于预期 :检查仿真或训练异常缓慢的问题。
Nsight Systems 用户指南 :官方
nsys文档。NVTX Python 包 :nsys 用于从 Python 发出 NVTX 区间的包。