Support Matrix¶
Each generated block is assembled from registry entries, owner-YAML backend
identity, validation inventories, and UniSim’s static platform profiles. The
generator implementation is scripts/tools/support_matrix.py. Do not infer
support beyond the evidence grade shown below.
Backend Selection Rules¶
The tensor-only Manager runtime supports
mujoco,mjwarp,genesis,newton,motrix, the scoped Drake owner, and the explicit external-worker Isaac owners below.The default backend is
mujoco.--sim mjwarprequires themjwarpextra. Validated combinations are shown in the generated matrix below; all other entrypoints retain their matrix evidence grade.--sim genesisrequires thegenesisextra; real CUDA/platform requirements are shown in the generated matrix.--sim newtonrequires thenewtonextra; real CUDA/platform requirements are shown in the generated matrix.--sim motrixrequires themotrixextra; the CPU-authoritative packed HOST_BRIDGE profile is shown in the generated matrix.--sim drakerequires the local Drake extra and DrakeUni batch extension. Its current scoped support claim is PPOgo2_joystick_flatonly.--sim isaacgymand--sim isaacsimrequire their isolated external Python workers and same-GPU CUDA IPC; use the setup scripts on their backend pages.--algo,--task, and--simjointly select the owner YAML.Do not treat
training.sim_backendas a standalone backend switch.Isaac support grades remain task/evidence gated.
superdexremains limited to its configured research owner.
Playback Differences¶
mujoco:--render-mode autoexportsplay_video.mp4;--render-mode viserserves the rollout in a browser-based viser viewer.mjwarp: supports explicit, finite-steprecordby default, rendered offline through the task owner’s MuJoCo visual model;--render-mode interactiveroutes to the MuJoCo interactive viewer (mjwarp runs the physics while MuJoCo renders env[0], forced to a single env);--render-mode viserroutes to the browser-based viser viewer with per-env MuJoCo playback models;autoand native renderers are not supported.genesis:viseris unsupported, as is the MuJoCo interactive/offline playback contract described here.newton: the canonical owners userecordthrough native Newton rendering, with the MuJoCo snapshot as the incomplete-install fallback.--render-mode record: MuJoCo and mjwarp record a video only.--render-mode none: no playback.
Support Matrix¶
The matrix below is generated from registry entries, owner YAMLs, validation inventories, and UniSim platform profiles. Do not edit its tables by hand. Refresh it with:
uv run scripts/generate_support_matrix.py --write
Evidence Grades¶
Grade |
Repository evidence |
|---|---|
|
The env/backend exists in |
|
The owner YAML sets |
|
Automated coverage or explicit maintainer validation; it is not a default recommendation. |
|
A checked-in benchmark manifest is bound to the combination. |
|
Explicit recommendation metadata exists in the repository. |
Tested describes repository evidence only; it does not imply every DR, rendering, or production capability of the MuJoCo owner. No benchmark or recommendation metadata is currently checked in, so rows do not auto-promote to Benchmarked or Recommended.
Tensor Backend Platform Matrix¶
This table is derived from UniSim’s SDK-free public static inventory. It describes reviewed tensor-lifecycle boundaries, not optional-SDK installation and not automatic task-owner support.
Backend |
Execution / process / data plane |
Torch devices |
CUDA runtime |
Linux+CUDA |
macOS |
ROCm |
Worker |
Reset randomization |
Fixed variants |
Host callbacks |
Packed bridge |
|---|---|---|---|---|---|---|---|---|---|---|---|
|
Host bridge / in-process / host bridge |
CPU / CUDA |
Required only when the learner requests CUDA state/control buffers |
Supported: CPU-authoritative physics with optional CUDA Torch buffers |
CPU-authoritative host bridge only; no CUDA physics claim |
CPU-authoritative host bridge with explicit ROCm Torch buffers ( |
In-process; no external Python worker |
unknown |
unknown |
Unsupported |
Exact |
|
Host bridge / in-process / host bridge |
CPU / CUDA |
Required only when the learner requests CUDA state/control buffers |
Supported: CPU-authoritative physics with optional CUDA Torch buffers |
CPU-authoritative host bridge only; no CUDA physics claim |
CPU-authoritative host bridge with explicit ROCm Torch buffers ( |
In-process; no external Python worker |
unknown |
Unsupported |
Unsupported |
Exact |
|
Host bridge / in-process / host bridge |
CPU / CUDA |
Required only when the learner requests CUDA state/control buffers |
Supported: CPU-authoritative physics with optional CUDA Torch buffers |
CPU-authoritative host bridge only; no CUDA physics claim |
CPU-authoritative host bridge with explicit ROCm Torch buffers ( |
In-process; no external Python worker |
Unsupported |
Unsupported |
Unsupported |
Exact |
|
Device-resident / in-process / direct |
CUDA |
Required for the entire tensor lifecycle |
Supported: Linux CUDA only |
Unsupported; no CPU, MPS, or ROCm fallback |
Unsupported; no CPU, MPS, or ROCm fallback |
In-process; no external Python worker |
Unsupported |
Unsupported |
Unsupported |
Unsupported |
|
Device-resident / in-process / direct |
CUDA |
Required for the entire tensor lifecycle |
Supported: Linux CUDA only |
Unsupported; no CPU, MPS, or ROCm fallback |
Unsupported; no CPU, MPS, or ROCm fallback |
In-process; no external Python worker |
Exact |
Unsupported |
Unsupported |
Unsupported |
|
Host bridge / in-process / host bridge |
CPU / CUDA |
Required only when the learner requests CUDA state/control buffers |
Supported: CPU-authoritative physics with optional CUDA Torch buffers |
CPU-authoritative host bridge only; no CUDA physics claim |
CPU-authoritative host bridge with explicit ROCm Torch buffers ( |
In-process; no external Python worker |
Unsupported |
Unsupported |
Unsupported |
Exact |
|
Device-resident / in-process / direct |
CUDA |
Required for the entire tensor lifecycle |
Supported: Linux CUDA only |
Unsupported; no CPU, MPS, or ROCm fallback |
Unsupported; no CPU, MPS, or ROCm fallback |
In-process; no external Python worker |
Exact |
Unsupported |
Unsupported |
Unsupported |
|
Device-resident / external worker / cuda ipc |
CUDA |
Required for the entire tensor lifecycle |
Supported: Linux CUDA only |
Unsupported; no CPU, MPS, or ROCm fallback |
Unsupported; no CPU, MPS, or ROCm fallback |
Dedicated external Python 3.8 worker; host Python paths are not inherited |
Exact |
Unsupported |
Unsupported |
Unsupported |
|
Device-resident / external worker / cuda ipc |
CUDA |
Required for the entire tensor lifecycle |
Supported: Linux CUDA only |
Unsupported; no CPU, MPS, or ROCm fallback |
Unsupported; no CPU, MPS, or ROCm fallback |
Dedicated external Python 3.11 worker; host Python paths are not inherited |
Exact |
Unsupported |
Unsupported |
Unsupported |
Pairing contract (issue #2483, ADR-0019): with a CUDA learner on a non-ROCm Torch build, training.collector_tensor_device=cpu fails closed — the HOST_BRIDGE CPU Torch-device capability above is not a CUDA-learner pairing. CPU carriers remain valid for CPU and torch.mps learners and for ROCm/HIP builds; attribution baselines opt in via UNILAB_ALLOW_CUDA_LEARNER_CPU_CARRIER=1.
Entrypoint x Task Owner¶
Entrypoint |
Task owner |
MuJoCo |
Motrix |
Drake |
mjwarp |
Newton |
SuperDex |
Genesis |
IsaacGym |
IsaacSim |
|---|---|---|---|---|---|---|---|---|---|---|
PPO (torch) |
|
Tested |
Tested |
Configured |
- |
- |
Configured |
- |
- |
- |
PPO (torch) |
|
Tested |
Tested |
- |
Tested |
Registered |
- |
Configured |
Registered |
Registered |
PPO (torch) |
|
Tested |
Tested |
- |
Registered |
Registered |
- |
Registered |
- |
- |
APPO (torch) |
|
Tested |
Tested |
Registered |
- |
- |
Registered |
- |
- |
- |
APPO (torch) |
|
Tested |
Registered |
- |
Registered |
Registered |
- |
Registered |
Registered |
Registered |
APPO (torch) |
|
Tested |
Tested |
- |
Registered |
Registered |
- |
Registered |
- |
- |
SAC (torch) |
|
Tested |
Tested |
- |
Tested |
Tested |
- |
Tested |
Tested |
Tested |
SAC (torch) |
|
Tested |
Tested |
- |
Configured |
Registered |
- |
Configured |
- |
- |
FlashSAC (torch) |
|
Tested |
Registered |
Registered |
- |
- |
Registered |
- |
- |
- |
FlashSAC (torch) |
|
Tested |
Tested |
- |
Configured |
Registered |
- |
Registered |
Registered |
Registered |
FlashSAC (torch) |
|
Tested |
Tested |
- |
Configured |
Configured |
- |
Configured |
- |
- |
Source Index¶
Registry bootstrap:
src/unilab/envs/**decorators viaunilab.base.registry.ensure_registries().Owner backend identity:
training.sim_backendinsrc/unilab/conf/{ppo,appo,sac,flashsac}/task/**.Platform/capability source:
unisim.support.get_tensor_platform_profiles().Unsupported platform/device requests are guarded before backend construction in
src/unilab/base/backend_factory.py.Generic compose coverage:
tests/config/test_config_system.py::test_supported_task_composes.
Platform Troubleshooting¶
CUDA-only tensor backends are rejected before backend construction on CPU, MPS, macOS, ROCm/HIP, unavailable CUDA, malformed CUDA ordinals, and out-of-range device requests. They do not fall back to NumPy or a host bridge.
Check the Torch runtime and visible ordinals in the same process environment:
uv run python -c "import torch; print(torch.__version__, torch.version.cuda, torch.version.hip, torch.cuda.is_available(), torch.cuda.device_count(), torch.cuda.current_device())"
torch.version.hip must be None for the CUDA-only matrix. If CUDA is
unavailable, check the NVIDIA driver/container mismatch before changing task
configuration. If CUDA_VISIBLE_DEVICES is set, backend ordinals address that
remapped namespace, not host-global physical indices.
On macOS and ROCm, use a CPU-authoritative host-bridge backend. On ROCm,
Manager/TorchEnv uses the current GPU whenever the learner device is CUDA —
the default training.collector_tensor_device=auto follows the learner device —
or when training explicitly sets training.collector_tensor_device=cuda, provided
the selected HOST_BRIDGE backend declares and accepts the routed cuda
env.collector_tensor_device; CPU learners keep CPU, torch.mps learners retain the
owner/default CPU placement, and direct environment construction remains CPU.
GPU Torch buffers on a host bridge do not imply GPU physics or a
device-resident backend lifecycle.