Skip to content

fix(runtime): require explicit host-bridge manager devices - #2094

Merged
TATP-233 merged 1 commit into
mainfrom
fix/host-bridge-explicit-manager-device
Oct 8, 2026
Merged

TATP-233 merged 1 commit into
mainfrom
fix/host-bridge-explicit-manager-device

Conversation

@TATP-233

@TATP-233 TATP-233 commented Oct 8, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Restored CPU-default Manager/TorchEnv placement for HOST_BRIDGE backends and made accelerator carriers explicitly requested through ManagerBasedRlEnvCfg.manager_torch_device.
  • Routed explicit CUDA learner/collector placement through PPO, APPO, SAC/FlashSAC, and interactive playback env overrides; unsupported placements continue to fail closed against the declared backend capability inventory.
  • Updated stale visualization/playback test doubles after the tensor-command and physics-state playback migrations, corrected Genesis test diagnostics/private camera field access, and fixed assertions accidentally migrated from a retired task owner.
  • Updated ADR-0012, bilingual install docs, and the generated support matrix to describe explicit host-bridge Torch carrier placement.

User/training impact: default registry.make(..., sim_backend="mujoco") construction is CPU again on CUDA hosts. Training/playback processes that explicitly select CUDA still receive CUDA host-bridge carriers through the resolved learner/collector device.

Linked Work

  • Issue: none created (validation-failure repair)
  • Parent roadmap (when applicable): none
  • Roadmap declared base (when applicable): none
  • Milestone: none
  • Base branch: main
  • Governing ADR: ADR-0012-sole-tensor-manager-and-scoped-backends

Validation

  • make test-all passed on the final local head before this PR was created or updated
  • Additional task-specific validation listed below

Commands actually run:

uv run --no-sync pytest -q -m '' \
  tests/config/test_locomotion_params.py::test_ppo_g1_motion_tracking \
  tests/base/test_genesis_runtime.py::test_interactive_viewer_renders_frames \
  tests/envs/test_env_configs.py::test_env_reset_and_step \
  tests/envs/test_env_configs.py::test_g1_motion_manager_ppo_wraps_only_active_rows_in_one_state_commit \
  tests/envs/test_env_configs.py::test_g1_motion_manager_sac_clip_end_is_truncation \
  tests/envs/test_observation_partial_reset.py::test_observation_partial_reset_row_contract \
  tests/scripts/test_visualization_entrypoints.py::test_build_keyboard_commander_makes_keyboard_authoritative \
  tests/scripts/test_visualization_entrypoints.py::test_velocity_arrows_require_velocity_command_task_and_policy_obs \
  tests/scripts/test_visualization_entrypoints.py::test_play_interactive_binds_mjwarp_process_device_before_session \
  tests/scripts/test_visualization_entrypoints.py::test_play_interactive_device_binding_is_noop_for_mujoco \
  tests/scripts/test_train_scripts.py::test_host_bridge_env_overrides_route_explicit_manager_torch_device \
  tests/scripts/test_train_scripts.py::test_play_offpolicy_can_skip_onnx_export_and_still_record_video \
  tests/scripts/test_train_scripts.py::test_play_offpolicy_onnx_export_failure_still_records_video \
  tests/scripts/test_train_scripts.py::test_play_interactive_runner_log_dir_uses_algo_log_name \
  tests/envs/test_manager_based_rl_env.py::test_backend_capability_defaults_host_bridge_manager_carriers_to_cpu \
  tests/envs/test_manager_based_rl_env.py::test_host_bridge_ignores_accelerator_availability_without_explicit_request \
  tests/envs/test_manager_based_rl_env.py::test_manager_torch_device_rejects_non_tensor_device_and_invalid_syntax \
  tests/envs/test_manager_based_rl_env.py::test_mujoco_host_bridge_manager_tensor_lifecycle \
  tests/base/backend/test_process_device.py tests/scripts/test_support_matrix.py
# 67 passed

PYTHONPATH=../unisim-genesis/src uv run --no-sync pytest -q -m '' \
  'tests/envs/locomotion/g1/test_g1_owner_contract.py::test_g1_walk_flat_genesis_owner_real_runtime_smoke[ppo]' \
  'tests/envs/locomotion/g1/test_g1_owner_contract.py::test_g1_walk_flat_genesis_owner_real_runtime_smoke[sac]'
# 2 passed with the separate UniSim Genesis contact-view fix loaded

make check
# ruff, mypy, pyright, and test lint checks passed

make test
# 1873 passed, 21 skipped, 489 deselected

make test-all
# complete gate passed:
# - non-slow + coverage: 1873 passed, 21 skipped
# - benchmark import smoke: module-mode 34/34; script-mode 35/35

Remote CI route:

  • Base main: current-head CI is requested by opening this PR; status must be checked before merge.

Impact

  • Backend impact: mujoco / motrix / drake / superdex host-bridge Manager carrier placement
  • Platform impact: Linux and macOS; explicit CUDA/ROCm CUDA-namespace carriers remain supported on Linux GPU hosts
  • Training effect expected: yes — default direct MuJoCo construction is CPU again; explicit CUDA training/playback still routes CUDA carriers

Artifacts

  • W&B: none
  • benchmark result: none
  • video / screenshot: none
  • ONNX / checkpoint: none

Checklist

  • Added or updated tests where needed
  • Updated docs if behavior or workflow changed
  • Linked the driving issue
  • Noted any follow-up work explicitly

Follow-up:

  • The sibling UniSim repository contains the required Genesis tensor contact-view contract fix ((num_envs,) bool → (num_envs, 1) float32) in a local worktree. It must be reviewed/released in UniSim before this repository's Genesis runtime smoke can pass against published packages alone.

@TATP-233
TATP-233 requested a review from caozx1110 as a code owner October 8, 2026 14:41
@TATP-233
TATP-233 merged commit a003edf into main Oct 8, 2026
8 checks passed
@TATP-233
TATP-233 deleted the fix/host-bridge-explicit-manager-device branch October 8, 2026 14:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant