Background
FlashSAC g1_motion_tracking now runs on five backends (mujoco, motrix, mjwarp, newton, genesis) after #1603, with training metrics at or above the fastsac baseline. Three known gaps remain, and closing them spans three repositories: Motphys/UniLab (this repo, owner configs/registration), unilabsim/unisim (backend adapters), unilabsim/unilab_rl (algo runners/collectors). This issue tracks the cross-repo roadmap.
Work items
1. Newton CUDA graph acceleration (unisim → unilab)
The newton backend reaches ~35k sps vs mjwarp's ~94k on the same task. Unlike mjwarp — where CUDA graphs are automatic and transparent (unisim/backend/mjwarp/backend.py, _cuda_graph_eligibility(): CUDA + driver ≥ 12.4 + mempool, eager fallback) — NewtonBackend has no graph support at all, and newton.SolverMuJoCo (1.5.1) exposes no graph parameter.
2. Genesis cold-start tick-0 timeout — root fix (unilab_rl → unilab)
First genesis run always hits TimeoutError: collector inference tick 0 (30s): collector env construction — including genesis kernel JIT (all of it inside scene.build, no lazy compilation left) and the first reset — happens inside the tick-0 timing window (uni_rl/offpolicy/double_buffer_runner.py:555, worker.py:232→325). The disk cache (~/.cache/quadrants/qdcache/) fixes second runs, but even warm builds at 2048 envs can exceed 30s (per-process kernel module loading). The existing learner-side 1-env probe env does not warm the collector's cache: genesis forks kernel sets by n_envs (PARA_LEVEL.PARTIAL for n_envs≤1 vs ALL otherwise, genesis/engine/scene.py:967).
Current state: timeout override (training.inference_request_timeout_sec) is only a mitigation, and flash_sac doesn't even forward it yet (unilabsim/unilab_rl#26; fast_td3 is missing it too).
3. isaacgym/isaacsim worker state fixes (unisim → unilab)
References
Background
FlashSAC
g1_motion_trackingnow runs on five backends (mujoco, motrix, mjwarp, newton, genesis) after #1603, with training metrics at or above the fastsac baseline. Three known gaps remain, and closing them spans three repositories: Motphys/UniLab (this repo, owner configs/registration), unilabsim/unisim (backend adapters), unilabsim/unilab_rl (algo runners/collectors). This issue tracks the cross-repo roadmap.Work items
1. Newton CUDA graph acceleration (unisim → unilab)
The newton backend reaches ~35k sps vs mjwarp's ~94k on the same task. Unlike mjwarp — where CUDA graphs are automatic and transparent (
unisim/backend/mjwarp/backend.py,_cuda_graph_eligibility(): CUDA + driver ≥ 12.4 + mempool, eager fallback) —NewtonBackendhas no graph support at all, andnewton.SolverMuJoCo(1.5.1) exposes no graph parameter.NewtonBackend, following the mjwarp eligibility/fallback pattern. Constraints identified:_physics_substepswapsstate/state_outpointers each step → capture the full nsteps loop (or parity double-graphs)set_state(reset) allocates fresh warp arrays per call → keep reset outside the graph unless fixed-capacity scratch is added (mjwarp_RESET_SCRATCH_CAPACITYpattern)materialize()capacity calibration rebuilds statebackend.py:623-632) limits graph benefit; consider periodic checking (behavior change, needs review)newton_use_cuda_graph) insrc/unilab/base/base.py+backend_factory.pyforwarding; document in newton owner YAMLsg1_motion_trackingfull-budget training (target: sps uplift, reward parity with the 26.50 / best 34.15 eager result)2. Genesis cold-start tick-0 timeout — root fix (unilab_rl → unilab)
First genesis run always hits
TimeoutError: collector inference tick 0 (30s): collector env construction — including genesis kernel JIT (all of it insidescene.build, no lazy compilation left) and the first reset — happens inside the tick-0 timing window (uni_rl/offpolicy/double_buffer_runner.py:555,worker.py:232→325). The disk cache (~/.cache/quadrants/qdcache/) fixes second runs, but even warm builds at 2048 envs can exceed 30s (per-process kernel module loading). The existing learner-side 1-env probe env does not warm the collector's cache: genesis forks kernel sets byn_envs(PARA_LEVEL.PARTIALfor n_envs≤1 vsALLotherwise,genesis/engine/scene.py:967).Current state: timeout override (
training.inference_request_timeout_sec) is only a mitigation, and flash_sac doesn't even forward it yet (unilabsim/unilab_rl#26; fast_td3 is missing it too).init_state; learner starts tick timing only after ready, so 30s bounds steady-state ticks, not backend cold start. Merge with unilab_rl#26 (timeout forwarding for flash_sac/fast_td3)GS_PARA_LEVEL=2for the learner probe env whensim_backend=genesisso the probe compiles the same kernel set as the collector, moving cold JIT into the untimed runner-construction phase (src/unilab/scripts/train_offpolicy.py)3. isaacgym/isaacsim worker state fixes (unisim → unilab)
src/unilab/tasks/motion_tracking/g1/__init__.py, add owner YAMLs, and run full-budget flashsac training validationtests/envs/test_env_configs.pybackend listReferences
get_motion_body_ids(fixed in unisim-core 1.5.1 via feat: implement get_motion_body_ids on newton/genesis, fix subprocess offset (#137) unilabsim/unisim#140)inference_request_timeout_sec