Jump to content

Connect Leeroopedia MCP: Equip your AI agents to search best practices, build plans, verify code, diagnose failures, and look up hyperparameter defaults.

Heuristic:Isaac sim IsaacGymEnvs JIT Profiling Optimization

From Leeroopedia
Knowledge Sources
Domains Optimization, Deep_Learning
Last Updated 2026-02-15 09:00 GMT

Overview

Performance optimization: disable PyTorch JIT profiling mode and executor to reduce overhead, while using `@torch.jit.script` on all vectorized math operations.

Description

IsaacGymEnvs applies a two-part JIT optimization strategy. First, it disables PyTorch's JIT profiling mode and profiling executor at initialization. These profiling features add overhead for tracing execution patterns. Second, it extensively uses `@torch.jit.script` decorators on GPU math operations (quaternion math, rotation matrices, Jacobians, reward computations) in `torch_jit_utils.py` and task files. The combination eliminates profiling overhead while retaining JIT compilation benefits for hot math paths.

Usage

This heuristic is applied automatically in all VecTask and ADRVecTask initialization. It benefits any workflow that involves stepping the simulation or computing observations/rewards. The pattern is most impactful for tasks with complex reward functions or observation calculations involving many quaternion/rotation operations.

The Insight (Rule of Thumb)

  • Action: Call `torch._C._jit_set_profiling_mode(False)` and `torch._C._jit_set_profiling_executor(False)` before running simulation. Decorate vectorized math with `@torch.jit.script`.
  • Value: Applied automatically in VecTask.__init__; 43+ JIT-scripted functions in `torch_jit_utils.py`.
  • Trade-off: Disabling profiling means PyTorch cannot adaptively optimize JIT plans based on runtime patterns. The explicit `@torch.jit.script` decorators compensate by pre-compiling the critical math kernels.

Reasoning

The JIT profiler collects runtime type and shape information to optimize future executions. In IsaacGymEnvs, tensor shapes are fixed after initialization (determined by `numEnvs`, `numObservations`, `numActions`), so adaptive profiling provides no benefit. The profiling overhead is wasted on every forward pass. Meanwhile, `@torch.jit.script` provides ahead-of-time compilation for the math-heavy utility functions that dominate compute time.

From `vec_task.py:243-245`:

# optimization flags for pytorch JIT
torch._C._jit_set_profiling_mode(False)
torch._C._jit_set_profiling_executor(False)

Same pattern repeated in ADR variant from `adr_vec_task.py:130-131`:

torch._C._jit_set_profiling_mode(False)
torch._C._jit_set_profiling_executor(False)

Example JIT-scripted utility from `torch_jit_utils.py`:

@torch.jit.script
def quat_mul(a, b):
    # ...quaternion multiplication...

Related Pages

Page Connections

Double-click a node to navigate. Hold to expand connections.
Principle
Implementation
Heuristic
Environment