diff --git a/docs/ARC_CLOCK_CONTRACT.md b/docs/ARC_CLOCK_CONTRACT.md index 11964d8cfd..6c90fece3b 100644 --- a/docs/ARC_CLOCK_CONTRACT.md +++ b/docs/ARC_CLOCK_CONTRACT.md @@ -4,6 +4,12 @@ This contract replaces the historical Cartesian mean/wide/stacked/clock/E1 families. It builds on PR #263 and preserves the local first-row-delay implementation. It does not change the separate planar or Libero codecs. +New run presets are grouped by task under `hydra_configs/experiment/`: +`organize_stationary`, `fold_and_stack_towels`, `wireless_earbuds`, and +`multitask`, each with `arc_vel`, `arc_dur`, and `baseline`. +See the [experiment menu](../egomimic/hydra_configs/experiment/README.md) +for models, frozen data pools, budgets, retained variants and migration. + ```yaml _target_: egomimic.rldb.zarr.arc_length_tokenizer.TokenizeBimanualArcLengthCartesian clock_mode: velocity # velocity | duration diff --git a/docs/experiment_config_migration.json b/docs/experiment_config_migration.json new file mode 100644 index 0000000000..074ab9a5b1 --- /dev/null +++ b/docs/experiment_config_migration.json @@ -0,0 +1,32 @@ +{ + "abc_arc/cotrain/organize_clock_duration_full_separation": "organize_stationary/arc_dur", + "abc_arc/cotrain/organize_clock_duration_translation_rotation": "organize_stationary/arc_dur", + "abc_arc/cotrain/organize_clock_velocity_full_separation": "organize_stationary/arc_vel", + "abc_arc/cotrain/organize_clock_velocity_translation_rotation": "organize_stationary/arc_vel", + "abc_arc/cotrain/organize_rl2_elmo_hpt180_cotrain_baseline": "organize_stationary/variants/organize_rl2_elmo_hpt180_cotrain_baseline", + "abc_arc/cotrain/organize_rl2_elmo_hpt180_cotrain_multistream": "organize_stationary/variants/organize_rl2_elmo_hpt180_cotrain_multistream", + "abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_baseline": "organize_stationary/baseline", + "abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream": "organize_stationary/_base/arc", + "abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream_logclock": "organize_stationary/arc_dur", + "abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream_perwaypoint": "organize_stationary/arc_vel", + "abc_arc/robot_bc/abc_multitask4_abcdit_baseline_visual_openloop": "multitask/variants/abc_multitask4_abcdit_baseline_visual_openloop", + "abc_arc/robot_bc/abc_multitask4_abcdit_hybrid_visual_openloop": "multitask/variants/abc_multitask4_abcdit_hybrid_visual_openloop", + "abc_arc/robot_bc/abc_multitask4_hpt300_baseline_visual_openloop": "multitask/baseline", + "abc_arc/robot_bc/abc_multitask4_hpt300_hybrid_visual_openloop": "multitask/arc_vel", + "abc_arc/robot_bc/abc_rl2_towels_abcdit_baseline_visual_openloop": "fold_and_stack_towels/variants/abc_rl2_towels_abcdit_baseline_visual_openloop", + "abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_logclock_visual_openloop": "fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_logclock_visual_openloop", + "abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_visual_openloop": "fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_visual_openloop", + "abc_arc/robot_bc/abc_rl2_towels_hpt180_multistream_visual_openloop": "fold_and_stack_towels/variants/abc_rl2_towels_hpt180_multistream_visual_openloop", + "abc_arc/robot_bc/abc_towels_hpt180_baseline_visual_openloop": "fold_and_stack_towels/variants/abc_towels_hpt180_baseline_visual_openloop", + "abc_arc/robot_bc/abc_towels_hpt180_hybrid_visual_openloop": "fold_and_stack_towels/variants/abc_towels_hpt180_hybrid_visual_openloop", + "abc_arc/robot_bc/abc_visual_hpt300_base": "_shared/visual_hpt300", + "abc_arc/robot_bc/stationery_rl2_hpt300_visual_baseline_openloop": "organize_stationary/variants/stationery_rl2_hpt300_visual_baseline_openloop", + "abc_arc/robot_bc/stationery_rl2_hpt300_visual_hybrid_openloop": "organize_stationary/variants/stationery_rl2_hpt300_visual_hybrid_openloop", + "yam_arc_grid/_base/earbuds_updated_hpt300": "_shared/frozen_yam/earbuds_updated_hpt300", + "yam_arc_grid/_base/stattempo": "_shared/frozen_yam/stattempo", + "yam_arc_grid/_base/stattempo_openloop": "_shared/frozen_yam/stattempo_openloop", + "yam_arc_grid/_base/towels_hpt300": "_shared/frozen_yam/towels_hpt300", + "yam_arc_grid/earbuds_updated_time_hpt300": "wireless_earbuds/baseline", + "yam_arc_grid/towels_new290plus74_time_hpt300": "fold_and_stack_towels/variants/new290plus74_baseline", + "yam_arc_grid/towels_since0924plus74_time_hpt300": "fold_and_stack_towels/baseline" +} diff --git a/egomimic/hydra_configs/data/abc_arc/abc_visual.yaml b/egomimic/hydra_configs/data/abc_arc/abc_visual.yaml index 7295a1d1fd..9a93f5e573 100644 --- a/egomimic/hydra_configs/data/abc_arc/abc_visual.yaml +++ b/egomimic/hydra_configs/data/abc_arc/abc_visual.yaml @@ -29,7 +29,8 @@ train_datasets: min_distance_unit: ${abc.arc_distance} rotation_distance_unit: ${abc.arc_rotation_distance} resampled_vector_length: ${abc.arc_waypoints} - clock_mode: velocity + clock_mode: ${abc.arc_clock_mode} + streams: ${abc.arc_streams} filters: _target_: egomimic.rldb.filters.DatasetFilter filter_lambdas: diff --git a/egomimic/hydra_configs/experiment/README.md b/egomimic/hydra_configs/experiment/README.md new file mode 100644 index 0000000000..978bdad006 --- /dev/null +++ b/egomimic/hydra_configs/experiment/README.md @@ -0,0 +1,64 @@ +# Task-first experiments + +The Cartesian YAM/ABC experiment menu is: + +```text +experiment/ + organize_stationary/ {baseline,arc_vel,arc_dur}.yaml + fold_and_stack_towels/ {baseline,arc_vel,arc_dur}.yaml + wireless_earbuds/ {baseline,arc_vel,arc_dur}.yaml + multitask/ {baseline,arc_vel,arc_dur}.yaml + _shared/ shared defaults, not standalone runs +``` + +Select one with `+experiment=organize_stationary/arc_vel` (or `arc_dur` +or `baseline`). Cluster resources still come from the explicit +`hydra/launcher=...` selection and require a separate launch preflight. + +| Folder | Default model / data | ARC M / D / R | +| --- | --- | --- | +| organize_stationary | HPT300, RL2 Elmo robot + human organize stationery | 100 / 0.42 m / 24° | +| fold_and_stack_towels | HPT300, frozen RL2 `since0924plus74` pool | 200 / 0.33 m / 100° | +| wireless_earbuds | HPT300, frozen RL2 `wireless_earbuds_updated` pool | 200 / 0.33 m / 100° | +| multitask | HPT300, existing ABC four-task pool | 100 / 0.81 m / 24° | + +These are explicit recipe defaults, not a new distance/rotation calibration. +The four-task pool is towels, fake fruits, stationery and earbuds, **not** +the separate seven-task ABC-130k proposal. +Each task's three entries use exactly the same filters, episode lists and split. +Baseline geometry is 100 × 14 time-indexed actions. + +ARC uses the canonical [clock contract](../../../docs/ARC_CLOCK_CONTRACT.md) +(repository path `docs/ARC_CLOCK_CONTRACT.md`): velocity or log **interval** +seconds, first-row start delay, first-moving-stream termination. +It is not E1 or cumulative absolute seconds. Full separation is the default. +Use `abc.arc_streams=translation_rotation` for four clocks; token width +automatically changes from M × 20 to M × 18, including the model and decoder. +No tokenizer or detokenizer algorithm is changed by this YAML reorganization. + +The frozen towel/earbud ARC entries are **new canonical-codec recipes** built +on their retained baseline network/optimizer/pool. They read 400 native +frames, use the shared open-loop evaluator, and require fresh normalization +and training. They do not reproduce retired E1 ARC checkpoints. +The baselines retain their original evaluator/training schedule. + +## Retained variants + +Distinct existing HPT180, robot-only, ABC-DiT, ABC-only/ABC+RL2 towel, +and `new290plus74` pool choices live under each task's `variants/`. +They retain their model/data settings and are not interchangeable aliases for +the primary menu. Other task/model families (PushT, Libero, human-only, +Ravens, etc.) are untouched. + +Duplicate organize clock-layout leaves were consolidated: choose +`organize_stationary/arc_vel` or `arc_dur` and set `abc.arc_streams` instead +of choosing a second file. Distinct old experiment paths are mapped in +`docs/experiment_config_migration.json`; the two retired +`*_translation_rotation` aliases additionally require +`abc.arc_streams=translation_rotation`. + +Old CLI paths under `abc_arc/{robot_bc,cotrain}` and `yam_arc_grid` are removed, +not silently redirected. Original jobs/checkpoints must keep their recorded +source/config/normalization. No cluster jobs are migrated by changing these +files. Historical E1 recipe-generation scripts are not a supported way to +regenerate this task menu. diff --git a/egomimic/hydra_configs/experiment/_shared/clock_settings.yaml b/egomimic/hydra_configs/experiment/_shared/clock_settings.yaml new file mode 100644 index 0000000000..85bf8312ba --- /dev/null +++ b/egomimic/hydra_configs/experiment/_shared/clock_settings.yaml @@ -0,0 +1,24 @@ +# @package _global_ +# Shared Cartesian clock contract; task recipes own D, R, M and the data pool. +abc: + arc_clock_mode: velocity + arc_streams: full_separation + arc_stream_dims: + full_separation: 20 + translation_rotation: 18 + arc_token_dim: ${abc.arc_stream_dims.${abc.arc_streams}} + arc_token_rows: ${abc.arc_waypoints} +run_provenance: + action_contract: + representation: ${abc.action_mode} + arc_chunking_mode: ${abc.arc_chunking_mode} + translation_distance_m: ${abc.arc_distance} + rotation_distance_radians: ${abc.arc_rotation_distance} + waypoints: ${abc.arc_waypoints} + clock_mode: ${abc.arc_clock_mode} + streams: ${abc.arc_streams} + timing_layout: first_delay_incoming_v1 + hold_window_frames: 400 + gripper_stream_mode: ${oc.select:abc.arc_gripper_stream_mode,events} + gripper_distance_unit: ${oc.select:abc.arc_gripper_distance,null} + control_dt: ${evaluator.control_dt} diff --git a/egomimic/hydra_configs/experiment/yam_arc_grid/_base/earbuds_updated_hpt300.yaml b/egomimic/hydra_configs/experiment/_shared/frozen_yam/earbuds_updated_hpt300.yaml similarity index 86% rename from egomimic/hydra_configs/experiment/yam_arc_grid/_base/earbuds_updated_hpt300.yaml rename to egomimic/hydra_configs/experiment/_shared/frozen_yam/earbuds_updated_hpt300.yaml index 0cfe7819e4..87d9e8deb1 100644 --- a/egomimic/hydra_configs/experiment/yam_arc_grid/_base/earbuds_updated_hpt300.yaml +++ b/egomimic/hydra_configs/experiment/_shared/frozen_yam/earbuds_updated_hpt300.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: -- /experiment/yam_arc_grid/_base/towels_hpt300 +- /experiment/_shared/frozen_yam/towels_hpt300 - override /data: abc_arc/earbuds_updated - _self_ e1: diff --git a/egomimic/hydra_configs/experiment/yam_arc_grid/_base/stattempo.yaml b/egomimic/hydra_configs/experiment/_shared/frozen_yam/stattempo.yaml similarity index 100% rename from egomimic/hydra_configs/experiment/yam_arc_grid/_base/stattempo.yaml rename to egomimic/hydra_configs/experiment/_shared/frozen_yam/stattempo.yaml diff --git a/egomimic/hydra_configs/experiment/yam_arc_grid/_base/stattempo_openloop.yaml b/egomimic/hydra_configs/experiment/_shared/frozen_yam/stattempo_openloop.yaml similarity index 94% rename from egomimic/hydra_configs/experiment/yam_arc_grid/_base/stattempo_openloop.yaml rename to egomimic/hydra_configs/experiment/_shared/frozen_yam/stattempo_openloop.yaml index e51403c7bb..0437469351 100644 --- a/egomimic/hydra_configs/experiment/yam_arc_grid/_base/stattempo_openloop.yaml +++ b/egomimic/hydra_configs/experiment/_shared/frozen_yam/stattempo_openloop.yaml @@ -3,7 +3,7 @@ # validation, for robot-only BC and (via _base/stattempo_aria) Aria cotrain. # Keep evaluator selection in defaults so teacher-forced kwargs cannot leak in. defaults: -- /experiment/yam_arc_grid/_base/stattempo +- /experiment/_shared/frozen_yam/stattempo - override /evaluator: eval_open_loop_sim - _self_ trainer: diff --git a/egomimic/hydra_configs/experiment/yam_arc_grid/_base/towels_hpt300.yaml b/egomimic/hydra_configs/experiment/_shared/frozen_yam/towels_hpt300.yaml similarity index 95% rename from egomimic/hydra_configs/experiment/yam_arc_grid/_base/towels_hpt300.yaml rename to egomimic/hydra_configs/experiment/_shared/frozen_yam/towels_hpt300.yaml index e63cebe39c..651ee9e801 100644 --- a/egomimic/hydra_configs/experiment/yam_arc_grid/_base/towels_hpt300.yaml +++ b/egomimic/hydra_configs/experiment/_shared/frozen_yam/towels_hpt300.yaml @@ -3,7 +3,7 @@ # the same training recipe and tempo evaluator as the stationery base; leaves pick the frozen pool # (towels_pool + data override), the codec (e1.variant) and the run identity. defaults: -- /experiment/yam_arc_grid/_base/stattempo +- /experiment/_shared/frozen_yam/stattempo - override /model: e1/hpt300_flow_wrists_time - override /data: abc_arc/towels_since0924plus74_20261015 - _self_ diff --git a/egomimic/hydra_configs/experiment/_shared/frozen_yam_arc.yaml b/egomimic/hydra_configs/experiment/_shared/frozen_yam_arc.yaml new file mode 100644 index 0000000000..f909a9012a --- /dev/null +++ b/egomimic/hydra_configs/experiment/_shared/frozen_yam_arc.yaml @@ -0,0 +1,93 @@ +# @package _global_ +# Canonical ARC over the retained frozen YAM baseline graph and episode lists. +defaults: + - /experiment/_shared/clock_settings + - /model_contract/abc_visual@model + - override /evaluator: eval_open_loop_sim + - _self_ +abc: + action_mode: hybrid_arc_tokenizer_cartesian + arc_chunking_mode: multistream + arc_distance: 0.33 + arc_rotation_distance: 1.7453292519943295 + arc_waypoints: 200 + arc_source_buffer_frames: 400 + arc_gripper_stream_mode: events + arc_gripper_distance: null +e1: + variant: arc + yam_source_frames: ${abc.arc_source_buffer_frames} + M: ${abc.arc_waypoints} + D: ${abc.arc_distance} +arc_tokenizer: + min_distance_unit: ${abc.arc_distance} + resampled_vector_length: ${abc.arc_waypoints} +hpt: + action_horizon: ${abc.arc_token_rows} + token_dim: ${abc.arc_token_dim} +model: + action_token_dim: ${abc.arc_token_dim} + action_horizon: ${abc.arc_token_rows} + native_action_horizon: ${abc.arc_token_rows} + native_action_dim: ${abc.arc_token_dim} + inference: ${model.inference_contracts.hybrid_arc_tokenizer_cartesian} + data_requirements: + preprocessing: + '7': + key_map: + _target_: egomimic.rldb.embodiment.bimanual_arc.get_keymap + horizon: 200 + embodiment: yam + drop_wrist_images: false + yam_source_frames: ${abc.arc_source_buffer_frames} + transforms: + _target_: egomimic.rldb.embodiment.bimanual_arc.get_transform_list + variant: arc + chunk_length: 200 + time_rows: ${abc.arc_source_buffer_frames} + min_distance_unit: ${abc.arc_distance} + rotation_distance_unit: ${abc.arc_rotation_distance} + resampled_vector_length: ${abc.arc_waypoints} + stride: 1 + rotation_mode: euler + embodiment: yam + yam_source_frames: ${abc.arc_source_buffer_frames} + clock_mode: ${abc.arc_clock_mode} + streams: ${abc.arc_streams} + gripper_stream_mode: ${abc.arc_gripper_stream_mode} + source_fps: 30.0 + graph: + noising: + action_horizon: ${abc.arc_token_rows} + sampler: + action_horizon: ${abc.arc_token_rows} + model: + act_seq: ${abc.arc_token_rows} +data: + train_datasets: + yam_bimanual: + resolver: + key_map: ${model.data_requirements.preprocessing.7.key_map} + transform_list: ${model.data_requirements.preprocessing.7.transforms} + valid_datasets: + yam_bimanual: + resolver: + key_map: ${model.data_requirements.preprocessing.7.key_map} + transform_list: ${model.data_requirements.preprocessing.7.transforms} +trainer: + limit_val_batches: 1.0 +evaluator: + action_mode: arc + ground_truth_action_key: actions_time + execute_fraction: 0.3 + arc_execution_cap_mode: waypoints + arc_chunking_mode: ${abc.arc_chunking_mode} + min_distance_unit: ${abc.arc_distance} + rotation_distance_unit: ${abc.arc_rotation_distance} + resampled_vector_length: ${abc.arc_waypoints} + clock_mode: ${abc.arc_clock_mode} + streams: ${abc.arc_streams} +logger: + wandb: + id: ${name}_s42 + tags: [rl2, hpt300, "${abc.arc_clock_mode}", "${abc.arc_streams}", open_loop, video] diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_visual_hpt300_base.yaml b/egomimic/hydra_configs/experiment/_shared/visual_hpt300.yaml similarity index 70% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_visual_hpt300_base.yaml rename to egomimic/hydra_configs/experiment/_shared/visual_hpt300.yaml index eb92a89bcf..126054dfbb 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_visual_hpt300_base.yaml +++ b/egomimic/hydra_configs/experiment/_shared/visual_hpt300.yaml @@ -1,5 +1,6 @@ # @package _global_ defaults: +- /experiment/_shared/clock_settings - override /model: abc_arc/hpt_yam_visual - override /data: abc_arc/abc_visual - override /evaluator: eval_open_loop_sim @@ -30,26 +31,8 @@ abc: arc_distance: 0.4 arc_rotation_distance: null arc_waypoints: 100 - arc_token_rows: 100 - arc_token_dim: 20 - arc_streams: full_separation - arc_clock_mode: velocity arc_chunking_mode: multistream task_predicate: ??? -run_provenance: - action_contract: - representation: ${abc.action_mode} - arc_chunking_mode: ${abc.arc_chunking_mode} - translation_distance_m: ${abc.arc_distance} - rotation_distance_radians: ${abc.arc_rotation_distance} - waypoints: ${abc.arc_waypoints} - clock_mode: ${abc.arc_clock_mode} - streams: ${abc.arc_streams} - timing_layout: first_delay_incoming_v1 - hold_window_frames: 400 - gripper_stream_mode: ${oc.select:abc.arc_gripper_stream_mode,events} - gripper_distance_unit: ${oc.select:abc.arc_gripper_distance,null} - control_dt: ${evaluator.control_dt} trainer: max_steps: 240000 max_epochs: -1 @@ -74,7 +57,7 @@ evaluator: min_distance_unit: ${abc.arc_distance} rotation_distance_unit: ${abc.arc_rotation_distance} resampled_vector_length: ${abc.arc_waypoints} - clock_mode: velocity + clock_mode: ${abc.arc_clock_mode} limit_val_episodes: 16 requires_ordered_validation: true logger: diff --git a/egomimic/hydra_configs/experiment/abc_arc/README.md b/egomimic/hydra_configs/experiment/abc_arc/README.md index c6a9c4e9a0..bf92d2391a 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/README.md +++ b/egomimic/hydra_configs/experiment/abc_arc/README.md @@ -1,20 +1,14 @@ -# Supported visual ABC / human BC experiments +# Human-only BC and migrated task recipes -Launch from this experiment group, not from retired model/data templates: +Robot and cotrain presets now live in the four task folders documented in +[the experiment menu](../README.md). Distinct HPT180, ABC-DiT and data-pool +variants are preserved under those folders; duplicate clock-layout recipes +are replaced by the `abc.arc_streams` override. -| Group | Dataset | Paired recipes | -| --- | --- | --- | -| `robot_bc` | ABC stationery slice + RL2 updated organize-stationery; RL2-only validation | `stationery_rl2_hpt300_visual_{baseline,hybrid}_openloop` | -| `robot_bc` | ABC fold and stack the towels | `abc_towels_hpt180_{baseline,hybrid}_visual_openloop` | -| `robot_bc` | ABC four-task multitask | `abc_multitask4_hpt300_{baseline,hybrid}_visual_openloop` | -| `human_bc` | MECKA folding clothes, 40-hour subset | `mecka_fold_clothes_40h_human_visual_{baseline,hybrid}_openloop` | - -Brace notation denotes separate YAML files, not Hydra syntax. - -`robot_bc/abc_visual_hpt300_base` is a shared template requiring a task -predicate. Cotraining has four explicit -`organize_clock_{velocity,duration}_{full_separation,translation_rotation}` -leaves. See [the clock contract](../../../../docs/ARC_CLOCK_CONTRACT.md). +This folder retains the independent MECKA human-only folding experiments: +`human_bc/mecka_fold_clothes_40h_human_visual_{baseline,hybrid}_openloop`. +Brace notation denotes two YAML files, not Hydra syntax. +See [the clock contract](../../../../docs/ARC_CLOCK_CONTRACT.md). Select `abc.arc_clock_mode=velocity|duration` and `abc.arc_streams=full_separation|translation_rotation`, with token dimension diff --git a/egomimic/hydra_configs/experiment/abc_arc/cotrain/README.md b/egomimic/hydra_configs/experiment/abc_arc/cotrain/README.md deleted file mode 100644 index cc7383802d..0000000000 --- a/egomimic/hydra_configs/experiment/abc_arc/cotrain/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Cotrain experiments - -No cotrain experiment currently satisfies the required visual-only hybrid ARC, -per-waypoint velocity, and open-loop simulation validation contract. Add new -cotrain recipes here only when they satisfy that complete contract and include -a matching time-based baseline. diff --git a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_clock_duration_full_separation.yaml b/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_clock_duration_full_separation.yaml deleted file mode 100644 index 613a6333ab..0000000000 --- a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_clock_duration_full_separation.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# @package _global_ -defaults: - - /experiment/abc_arc/cotrain/organize_clock_velocity_full_separation - - _self_ -name: organize_clock_duration_full_separation -description: First-delay ARC log-duration, six independent clocks -abc: - arc_clock_mode: duration diff --git a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_clock_duration_translation_rotation.yaml b/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_clock_duration_translation_rotation.yaml deleted file mode 100644 index 9516d0127e..0000000000 --- a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_clock_duration_translation_rotation.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# @package _global_ -defaults: - - /experiment/abc_arc/cotrain/organize_clock_velocity_translation_rotation - - _self_ -name: organize_clock_duration_translation_rotation -description: First-delay ARC log-duration, four clocks with grippers on translation -abc: - arc_clock_mode: duration diff --git a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_clock_velocity_full_separation.yaml b/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_clock_velocity_full_separation.yaml deleted file mode 100644 index d1af8fe554..0000000000 --- a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_clock_velocity_full_separation.yaml +++ /dev/null @@ -1,11 +0,0 @@ -# @package _global_ -defaults: - - /experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream - - _self_ -name: organize_clock_velocity_full_separation -description: First-delay ARC velocity, six independent clocks -abc: - arc_clock_mode: velocity - arc_streams: full_separation - arc_token_rows: ${abc.arc_waypoints} - arc_token_dim: 20 diff --git a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_clock_velocity_translation_rotation.yaml b/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_clock_velocity_translation_rotation.yaml deleted file mode 100644 index 39d962472d..0000000000 --- a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_clock_velocity_translation_rotation.yaml +++ /dev/null @@ -1,9 +0,0 @@ -# @package _global_ -defaults: - - /experiment/abc_arc/cotrain/organize_clock_velocity_full_separation - - _self_ -name: organize_clock_velocity_translation_rotation -description: First-delay ARC velocity, four clocks with grippers on translation -abc: - arc_streams: translation_rotation - arc_token_dim: 18 diff --git a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream_logclock.yaml b/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream_logclock.yaml deleted file mode 100644 index b3839b65c8..0000000000 --- a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream_logclock.yaml +++ /dev/null @@ -1,25 +0,0 @@ -# @package _global_ -defaults: -- /experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream -- _self_ -name: organize_rl2_elmo_hpt300_cotrain_multistream_logclock -description: HPT300 ResNet-MLP cotraining, multistream ARC D0.42 R24deg M100, log-seconds duration clocks -abc: - arc_streams: full_separation -logger: - wandb: - tags: - - hpt300m - - resnet_mlp - - rl2 - - organize_stationary - - elmo - - cotrain - - human_bimanual - - multistream - - D042 - - R24deg - - M100 - - duration_log_clock - - open_loop - - video diff --git a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream_perwaypoint.yaml b/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream_perwaypoint.yaml deleted file mode 100644 index c21eb200d5..0000000000 --- a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream_perwaypoint.yaml +++ /dev/null @@ -1,27 +0,0 @@ -# @package _global_ -defaults: -- /experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream -- _self_ -name: organize_rl2_elmo_hpt300_cotrain_multistream_perwaypoint -description: HPT300 ResNet-MLP cotraining, multistream ARC D0.42 R24deg M100 per-waypoint velocity -abc: - arc_clock_mode: velocity - arc_streams: full_separation - arc_token_dim: 20 -logger: - wandb: - tags: - - hpt300m - - resnet_mlp - - rl2 - - organize_stationary - - elmo - - cotrain - - human_bimanual - - multistream - - D042 - - R24deg - - M100 - - per_waypoint - - open_loop - - video diff --git a/egomimic/hydra_configs/experiment/abc_arc/human_bc/mecka_fold_clothes_40h_human_visual_baseline_openloop.yaml b/egomimic/hydra_configs/experiment/abc_arc/human_bc/mecka_fold_clothes_40h_human_visual_baseline_openloop.yaml index d883eab2e9..ebc0c7aaba 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/human_bc/mecka_fold_clothes_40h_human_visual_baseline_openloop.yaml +++ b/egomimic/hydra_configs/experiment/abc_arc/human_bc/mecka_fold_clothes_40h_human_visual_baseline_openloop.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: - - /experiment/abc_arc/robot_bc/abc_visual_hpt300_base + - /experiment/_shared/visual_hpt300 - override /model: abc_arc/hpt_bimanual_visual - override /data: abc_arc/mecka_fold_clothes_40h_human_baseline - _self_ diff --git a/egomimic/hydra_configs/experiment/fold_and_stack_towels/arc_dur.yaml b/egomimic/hydra_configs/experiment/fold_and_stack_towels/arc_dur.yaml new file mode 100644 index 0000000000..2638383350 --- /dev/null +++ b/egomimic/hydra_configs/experiment/fold_and_stack_towels/arc_dur.yaml @@ -0,0 +1,8 @@ +# @package _global_ +defaults: + - /experiment/fold_and_stack_towels/arc_vel + - _self_ +name: fold_and_stack_towels_arc_dur +description: Frozen since0924plus74 towels HPT300, canonical log-duration ARC M200 D0.33 R100 +abc: + arc_clock_mode: duration diff --git a/egomimic/hydra_configs/experiment/fold_and_stack_towels/arc_vel.yaml b/egomimic/hydra_configs/experiment/fold_and_stack_towels/arc_vel.yaml new file mode 100644 index 0000000000..be1e2726e1 --- /dev/null +++ b/egomimic/hydra_configs/experiment/fold_and_stack_towels/arc_vel.yaml @@ -0,0 +1,7 @@ +# @package _global_ +defaults: + - /experiment/fold_and_stack_towels/baseline + - /experiment/_shared/frozen_yam_arc + - _self_ +name: fold_and_stack_towels_arc_vel +description: Frozen since0924plus74 towels HPT300, canonical velocity ARC M200 D0.33 R100 diff --git a/egomimic/hydra_configs/experiment/yam_arc_grid/towels_since0924plus74_time_hpt300.yaml b/egomimic/hydra_configs/experiment/fold_and_stack_towels/baseline.yaml similarity index 86% rename from egomimic/hydra_configs/experiment/yam_arc_grid/towels_since0924plus74_time_hpt300.yaml rename to egomimic/hydra_configs/experiment/fold_and_stack_towels/baseline.yaml index 0bc2dc48e8..509444e232 100644 --- a/egomimic/hydra_configs/experiment/yam_arc_grid/towels_since0924plus74_time_hpt300.yaml +++ b/egomimic/hydra_configs/experiment/fold_and_stack_towels/baseline.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: -- /experiment/yam_arc_grid/_base/towels_hpt300 +- /experiment/_shared/frozen_yam/towels_hpt300 - override /data: abc_arc/towels_since0924plus74_20261015 - override /model: e1/hpt300_flow_wrists_time - _self_ diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_rl2_towels_abcdit_baseline_visual_openloop.yaml b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_rl2_towels_abcdit_baseline_visual_openloop.yaml similarity index 93% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_rl2_towels_abcdit_baseline_visual_openloop.yaml rename to egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_rl2_towels_abcdit_baseline_visual_openloop.yaml index b8f60918bf..55d926ca44 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_rl2_towels_abcdit_baseline_visual_openloop.yaml +++ b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_rl2_towels_abcdit_baseline_visual_openloop.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: - - /experiment/abc_arc/robot_bc/abc_multitask4_abcdit_baseline_visual_openloop + - /experiment/multitask/variants/abc_multitask4_abcdit_baseline_visual_openloop - _self_ name: abc_rl2_towels_abcdit_baseline_visual_openloop description: ABC-DiT XL ABC + RL2 towel folding baseline 100-frame chunks diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_logclock_visual_openloop.yaml b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_logclock_visual_openloop.yaml similarity index 87% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_logclock_visual_openloop.yaml rename to egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_logclock_visual_openloop.yaml index 29419239c6..a45f1f9e7b 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_logclock_visual_openloop.yaml +++ b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_logclock_visual_openloop.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: -- /experiment/abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_visual_openloop +- /experiment/fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_visual_openloop - _self_ name: abc_rl2_towels_abcdit_multistream_logclock_visual_openloop description: ABC-DiT XL ABC + RL2 towels multistream ARC D0.714 R2.10 M100, log-seconds duration clocks diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_visual_openloop.yaml b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_visual_openloop.yaml similarity index 86% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_visual_openloop.yaml rename to egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_visual_openloop.yaml index dcaa17d148..1568e92407 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_visual_openloop.yaml +++ b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_visual_openloop.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: - - /experiment/abc_arc/robot_bc/abc_rl2_towels_abcdit_baseline_visual_openloop + - /experiment/fold_and_stack_towels/variants/abc_rl2_towels_abcdit_baseline_visual_openloop - _self_ name: abc_rl2_towels_abcdit_multistream_visual_openloop description: ABC-DiT XL ABC + RL2 towels multistream ARC D0.714 R2.10 M100 diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_rl2_towels_hpt180_multistream_visual_openloop.yaml b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_rl2_towels_hpt180_multistream_visual_openloop.yaml similarity index 91% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_rl2_towels_hpt180_multistream_visual_openloop.yaml rename to egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_rl2_towels_hpt180_multistream_visual_openloop.yaml index c2a7b2880a..5bf0f02e8b 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_rl2_towels_hpt180_multistream_visual_openloop.yaml +++ b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_rl2_towels_hpt180_multistream_visual_openloop.yaml @@ -4,7 +4,7 @@ # (182.5M: h640, t8, flow d384x10). Data, ARC tokens (D0.714 R2.10 M100), # source window, trainer and evaluator are inherited unchanged. defaults: - - /experiment/abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_visual_openloop + - /experiment/fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_visual_openloop - override /model: abc_arc/hpt_yam_visual - _self_ name: abc_rl2_towels_hpt180_multistream_visual_openloop diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_towels_hpt180_baseline_visual_openloop.yaml b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_towels_hpt180_baseline_visual_openloop.yaml similarity index 92% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_towels_hpt180_baseline_visual_openloop.yaml rename to egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_towels_hpt180_baseline_visual_openloop.yaml index 6b6757d660..a6f1eb4b69 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_towels_hpt180_baseline_visual_openloop.yaml +++ b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_towels_hpt180_baseline_visual_openloop.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: - - /experiment/abc_arc/robot_bc/abc_visual_hpt300_base + - /experiment/_shared/visual_hpt300 - _self_ name: abc_towels_hpt180_baseline_visual_openloop diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_towels_hpt180_hybrid_visual_openloop.yaml b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_towels_hpt180_hybrid_visual_openloop.yaml similarity index 89% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_towels_hpt180_hybrid_visual_openloop.yaml rename to egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_towels_hpt180_hybrid_visual_openloop.yaml index 176ba2e78d..a0a2a07717 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_towels_hpt180_hybrid_visual_openloop.yaml +++ b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/abc_towels_hpt180_hybrid_visual_openloop.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: - - /experiment/abc_arc/robot_bc/abc_towels_hpt180_baseline_visual_openloop + - /experiment/fold_and_stack_towels/variants/abc_towels_hpt180_baseline_visual_openloop - _self_ name: abc_towels_hpt180_hybrid_visual_openloop description: HPT180 ABC towels visual-only hybrid D40 M100 R24deg diff --git a/egomimic/hydra_configs/experiment/yam_arc_grid/towels_new290plus74_time_hpt300.yaml b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/new290plus74_baseline.yaml similarity index 85% rename from egomimic/hydra_configs/experiment/yam_arc_grid/towels_new290plus74_time_hpt300.yaml rename to egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/new290plus74_baseline.yaml index 8811f31454..42ac203985 100644 --- a/egomimic/hydra_configs/experiment/yam_arc_grid/towels_new290plus74_time_hpt300.yaml +++ b/egomimic/hydra_configs/experiment/fold_and_stack_towels/variants/new290plus74_baseline.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: -- /experiment/yam_arc_grid/_base/towels_hpt300 +- /experiment/_shared/frozen_yam/towels_hpt300 - override /data: abc_arc/towels_new290plus74_20261015 - override /model: e1/hpt300_flow_wrists_time - _self_ diff --git a/egomimic/hydra_configs/experiment/multitask/arc_dur.yaml b/egomimic/hydra_configs/experiment/multitask/arc_dur.yaml new file mode 100644 index 0000000000..63205e8a16 --- /dev/null +++ b/egomimic/hydra_configs/experiment/multitask/arc_dur.yaml @@ -0,0 +1,11 @@ +# @package _global_ +defaults: + - /experiment/multitask/arc_vel + - _self_ +name: multitask_arc_dur +description: HPT300 ABC four-task first-delay log-duration ARC +abc: + arc_clock_mode: duration +logger: + wandb: + tags: [hpt300m, abc, multitask4, visual_only, duration, open_loop, video] diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_multitask4_hpt300_hybrid_visual_openloop.yaml b/egomimic/hydra_configs/experiment/multitask/arc_vel.yaml similarity index 90% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_multitask4_hpt300_hybrid_visual_openloop.yaml rename to egomimic/hydra_configs/experiment/multitask/arc_vel.yaml index bee5d67491..8abb45a303 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_multitask4_hpt300_hybrid_visual_openloop.yaml +++ b/egomimic/hydra_configs/experiment/multitask/arc_vel.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: - - /experiment/abc_arc/robot_bc/abc_multitask4_hpt300_baseline_visual_openloop + - /experiment/multitask/baseline - _self_ name: abc_multitask4_hpt300_hybrid_visual_openloop description: HPT300M ABC four-task visual-only hybrid ARC D81 M100 R24deg diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_multitask4_hpt300_baseline_visual_openloop.yaml b/egomimic/hydra_configs/experiment/multitask/baseline.yaml similarity index 91% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_multitask4_hpt300_baseline_visual_openloop.yaml rename to egomimic/hydra_configs/experiment/multitask/baseline.yaml index d02b7fffd9..a393e45738 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_multitask4_hpt300_baseline_visual_openloop.yaml +++ b/egomimic/hydra_configs/experiment/multitask/baseline.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: - - /experiment/abc_arc/robot_bc/abc_visual_hpt300_base + - /experiment/_shared/visual_hpt300 - _self_ name: abc_multitask4_hpt300_baseline_visual_openloop description: HPT300M ABC four-task visual-only baseline 100-frame chunks diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_multitask4_abcdit_baseline_visual_openloop.yaml b/egomimic/hydra_configs/experiment/multitask/variants/abc_multitask4_abcdit_baseline_visual_openloop.yaml similarity index 91% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_multitask4_abcdit_baseline_visual_openloop.yaml rename to egomimic/hydra_configs/experiment/multitask/variants/abc_multitask4_abcdit_baseline_visual_openloop.yaml index f353201329..4525712803 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_multitask4_abcdit_baseline_visual_openloop.yaml +++ b/egomimic/hydra_configs/experiment/multitask/variants/abc_multitask4_abcdit_baseline_visual_openloop.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: - - /experiment/abc_arc/robot_bc/abc_multitask4_hpt300_baseline_visual_openloop + - /experiment/multitask/baseline - override /model: abc_arc/abc_dit_yam_visual - _self_ name: abc_multitask4_abcdit_baseline_visual_openloop diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_multitask4_abcdit_hybrid_visual_openloop.yaml b/egomimic/hydra_configs/experiment/multitask/variants/abc_multitask4_abcdit_hybrid_visual_openloop.yaml similarity index 88% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_multitask4_abcdit_hybrid_visual_openloop.yaml rename to egomimic/hydra_configs/experiment/multitask/variants/abc_multitask4_abcdit_hybrid_visual_openloop.yaml index 673a8dd848..bf266a8491 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/abc_multitask4_abcdit_hybrid_visual_openloop.yaml +++ b/egomimic/hydra_configs/experiment/multitask/variants/abc_multitask4_abcdit_hybrid_visual_openloop.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: - - /experiment/abc_arc/robot_bc/abc_multitask4_abcdit_baseline_visual_openloop + - /experiment/multitask/variants/abc_multitask4_abcdit_baseline_visual_openloop - _self_ name: abc_multitask4_abcdit_hybrid_visual_openloop description: ABC-DiT XL four-task hybrid ARC D81 M100 R24deg diff --git a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream.yaml b/egomimic/hydra_configs/experiment/organize_stationary/_base/arc.yaml similarity index 81% rename from egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream.yaml rename to egomimic/hydra_configs/experiment/organize_stationary/_base/arc.yaml index b3af964105..ce9e6e8229 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream.yaml +++ b/egomimic/hydra_configs/experiment/organize_stationary/_base/arc.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: -- /experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_baseline +- /experiment/organize_stationary/baseline - _self_ name: organize_rl2_elmo_hpt300_cotrain_multistream description: HPT300 ResNet-MLP cotraining, multistream ARC D0.42 R24deg M100 duration clocks @@ -12,7 +12,6 @@ abc: arc_gripper_distance: null arc_gripper_stream_mode: events arc_streams: full_separation - arc_token_dim: 20 trainer: limit_val_batches: 1.0 hpt: @@ -37,11 +36,6 @@ data: gripper_stream_mode: ${abc.arc_gripper_stream_mode} transform_list: gripper_stream_mode: ${abc.arc_gripper_stream_mode} -run_provenance: - action_contract: - timing_contract: six_clock_waypoint_rates_v2 - gripper_stream_mode: ${abc.arc_gripper_stream_mode} - gripper_reference_commit: 9c36037a5da54d5a84cd753fe57353be91e436a8 logger: wandb: tags: @@ -56,6 +50,7 @@ logger: - D042 - R24deg - M100 - - duration_clock + - ${abc.arc_clock_mode} + - ${abc.arc_streams} - open_loop - video diff --git a/egomimic/hydra_configs/experiment/organize_stationary/arc_dur.yaml b/egomimic/hydra_configs/experiment/organize_stationary/arc_dur.yaml new file mode 100644 index 0000000000..c3024be250 --- /dev/null +++ b/egomimic/hydra_configs/experiment/organize_stationary/arc_dur.yaml @@ -0,0 +1,8 @@ +# @package _global_ +defaults: + - /experiment/organize_stationary/arc_vel + - _self_ +name: organize_stationary_arc_dur +description: HPT300 robot + human organize stationery, first-delay log-duration +abc: + arc_clock_mode: duration diff --git a/egomimic/hydra_configs/experiment/organize_stationary/arc_vel.yaml b/egomimic/hydra_configs/experiment/organize_stationary/arc_vel.yaml new file mode 100644 index 0000000000..a079e8ad6a --- /dev/null +++ b/egomimic/hydra_configs/experiment/organize_stationary/arc_vel.yaml @@ -0,0 +1,8 @@ +# @package _global_ +defaults: + - /experiment/organize_stationary/_base/arc + - _self_ +name: organize_stationary_arc_vel +description: HPT300 robot + human organize stationery, first-delay ARC velocity +abc: + arc_clock_mode: velocity diff --git a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_baseline.yaml b/egomimic/hydra_configs/experiment/organize_stationary/baseline.yaml similarity index 91% rename from egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_baseline.yaml rename to egomimic/hydra_configs/experiment/organize_stationary/baseline.yaml index 07df811001..1e9a5a9a58 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_baseline.yaml +++ b/egomimic/hydra_configs/experiment/organize_stationary/baseline.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: -- /experiment/abc_arc/robot_bc/abc_visual_hpt300_base +- /experiment/_shared/visual_hpt300 - override /model: abc_arc/hpt_bimanual_visual - override /data: abc_arc/organize_rl2_elmo_cotrain - _self_ @@ -16,7 +16,6 @@ abc: arc_rotation_distance: 0.4188790204786391 arc_clock_mode: duration arc_streams: translation_rotation - arc_token_dim: 18 arc_source_buffer_frames: 200 evaluator: limit_val_episodes: null diff --git a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt180_cotrain_baseline.yaml b/egomimic/hydra_configs/experiment/organize_stationary/variants/organize_rl2_elmo_hpt180_cotrain_baseline.yaml similarity index 91% rename from egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt180_cotrain_baseline.yaml rename to egomimic/hydra_configs/experiment/organize_stationary/variants/organize_rl2_elmo_hpt180_cotrain_baseline.yaml index 72e33f0520..b521ec18b3 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt180_cotrain_baseline.yaml +++ b/egomimic/hydra_configs/experiment/organize_stationary/variants/organize_rl2_elmo_hpt180_cotrain_baseline.yaml @@ -3,7 +3,7 @@ # tempo grid (yam_arc_grid/scratch_rl2_stattempo_*: h640 t8, flow d384x10), # keeping the ResNet-MLP image stems. 182.5M parameters. defaults: - - /experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_baseline + - /experiment/organize_stationary/baseline - _self_ name: organize_rl2_elmo_hpt180_cotrain_baseline description: HPT180 ResNet-MLP stems, robot + human cotraining, 100-frame chunks diff --git a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt180_cotrain_multistream.yaml b/egomimic/hydra_configs/experiment/organize_stationary/variants/organize_rl2_elmo_hpt180_cotrain_multistream.yaml similarity index 89% rename from egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt180_cotrain_multistream.yaml rename to egomimic/hydra_configs/experiment/organize_stationary/variants/organize_rl2_elmo_hpt180_cotrain_multistream.yaml index b66ca7b004..784bfadda1 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/cotrain/organize_rl2_elmo_hpt180_cotrain_multistream.yaml +++ b/egomimic/hydra_configs/experiment/organize_stationary/variants/organize_rl2_elmo_hpt180_cotrain_multistream.yaml @@ -2,7 +2,7 @@ # Multistream ARC twin of organize_rl2_elmo_hpt180_cotrain_baseline: same # 182.5M model and 400-frame ARC read window. defaults: - - /experiment/abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_multistream + - /experiment/organize_stationary/_base/arc - _self_ name: organize_rl2_elmo_hpt180_cotrain_multistream description: HPT180 ResNet-MLP cotraining, multistream ARC D0.42 R24deg M100 duration clocks diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/stationery_rl2_hpt300_visual_baseline_openloop.yaml b/egomimic/hydra_configs/experiment/organize_stationary/variants/stationery_rl2_hpt300_visual_baseline_openloop.yaml similarity index 88% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/stationery_rl2_hpt300_visual_baseline_openloop.yaml rename to egomimic/hydra_configs/experiment/organize_stationary/variants/stationery_rl2_hpt300_visual_baseline_openloop.yaml index fead0f25b7..2c0272a66c 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/stationery_rl2_hpt300_visual_baseline_openloop.yaml +++ b/egomimic/hydra_configs/experiment/organize_stationary/variants/stationery_rl2_hpt300_visual_baseline_openloop.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: - - /experiment/abc_arc/robot_bc/abc_visual_hpt300_base + - /experiment/_shared/visual_hpt300 - override /data: abc_arc/stationery_rl2_hpt_baseline - _self_ name: stationery_rl2_hpt300_visual_baseline_openloop diff --git a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/stationery_rl2_hpt300_visual_hybrid_openloop.yaml b/egomimic/hydra_configs/experiment/organize_stationary/variants/stationery_rl2_hpt300_visual_hybrid_openloop.yaml similarity index 87% rename from egomimic/hydra_configs/experiment/abc_arc/robot_bc/stationery_rl2_hpt300_visual_hybrid_openloop.yaml rename to egomimic/hydra_configs/experiment/organize_stationary/variants/stationery_rl2_hpt300_visual_hybrid_openloop.yaml index e67453a6d5..a73524b8dc 100644 --- a/egomimic/hydra_configs/experiment/abc_arc/robot_bc/stationery_rl2_hpt300_visual_hybrid_openloop.yaml +++ b/egomimic/hydra_configs/experiment/organize_stationary/variants/stationery_rl2_hpt300_visual_hybrid_openloop.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: - - /experiment/abc_arc/robot_bc/stationery_rl2_hpt300_visual_baseline_openloop + - /experiment/organize_stationary/variants/stationery_rl2_hpt300_visual_baseline_openloop - override /data: abc_arc/stationery_rl2_hpt_arc_hybrid_D40_M100_R24deg - _self_ name: stationery_rl2_hpt300_visual_hybrid_openloop diff --git a/egomimic/hydra_configs/experiment/wireless_earbuds/arc_dur.yaml b/egomimic/hydra_configs/experiment/wireless_earbuds/arc_dur.yaml new file mode 100644 index 0000000000..1e90e4f47d --- /dev/null +++ b/egomimic/hydra_configs/experiment/wireless_earbuds/arc_dur.yaml @@ -0,0 +1,8 @@ +# @package _global_ +defaults: + - /experiment/wireless_earbuds/arc_vel + - _self_ +name: wireless_earbuds_arc_dur +description: Frozen earbuds HPT300, canonical log-duration ARC M200 D0.33 R100 +abc: + arc_clock_mode: duration diff --git a/egomimic/hydra_configs/experiment/wireless_earbuds/arc_vel.yaml b/egomimic/hydra_configs/experiment/wireless_earbuds/arc_vel.yaml new file mode 100644 index 0000000000..0c82f9d488 --- /dev/null +++ b/egomimic/hydra_configs/experiment/wireless_earbuds/arc_vel.yaml @@ -0,0 +1,7 @@ +# @package _global_ +defaults: + - /experiment/wireless_earbuds/baseline + - /experiment/_shared/frozen_yam_arc + - _self_ +name: wireless_earbuds_arc_vel +description: Frozen earbuds HPT300, canonical velocity ARC M200 D0.33 R100 diff --git a/egomimic/hydra_configs/experiment/yam_arc_grid/earbuds_updated_time_hpt300.yaml b/egomimic/hydra_configs/experiment/wireless_earbuds/baseline.yaml similarity index 73% rename from egomimic/hydra_configs/experiment/yam_arc_grid/earbuds_updated_time_hpt300.yaml rename to egomimic/hydra_configs/experiment/wireless_earbuds/baseline.yaml index 4a44001a3e..71715469ba 100644 --- a/egomimic/hydra_configs/experiment/yam_arc_grid/earbuds_updated_time_hpt300.yaml +++ b/egomimic/hydra_configs/experiment/wireless_earbuds/baseline.yaml @@ -1,6 +1,6 @@ # @package _global_ defaults: -- /experiment/yam_arc_grid/_base/earbuds_updated_hpt300 +- /experiment/_shared/frozen_yam/earbuds_updated_hpt300 - override /model: e1/hpt300_flow_wrists_time - _self_ e1: diff --git a/egomimic/hydra_configs/experiment/yam_arc_grid/_base/m200_d033.yaml b/egomimic/hydra_configs/experiment/yam_arc_grid/_base/m200_d033.yaml deleted file mode 100644 index 86b100b52e..0000000000 --- a/egomimic/hydra_configs/experiment/yam_arc_grid/_base/m200_d033.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# @package _global_ -e1: - M: 200 - D: 0.33 - action_horizon: ${e1.M} -hpt: - action_horizon: ${e1.M} -arc_tokenizer: - resampled_vector_length: ${e1.M} - min_distance_unit: ${e1.D} -model: - action_horizon: ${e1.M} - graph: - noising: - action_horizon: ${e1.M} - sampler: - action_horizon: ${e1.M} - model: - act_seq: ${e1.M} -data: - train_datasets: - yam_bimanual: - resolver: - transform_list: - resampled_vector_length: ${e1.M} - min_distance_unit: ${e1.D} - valid_datasets: - yam_bimanual: - resolver: - transform_list: - resampled_vector_length: ${e1.M} - min_distance_unit: ${e1.D} -evaluator: - resampled_vector_length: ${e1.M} - min_distance_unit: ${e1.D} - tick_prefix: true diff --git a/egomimic/hydra_configs/experiment/yam_arc_grid/_base/m200_d033_hpt300.yaml b/egomimic/hydra_configs/experiment/yam_arc_grid/_base/m200_d033_hpt300.yaml deleted file mode 100644 index c00cb6cbd6..0000000000 --- a/egomimic/hydra_configs/experiment/yam_arc_grid/_base/m200_d033_hpt300.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# @package _global_ -e1: - M: 200 - D: 0.33 - action_horizon: ${e1.M} -hpt: - action_horizon: ${e1.M} -arc_tokenizer: - resampled_vector_length: ${e1.M} - min_distance_unit: ${e1.D} -model: - action_horizon: ${e1.M} - graph: - noising: - action_horizon: ${e1.M} - sampler: - action_horizon: ${e1.M} - model: - act_seq: ${e1.M} -data: - train_datasets: - yam_bimanual: - resolver: - transform_list: - resampled_vector_length: ${e1.M} - min_distance_unit: ${e1.D} - valid_datasets: - yam_bimanual: - resolver: - transform_list: - resampled_vector_length: ${e1.M} - min_distance_unit: ${e1.D} diff --git a/scripts/audit_hydra_configs.py b/scripts/audit_hydra_configs.py index 5892386dca..7c64671cf8 100644 --- a/scripts/audit_hydra_configs.py +++ b/scripts/audit_hydra_configs.py @@ -19,6 +19,8 @@ CONFIGS = ROOT / "egomimic/hydra_configs" EXPERIMENT_CONTEXTS = { + "experiment/_shared/clock_settings": "multitask/arc_vel", + "experiment/_shared/frozen_yam_arc": "wireless_earbuds/arc_vel", "data/ravens/continuous": "ravens/action_flow", "evaluator/ravens": "ravens/action_flow", "data/e1/yam_human_keypoints_multiplier_proportional_val01": "e1/yam_human_matched_af64_multiplier", @@ -31,17 +33,17 @@ "model/e1/hpt_flow_wrists": "e1/abcs_time", "model/abc/yam_bimanual_dp": "abc/yam_fstshirt_dp", "model/abc/yam_bimanual_hpt": "abc/yam_fstshirt_hpt", - "model_contract/abc_visual": "abc_arc/robot_bc/stationery_rl2_hpt300_visual_baseline_openloop", - "model/abc_arc/hpt_yam_visual": "abc_arc/robot_bc/stationery_rl2_hpt300_visual_baseline_openloop", - "model/abc_arc/hpt_bimanual_visual": "abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_baseline", - "model/abc_arc/abc_dit_yam_visual": "abc_arc/robot_bc/abc_multitask4_abcdit_baseline_visual_openloop", - "data/abc_arc/abc_visual": "abc_arc/robot_bc/abc_towels_hpt180_baseline_visual_openloop", - "data/abc_arc/stationery_rl2_hpt_baseline": "abc_arc/robot_bc/stationery_rl2_hpt300_visual_baseline_openloop", - "data/abc_arc/stationery_rl2_hpt_arc_hybrid_D40_M100_R24deg": "abc_arc/robot_bc/stationery_rl2_hpt300_visual_hybrid_openloop", + "model_contract/abc_visual": "organize_stationary/variants/stationery_rl2_hpt300_visual_baseline_openloop", + "model/abc_arc/hpt_yam_visual": "organize_stationary/variants/stationery_rl2_hpt300_visual_baseline_openloop", + "model/abc_arc/hpt_bimanual_visual": "organize_stationary/baseline", + "model/abc_arc/abc_dit_yam_visual": "multitask/variants/abc_multitask4_abcdit_baseline_visual_openloop", + "data/abc_arc/abc_visual": "fold_and_stack_towels/variants/abc_towels_hpt180_baseline_visual_openloop", + "data/abc_arc/stationery_rl2_hpt_baseline": "organize_stationary/variants/stationery_rl2_hpt300_visual_baseline_openloop", + "data/abc_arc/stationery_rl2_hpt_arc_hybrid_D40_M100_R24deg": "organize_stationary/variants/stationery_rl2_hpt300_visual_hybrid_openloop", "data/abc_arc/mecka_fold_clothes_40h_human_baseline": "abc_arc/human_bc/mecka_fold_clothes_40h_human_visual_baseline_openloop", "data/abc_arc/mecka_fold_clothes_40h_human_hybrid_D40_M100_R24deg": "abc_arc/human_bc/mecka_fold_clothes_40h_human_visual_hybrid_openloop", - "data/abc_arc/organize_rl2_elmo_cotrain": "abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_baseline", - "experiment/abc_arc/robot_bc/abc_visual_hpt300_base": "abc_arc/robot_bc/abc_towels_hpt180_baseline_visual_openloop", + "data/abc_arc/organize_rl2_elmo_cotrain": "organize_stationary/baseline", + "experiment/_shared/visual_hpt300": "fold_and_stack_towels/variants/abc_towels_hpt180_baseline_visual_openloop", "model/bf/bf_planar_v2_arc_graph_tok": "pusht/planar_v2_usocket_arc_graph_tok", "model/bf/us_action_flow_latent_fm_sg_unite_h384": "pusht/parents/action_flow_usocket_h384", "data/e1/yam_stationary_action_flow_val01": "e1/yam_stationary_action_flow_h816_s42", @@ -164,13 +166,10 @@ def audit_context(path): } or name.startswith("data/abc_arc/stationery_") ): - experiment = "yam_arc_grid/earbuds_updated_time_hpt300" + experiment = "wireless_earbuds/baseline" if name.startswith(("data/abc_arc/towels_", "data/abc_arc/earbuds_")): # Frozen YAM pools select their codec through the HPT300 recipe's e1.*. - experiment = "yam_arc_grid/towels_since0924plus74_time_hpt300" - if "arc_projection" in name and group in {"model", "data"}: - variant = "vel" if name.endswith("_vel") else "dur" - experiment = f"yam_arc_grid/bc_rl2_stattempo_slowpace366_arc_projection_{variant}_m200_d033" + experiment = "fold_and_stack_towels/baseline" experiment = EXPERIMENT_CONTEXTS.get(name, experiment) overrides = [] if experiment is None else [f"+experiment={experiment}"] config_name = name if not entry else "train_zarr_cartesian" diff --git a/tests/test_abc_arc_experiment_layout.py b/tests/test_abc_arc_experiment_layout.py index acc51a7d8b..9766c6c012 100644 --- a/tests/test_abc_arc_experiment_layout.py +++ b/tests/test_abc_arc_experiment_layout.py @@ -1,75 +1,127 @@ +"""Task-first recipes share one clock contract without changing frozen pools.""" + +import json from pathlib import Path import pytest -from hydra import compose, initialize_config_dir +from hydra.utils import instantiate +from omegaconf import OmegaConf -ROOT = Path(__file__).resolve().parents[1] -EXPERIMENT_ROOT = ROOT / "egomimic/hydra_configs/experiment/abc_arc" +from egomimic.pipeline.inference_config import build_inference_config +from egomimic.rldb.zarr.arc_length_tokenizer import TokenizeBimanualArcLengthCartesian +from scripts.audit_hydra_configs import CONFIGS, compose_for_audit -EXPECTED_YAMLS = { - "robot_bc": { - "abc_visual_hpt300_base.yaml", - "abc_multitask4_hpt300_baseline_visual_openloop.yaml", - "abc_multitask4_hpt300_hybrid_visual_openloop.yaml", - "abc_towels_hpt180_baseline_visual_openloop.yaml", - "abc_towels_hpt180_hybrid_visual_openloop.yaml", - "stationery_rl2_hpt300_visual_baseline_openloop.yaml", - "stationery_rl2_hpt300_visual_hybrid_openloop.yaml", - }, - "human_bc": { - "mecka_fold_clothes_40h_human_visual_baseline_openloop.yaml", - "mecka_fold_clothes_40h_human_visual_hybrid_openloop.yaml", - }, - "cotrain": set(), -} +ROOT = Path(__file__).resolve().parents[1] +TASKS = ( + "organize_stationary", + "fold_and_stack_towels", + "wireless_earbuds", + "multitask", +) -def test_abc_arc_experiments_are_grouped_by_training_population(): - assert not list(EXPERIMENT_ROOT.glob("*.yaml")) - assert {path.name for path in EXPERIMENT_ROOT.iterdir() if path.is_dir()} == set( - EXPECTED_YAMLS - ) +@pytest.mark.parametrize("task", TASKS) +def test_three_public_entries_per_task(task): + assert {p.name for p in (CONFIGS / "experiment" / task).glob("*.yaml")} == { + "arc_vel.yaml", + "arc_dur.yaml", + "baseline.yaml", + } - for folder, expected in EXPECTED_YAMLS.items(): - actual = {path.name for path in (EXPERIMENT_ROOT / folder).glob("*.yaml")} - assert actual == expected +@pytest.mark.parametrize("task", TASKS) +@pytest.mark.parametrize( + "clock,leaf", [("velocity", "arc_vel"), ("duration", "arc_dur")] +) +@pytest.mark.parametrize( + "streams,width", [("full_separation", 20), ("translation_rotation", 18)] +) +def test_task_clocks_match_data_eval_and_rollout(task, clock, leaf, streams, width): + with compose_for_audit(CONFIGS / f"experiment/{task}/{leaf}.yaml") as cfg: + cfg.abc.arc_streams = streams + assert cfg.abc.arc_token_dim == width + evaluator = instantiate(cfg.evaluator) + assert evaluator.clock_mode == clock + assert evaluator.streams == streams + flow_stages = [ + stage + for stage in cfg.model.pipeline.stages + if stage._target_.rsplit(".", 1)[-1] + in ("FlowNoisingStage", "FlowDenoiserStage") + ] + assert len(flow_stages) == 2 + for stage in flow_stages: + assert stage.action_dim == width + assert stage.action_horizon == cfg.abc.arc_waypoints + for split in ("train_datasets", "valid_datasets"): + for dataset in cfg.data[split].values(): + transforms = instantiate(dataset.resolver.transform_list) + codecs = [ + t + for t in transforms + if isinstance(t, TokenizeBimanualArcLengthCartesian) + ] + assert len(codecs) == 1 + codec = codecs[0] + assert codec.clock_mode == clock + assert codec.streams == streams + assert codec.shape == (cfg.abc.arc_waypoints, width) + assert evaluator._codec().shape == codec.shape + instantiate(dataset.resolver.key_map) + contract = build_inference_config(cfg) + assert contract["status"] == "ready" + profile = contract["inference_graph"]["profiles"]["default"] + assert profile["native_shape"] == [cfg.abc.arc_waypoints, width] + decoder = instantiate(profile["adapter"]["decoder"]) + assert decoder.codec.clock_mode == clock + assert decoder.codec.streams == streams + assert decoder.codec.shape == evaluator._codec().shape + assert cfg.run_provenance.action_contract.clock_mode == clock -def test_retained_experiments_are_visual_only_and_qwen_free(): - for path in EXPERIMENT_ROOT.rglob("*.yaml"): - text = path.read_text().lower() - assert "qwen" not in text, path +@pytest.mark.parametrize("task", TASKS) +def test_task_variants_preserve_identical_episode_selection(task): + selections = [] + for leaf in ("baseline", "arc_vel", "arc_dur"): + with compose_for_audit(CONFIGS / f"experiment/{task}/{leaf}.yaml") as cfg: + selections.append( + { + (split, name): { + key: OmegaConf.to_container(value, resolve=True) + if OmegaConf.is_config(value) + else value + for key, value in dataset.items() + if key in ("filters", "mode", "valid_ratio", "split_seed") + or key.startswith("expected_") + } + for split in ("train_datasets", "valid_datasets") + for name, dataset in cfg.data[split].items() + } + ) + assert selections[0] == selections[1] == selections[2] -def test_every_arc_recipe_has_a_matching_baseline_recipe(): - expected_pairs = { - "robot_bc/abc_multitask4_hpt300_hybrid_visual_openloop.yaml": "robot_bc/abc_multitask4_hpt300_baseline_visual_openloop.yaml", - "robot_bc/abc_towels_hpt180_hybrid_visual_openloop.yaml": "robot_bc/abc_towels_hpt180_baseline_visual_openloop.yaml", - "robot_bc/stationery_rl2_hpt300_visual_hybrid_openloop.yaml": "robot_bc/stationery_rl2_hpt300_visual_baseline_openloop.yaml", - "human_bc/mecka_fold_clothes_40h_human_visual_hybrid_openloop.yaml": "human_bc/mecka_fold_clothes_40h_human_visual_baseline_openloop.yaml", - } - for arc_path, baseline_path in expected_pairs.items(): - assert (EXPERIMENT_ROOT / arc_path).is_file() - assert (EXPERIMENT_ROOT / baseline_path).is_file() +@pytest.mark.parametrize("task", TASKS) +def test_baseline_remains_time_indexed_and_rollout_ready(task): + with compose_for_audit(CONFIGS / f"experiment/{task}/baseline.yaml") as cfg: + for split in ("train_datasets", "valid_datasets"): + for dataset in cfg.data[split].values(): + assert not any( + isinstance(t, TokenizeBimanualArcLengthCartesian) + for t in instantiate(dataset.resolver.transform_list) + ) + artifact = build_inference_config(cfg) + assert artifact["status"] == "ready" + assert artifact["inference_graph"]["profiles"]["default"]["native_shape"] == [ + 100, + 14, + ] -@pytest.mark.parametrize( - "data", - [ - "abc_visual", - "stationery_rl2_hpt_baseline", - "stationery_rl2_hpt_arc_hybrid_D40_M100_R24deg", - "mecka_fold_clothes_40h_human_baseline", - "mecka_fold_clothes_40h_human_hybrid_D40_M100_R24deg", - ], -) -def test_retained_data_components_do_not_request_language_inputs(data): - with initialize_config_dir( - version_base=None, config_dir=str(ROOT / "egomimic/hydra_configs") - ): - cfg = compose("train_zarr_cartesian", overrides=[f"data=abc_arc/{data}"]) - for split in ("train_datasets", "valid_datasets"): - for dataset in cfg.data[split].values(): - assert "annotations" not in dataset.batch_keys - assert dataset.resolver.key_map.get("annotation_key") is None +def test_migration_targets_exist_and_retired_folders_are_empty(): + mapping = json.loads((ROOT / "docs/experiment_config_migration.json").read_text()) + assert all( + (CONFIGS / f"experiment/{target}.yaml").is_file() for target in mapping.values() + ) + for folder in ("abc_arc/cotrain", "abc_arc/robot_bc", "yam_arc_grid"): + assert not list((CONFIGS / "experiment" / folder).rglob("*.yaml")) diff --git a/tests/test_abc_dit.py b/tests/test_abc_dit.py index e8d1a9a8b4..dff3883dc7 100644 --- a/tests/test_abc_dit.py +++ b/tests/test_abc_dit.py @@ -10,10 +10,14 @@ from egomimic.pipeline.stages_flow import FlowDenoiserStage _CONFIGS = Path(__file__).resolve().parents[1] / "egomimic/hydra_configs" -_BASELINE = "abc_arc/robot_bc/abc_multitask4_abcdit_baseline_visual_openloop" -_HYBRID = "abc_arc/robot_bc/abc_multitask4_abcdit_hybrid_visual_openloop" -_TOWEL_BASELINE = "abc_arc/robot_bc/abc_rl2_towels_abcdit_baseline_visual_openloop" -_TOWEL_ARC = "abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_visual_openloop" +_BASELINE = "multitask/variants/abc_multitask4_abcdit_baseline_visual_openloop" +_HYBRID = "multitask/variants/abc_multitask4_abcdit_hybrid_visual_openloop" +_TOWEL_BASELINE = ( + "fold_and_stack_towels/variants/abc_rl2_towels_abcdit_baseline_visual_openloop" +) +_TOWEL_ARC = ( + "fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_visual_openloop" +) # Keeps the DiT tiny; the ViT-B/16 backbone shape is fixed by the checkpoint. _TINY = [ "abc_dit.hidden_size=64", @@ -36,15 +40,19 @@ def _cfg(experiment, extra=()): "experiment, horizon, dim, representation", [ (_BASELINE, 100, 14, "cartesian"), - # M28: 100 waypoint rows, each with 14 pose + 14 velocity columns. - (_HYBRID, 100, 28, "hybrid_arc_tokenizer_cartesian"), + # Canonical six-stream ARC: 14 geometry columns + six clocks. + (_HYBRID, 100, 20, "hybrid_arc_tokenizer_cartesian"), (_TOWEL_BASELINE, 100, 14, "cartesian"), - (_TOWEL_ARC, 100, 28, "hybrid_arc_tokenizer_cartesian"), + (_TOWEL_ARC, 100, 20, "hybrid_arc_tokenizer_cartesian"), ], ) def test_recipes_compose_with_the_right_action_contract( - experiment, horizon, dim, representation + experiment, horizon, dim, representation, monkeypatch ): + monkeypatch.setenv( + "EGOVERSE_DINOV3_CHECKPOINT", "/tmp/dinov3_vitb16_pretrain_lvd1689m.pth" + ) + monkeypatch.setenv("EGOVERSE_CLIP_CHECKPOINT", "/tmp/clip-vit-base-patch32") cfg = _cfg(experiment) stages = cfg.model.pipeline.stages assert [s._target_.rsplit(".", 1)[1] for s in stages] == [ diff --git a/tests/test_abc_visual_hybrid_configs.py b/tests/test_abc_visual_hybrid_configs.py index 18d4136f2f..2ce40ff900 100644 --- a/tests/test_abc_visual_hybrid_configs.py +++ b/tests/test_abc_visual_hybrid_configs.py @@ -1,3 +1,4 @@ +import json import math from pathlib import Path @@ -36,7 +37,9 @@ def config(name): - overrides = [f"+experiment=abc_arc/{name}", "hydra/launcher=submitit_pace_h100"] + migration = json.loads((ROOT / "docs/experiment_config_migration.json").read_text()) + name = migration.get(f"abc_arc/{name}", f"abc_arc/{name}") + overrides = [f"+experiment={name}", "hydra/launcher=submitit_pace_h100"] with initialize_config_dir( version_base=None, config_dir=str(ROOT / "egomimic/hydra_configs") ): diff --git a/tests/test_arc_chunking_configs.py b/tests/test_arc_chunking_configs.py index 724430fd04..e635a69d09 100644 --- a/tests/test_arc_chunking_configs.py +++ b/tests/test_arc_chunking_configs.py @@ -137,7 +137,17 @@ def test_legacy_mode_omission_preserves_source_semantics(): ) -RECIPES = sorted((CONFIGS / "experiment/abc_arc").glob("*/*.yaml")) +RECIPES = sorted( + path + for folder in ( + "abc_arc", + "organize_stationary", + "fold_and_stack_towels", + "wireless_earbuds", + "multitask", + ) + for path in (CONFIGS / "experiment" / folder).rglob("*.yaml") +) @pytest.mark.parametrize("recipe", RECIPES, ids=lambda p: p.stem) diff --git a/tests/test_arc_clock_contract.py b/tests/test_arc_clock_contract.py index 006bf80c54..e012061fe2 100644 --- a/tests/test_arc_clock_contract.py +++ b/tests/test_arc_clock_contract.py @@ -214,10 +214,11 @@ def test_recipe_data_evaluator_and_declared_rollout_share_contract(clock, stream recipe = ( CONFIGS - / "experiment/abc_arc/cotrain" - / f"organize_clock_{clock}_{streams}.yaml" + / "experiment/organize_stationary" + / ("arc_vel.yaml" if clock == "velocity" else "arc_dur.yaml") ) with compose_for_audit(recipe) as cfg: + cfg.abc.arc_streams = streams transforms = instantiate( cfg.data.train_datasets.yam_bimanual.resolver.transform_list ) diff --git a/tests/test_cluster_agnostic_paths.py b/tests/test_cluster_agnostic_paths.py index b3af2076cd..0124722b35 100644 --- a/tests/test_cluster_agnostic_paths.py +++ b/tests/test_cluster_agnostic_paths.py @@ -16,7 +16,7 @@ def test_abc_dit_weights_follow_env(monkeypatch): cfg = compose( config_name="train_zarr_cartesian", overrides=[ - "+experiment=abc_arc/robot_bc/abc_rl2_towels_abcdit_multistream_visual_openloop", + "+experiment=fold_and_stack_towels/variants/abc_rl2_towels_abcdit_multistream_visual_openloop", "++paths.root_dir=.", ], ) diff --git a/tests/test_deployment_data_requirements.py b/tests/test_deployment_data_requirements.py index 4d22006d04..8bc3b06f3b 100644 --- a/tests/test_deployment_data_requirements.py +++ b/tests/test_deployment_data_requirements.py @@ -26,17 +26,17 @@ EXPERIMENTS = [ "abc/yam_fstshirt_dp", "abc/yam_fstshirt_hpt", - "abc_arc/robot_bc/stationery_rl2_hpt300_visual_baseline_openloop", - "abc_arc/robot_bc/abc_towels_hpt180_baseline_visual_openloop", - "abc_arc/cotrain/organize_rl2_elmo_hpt300_cotrain_baseline", + "organize_stationary/variants/stationery_rl2_hpt300_visual_baseline_openloop", + "fold_and_stack_towels/variants/abc_towels_hpt180_baseline_visual_openloop", + "organize_stationary/baseline", "e1/fold_time", - "e1/fold_arcvel", - "e1/fold_arcdur", - "e1/fold_arclogdur", + "organize_stationary/arc_vel", + "organize_stationary/arc_dur", + "fold_and_stack_towels/arc_dur", "e1/abc_time", - "e1/abc_arcdur", + "wireless_earbuds/arc_dur", "e1/abcs_time", - "e1/abcs_arclogdur", + "multitask/arc_dur", ] SOURCE_IDENTITIES = {"human_bimanual": "3", "eva_bimanual": "6", "yam_bimanual": "7"} diff --git a/tests/test_validate_checkpoint_sweep.py b/tests/test_validate_checkpoint_sweep.py index 52425bdb25..2f13c32115 100644 --- a/tests/test_validate_checkpoint_sweep.py +++ b/tests/test_validate_checkpoint_sweep.py @@ -80,7 +80,7 @@ def test_builds_arc_eval_command_with_checkpoint_step_and_shared_wandb_id(tmp_pa command = validation_command( python="python", - experiment="abc_arc/robot_bc/stationery_rl2_hpt300_visual_hybrid_openloop", + experiment="organize_stationary/variants/stationery_rl2_hpt300_visual_hybrid_openloop", checkpoint=checkpoint, output_dir=tmp_path / "results", action_mode="arc", @@ -95,7 +95,7 @@ def test_builds_arc_eval_command_with_checkpoint_step_and_shared_wandb_id(tmp_pa assert command[:3] == [ "python", "egomimic/trainHydra.py", - "+experiment=abc_arc/robot_bc/stationery_rl2_hpt300_visual_hybrid_openloop", + "+experiment=organize_stationary/variants/stationery_rl2_hpt300_visual_hybrid_openloop", ] assert "mode=eval" in command assert "eval_logger_enabled=true" in command @@ -121,7 +121,7 @@ def test_builds_baseline_eval_command_with_explicit_action_mode(tmp_path): command = validation_command( python="python", - experiment="abc_arc/robot_bc/stationery_rl2_hpt300_visual_baseline_openloop", + experiment="organize_stationary/variants/stationery_rl2_hpt300_visual_baseline_openloop", checkpoint=checkpoint, output_dir=tmp_path / "results", action_mode="baseline", @@ -137,7 +137,7 @@ def test_builds_baseline_eval_command_with_explicit_action_mode(tmp_path): assert "evaluator.execute_fraction=0.3" in command assert "trainer.limit_val_batches=1.0" in command assert ( - "+experiment=abc_arc/robot_bc/stationery_rl2_hpt300_visual_baseline_openloop" + "+experiment=organize_stationary/variants/stationery_rl2_hpt300_visual_baseline_openloop" in command ) @@ -151,7 +151,7 @@ def test_builds_video_only_command_without_metric_output(tmp_path): command = validation_command( python="python", - experiment="abc_arc/robot_bc/stationery_rl2_hpt300_visual_hybrid_openloop", + experiment="organize_stationary/variants/stationery_rl2_hpt300_visual_hybrid_openloop", checkpoint=checkpoint, output_dir=tmp_path / "output", action_mode="arc",