Conversation
|
| final_analysis = _run_task_trial(env_cfg, monitor) | ||
| utilization = final_analysis["system_utilization_analytics"] | ||
| within_thresholds = all(value <= limit for value, limit in zip(utilization, thresholds)) | ||
| if not args_cli.autotune or not within_thresholds: | ||
| break |
There was a problem hiding this comment.
Autotune Records Failing Trial
When a trial exceeds a utilization threshold, final_analysis has already been replaced with that trial's results before the loop exits. The script then reports last_passing_count, but records timing and utilization from the threshold-exceeding count, so the saved benchmark does not represent the advertised autotune result. Preserve the previous passing analysis with its count, or record every trial with matching metadata.
There was a problem hiding this comment.
Isaac Lab Review Bot
The modernization coherently unifies the Camera and RayCasterCamera paths, adopts config-first launching, and handles ProxyArray-to-Torch conversion at the depth-processing boundary. Three compatibility and benchmark-contract issues remain: explicit zero-valued legacy counts are rejected, the default autotune interval invalidates the newly documented two-cameras-per-environment command, and standalone num_objects now applies per environment despite being documented as a scene-wide count.
- Design and architecture: The pre-launch configuration and post-launch instantiation split is coherent, as are the unified CameraSelection flow, per-environment camera cardinality, and ray-caster mounts. However, placing standalone objects below {ENV_REGEX_NS} makes object count scale with camera count, materially changing the benchmark workload unless this per-environment behavior is explicitly intended and documented.
- API: Deprecated aliases do not fully preserve accepted legacy command shapes because an explicit zero count is treated as a selected camera kind. Autotune validation also conflicts with the default interval and the guide's task_num_cameras_per_env=2 example. The num_objects CLI description and guide should state that the value is per environment if that new behavior is intentional.
- Implementation: The exact warmup and measurement loops, CUDA synchronization, NVML cleanup, zero-action reuse, and non-retained camera outputs are well structured. Before merge, adjust legacy zero-count resolution, make autotune interval handling compatible with the documented command, and align the standalone object-count implementation or documentation with the intended workload.
Minor fixes needed. Posted 3 actionable findings inline.
Automated review; human maintainers own approval decisions.
| ("--num_tiled_cameras", args.num_tiled_cameras, args.tiled_camera_data_types), | ||
| ("--num_standard_cameras", args.num_standard_cameras, args.standard_camera_data_types), | ||
| ] | ||
| selected_legacy = [(name, count, data_types) for name, count, data_types in legacy_counts if count is not None] |
There was a problem hiding this comment.
🟡 Warning · Api — Explicit zero legacy counts now rejected
Legacy counts default to None and any supplied value marks the option as selected, so --num_tiled_cameras 100 --num_standard_cameras 0 now errors as mutually exclusive. The previous script defaulted both to 0 and only conflicted on two positive counts, and its own warning text told users to set the unused counts to 0. Treat non-positive legacy counts as unselected while keeping the negative-value rejection.
| if args.autotune: | ||
| if args.autotune_camera_count_interval <= 0: | ||
| parser.error("--autotune_camera_count_interval must be greater than zero.") | ||
| if args.autotune_camera_count_interval % args.task_num_cameras_per_env != 0: |
There was a problem hiding this comment.
🟡 Warning · Api — Autotune interval default rejects documented example
The default --autotune_camera_count_interval is 25, so this check fails for any even --task_num_cameras_per_env. The autotune example added in the same PR (docs lines 76-78: --task_num_cameras_per_env 2 --autotune) therefore exits with status 2 before launching. Either round the interval up to a multiple of the per-env count, or change the default/documented example so the guide's command runs.
| experiment_group.add_argument( | ||
| "--experiment_length", type=int, default=15, help="Number of measured simulation steps." | ||
| ) | ||
| experiment_group.add_argument("--num_objects", type=int, default=10, help="Number of objects in the sample scene.") |
There was a problem hiding this comment.
🔵 Suggestion · Implementation — num_objects is now per environment
The standalone scene uses num_envs=selection.count and spawns objects under {ENV_REGEX_NS}/Objects/Obj_XX, so the total is num_objects * num_cameras. The help text ("Number of objects in the sample scene") and the guide example (--num_cameras 2 --num_objects 100, described as 100 objects) both understate the spawned count, which changes what the benchmark measures. Reword both to state "per environment".
Description
Modernizes
benchmark_cameras.pyfor the currentdevelopAPIs and fixes its current camera-output failure.The original reset failure in #4334 came from the old Fabric cloning path exposing only one camera prim to the sensor. The current clone-plan architecture has resolved that cardinality problem, but the stale benchmark then fails during depth-to-point-cloud conversion because camera outputs and intrinsics are now Warp-first
ProxyArrayobjects. This change uses explicit cached zero-copy.torchviews at that Torch math boundary.The cleanup also:
CameraAPI while retaining deprecated CLI aliases;Fixes #4334
Type of change
Release backport
developScreenshots
Not applicable.
Validation
uv run --frozen --extra test pytest -q scripts/benchmarks/test/test_benchmark_cameras_cli.py(4 passed)uv run --frozen isaaclab -fuv run --isolated --extra dev -- make -C docs current-docsIsaac-Cartpoleon Newton + RTXCameraon PhysX + RTXCameraon RTXRayCasterCameraChecklist
uv run isaaclab -fCONTRIBUTORS.md