Skip to content

Isaac ROS 4.5 pins TensorRT 10.13.3, which has no sm_87 cubin — TensorRT inference is broken on Jetson Orin / JetPack 7.2 #22

Description

@rob-pointcloud

Isaac ROS 4.5 pins TensorRT 10.13.3, which has no sm_87 cubin — TensorRT inference is broken on Jetson Orin / JetPack 7.2
Problem
isaac-ros-cli 2.4.0 ships an exact-version apt pin:

/etc/apt/preferences.d/isaac-ros-tensorrt-13-0.pref (owned by isaac-ros-cli)

Package: libnvinfer* tensorrt* libnvonnxparsers* python3-libnvinfer*
Pin: version 10.13.3.9-1+cuda13.0
Pin-Priority: 1001
TensorRT 10.13.3 has no sm_87 cubin, and sm_87 is Jetson Orin. Any TensorRT engine build inside the container fails:

Target GPU SM 87 is not supported by this TensorRT release.
(in checkCurrentSMEnabled at optimizer/common/builderHelpers.cpp:707)
The same apt repo already serves 10.16.1.11-1+cuda13.2, which includes sm_87 and is what JetPack 7.2 installs on the host. The pin (priority 1001) overrides it.

Environment
Jetson Orin Nano (p3767-0005, sm_87) · JetPack 7.2 GA / L4T R39.2.0 · Isaac ROS 4.5 (release-4.5 noble-jetpack) · isaac-ros-cli 2.4.0-1.20260707043405

Host: CUDA 13.2.1 / TensorRT 10.16.2.10+cuda13.2 — Container: CUDA 13.0.3 / TensorRT 10.13.3.9+cuda13.0

Evidence
sm_87 missing from the pinned build (sm_86 and sm_89 are present, 87 is skipped):

container, TensorRT 10.13.3

$ cuobjdump --list-elf libnvinfer.so.10.13.3 | grep -oiE 'sm_[0-9]+' | sort -u | tr '\n' ' '
sm_100 sm_103 sm_110 sm_120 sm_121 sm_75 sm_80 sm_86 sm_89 sm_90

host, TensorRT 10.16.2

$ cuobjdump --list-elf libnvinfer.so.10.16.2 | grep -oiE 'sm_[0-9]+' | sort -u | tr '\n' ' '
sm_100 sm_103 sm_110 sm_120 sm_121 sm_75 sm_80 sm_86 sm_87 sm_89 sm_90
No PTX fallback — shipped PTX stops at sm_86, and PTX cannot JIT forward to a newer arch.

Host TensorRT is not reachable from the container — the container runtime injects no libnvinfer, and ldconfig resolves to the container's own 10.13.3.

Reproduction (ZED SDK Camera::open() with DEPTH_MODE::NEURAL, which builds a TRT engine for the local GPU):

[ZED][WARNING] IBuilder::buildSerializedNetwork: Error Code 9: API Usage Error
(Target GPU SM 87 is not supported by this TensorRT release. ...)
[ZED][ERROR] NEURAL CORRUPTED MODEL
[ZED][ERROR] CORRUPTED SDK INSTALLATION
The same call with DEPTH_MODE::PERFORMANCE (no TensorRT) succeeds and returns depth, and CUDA reports devices=1, dev0: Orin, compute capability sm_87 — so camera, CUDA and GPU access are all healthy. Only the TensorRT path fails.

Scope
Only TensorRT-backed inference. Exactly one shared object under /opt/ros/jazzy/lib links TensorRT (libtensor_rt_node.so); the rest link libcudart directly. nvblox_node and isaac_ros_apriltag start normally.

Affected: isaac_ros_tensor_rt, isaac_ros_triton, DNN inference nodes, and third-party SDKs that build a TRT engine at runtime (e.g. ZED neural depth).

Possibly a stale pin
The isaac-ros-cli changelog shows TensorRT pinning is maintained per JetPack release:

isaac-ros-cli (2.2.0-1) * Align TensorRT pinning with JetPack 7.1.
The 2.4.0 entry (Isaac ROS 4.5) has no corresponding re-alignment, and JetPack 7.2 moved the Jetson stack to CUDA 13.2 / TensorRT 10.16. The sibling isaac-ros-cuda-13-0.pref has a 2026 header and explanatory comments; isaac-ros-tensorrt-13-0.pref has a 2025 header and no rationale.

If the pin is intentional for Orin, a comment saying why would help.

Suggested fix
Re-align the TensorRT pin to 10.16.x+cuda13.2 for noble-jetpack, as 2.2.0 did for JetPack 7.1. A floor rather than an exact pin would also avoid this on future JetPack bumps.

ABI note
The exact pin looks stricter than TensorRT's soname policy requires: both versions export soname libnvinfer.so.10, and libtensor_rt_node.so links only that major soname. Comparing exported symbols, none were removed — 10.16.2 adds setInternalLibraryPath and updates version markers.

Link-level observation only; it says nothing about serialized engine format or plugin behaviour (cf. isaac_ros_common#223). We are testing an override to 10.16.1.11+cuda13.2 and will report runtime results.

Workaround
Package: libnvinfer* tensorrt* libnvonnxparsers* python3-libnvinfer*
Pin: version 10.16.1.11-1+cuda13.2
Pin-Priority: 1002

Package: libnvinfer11 libnvinfer-11 libnvonnxparsers11 tensorrt11
Pin: version *
Pin-Priority: -1
Deleting NVIDIA's pin files alone is not sufficient — apt then jumps to TensorRT 11.2.1+cuda13.3. With the replacement pin, apt-get -s install resolves cleanly to 10.16.1.11+cuda13.2 with no Isaac ROS packages removed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions