使用 Nsight Systems 分析 Isaac Lab 性能#

Isaac Lab 支持通过 NVIDIA Nsight Systems(nsys) 分析 CPU 和 GPU 的运行性能,帮助定位瓶颈,并为环境和任务选择合适配置。性能分析会带来一定运行开销,且输出文件较大,因此更适合针对性排查,而非长时间无人值守的训练。

常见用途#

  • 训练迭代很慢 :采集 3–5 次迭代,查看时间主要花在物理、渲染、环境重置、观测还是其他环节。

  • 环境初始化需要 40 秒 :分析一次启动,查看各模块导入、核函数编译等耗时。

  • 如何选择物理和渲染后端? 使用不同后端组合分析任务,找到合适方案。

  • GPU 核函数是否高效? 查看 nsys 中的 CUDA 行,定位 GPU 空闲时段,寻找优化机会。

  • 代码修改后是否变慢? 对修改前后的性能分析结果进行 A/B 比较。

快速开始#

本节介绍首次采集 nsys 性能数据所需的完整步骤。

先决条件#

  • Nsight Systems :安装适合当前平台的版本。

  • 用于源码插桩的 nvtx Python 包,安装到 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 核函数。

nsys-ui 中的域泳道

跟踪定义 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 中列出的函数已不在指定路径。

    • 将路径改为重命名后的函数路径;或

    • 如果函数已删除,则移除该条目。

另请参阅#