Quick Start
April 7, 2026 · View on GitHub
Behavior cloning and flow-matching based policy training for EgoVerse datasets.
All commands below assume you are inside the egomimic/ subfolder.
cd egomimic
Launch interactive training with default configs on an example episode of RL2 lab robot data.
python trainHydra.py --config-name=train_zarr_cartesian
This will:
- Filter episodes from SQL
- Download those episodes locally from cloudflare R2 (if not already present)
- Build the Zarr dataset
- Compute normalization statistics on the fly
- Start training using default configs
Configuration Overview
All Hydra configs live in:
hydra_configs/
Main subfolders:
hydra_configs/
├── train_zarr_cartesian.yaml # top-level training config
├── data/ # dataset configs
├── model/ # model instantiations
├── hydra/launcher/ # SLURM submitit configs
For most use cases, you only need to modify the data YAML.
Training Aria Behavior Cloning (Interactive)
1. Modify data config
Open:
hydra_configs/data/aria.yaml
Modify:
folder_path→ local dataset directory\batch_size\num_workers
Reference run: - batch_size = 32\
num_workers = 10\- Single L40S GPU\
- 150k steps
2. Launch training
/python trainHydra.py --config-name=train_zarr_cartesian data=aria model=hpt_bc_flow_aria
Training on SLURM (Cluster)
1. Configure SLURM launcher
Edit:
hydra_configs/hydra/launcher/submitit.yaml
Match this to your sbatch configuration: - partition\
- GPUs\
- memory\
- timeout\
- nodes
2. Submit job
python trainHydra.py --config-name=train_zarr_cartesian data=aria model=hpt_bc_flow_aria -m
The -m flag enables Hydra multirun mode and triggers the Submitit
SLURM launcher.
Aria + EVA Co-Training
1. Modify dataset config
Edit:
hydra_configs/data/eva_human_cotrain.yaml
Modify: - folder_path\
batch_size\num_workers
2. Launch
Interactive:
python trainHydra.py --config-name=train_zarr_cartesian data=eva_human_cotrain model=hpt_cotrain_flow_shared_head
SLURM:
python trainHydra.py --config-name=train_zarr_cartesian data=eva_human_cotrain model=hpt_cotrain_flow_shared_head -m
Data YAML Walkthrough
Main training config:
hydra_configs/train_zarr_cartesian.yaml
DataSchematic
DataSchematic:
- Maps post-transform dataset keys → batch keys expected by the model\
- Stores key shapes and normalization stats\
- Computes normalization dynamically during training
Dataset Structure
Each file in:
hydra_configs/data/
Contains:
train_datasets:
eva_bimanual:
_target_: egomimic.rldb.zarr.zarr_dataset_multi.MultiDataset._from_resolver
MultiDataset
Virtually merges multiple dataset units into a single dataset.
Resolver
resolver:
_target_: egomimic.rldb.zarr.zarr_dataset_multi.S3EpisodeResolver
Responsible for:
- Applying SQL filters\
- Finding matching dataset units\
- Instantiating Zarr datasets
Key Map
key_map:
_target_: egomimic.rldb.embodiment.eva.Eva.get_keymap
Maps:
raw dataset keys → pre-transform key names
Transform List
transform_list:
_target_: egomimic.rldb.embodiment.eva.Eva.get_transform_list
Defines:
- Frame transforms (e.g., base → camera frame)\
- Key renaming\
- Concatenation\
- Action chunking\
- Post-processing
Filters
filters:
episode_hash: "2025-12-26-18-07-46-296000"
Filters are applied against the S3 SQL table to construct the dataset.
The list of available filters is visible directly in the SQL table.
Mode
mode: total
Options: - train\
valid\percent\total
Controls how dataset units are sampled.
Mental Model of the Data Pipeline
- SQL Filters\
S3EpisodeResolverfinds matching units\- Units instantiated as Zarr datasets\
MultiDatasetmerges them\- Embodiment transforms applied\
DataSchematicmaps to model batch keys\- Normalization computed\
- Training begins
Overriding Configs Inline
Example:
python trainHydra.py --config-name=train_zarr_cartesian data=aria train.batch_size=64 train.num_workers=8
Norm Stats
By default in train_zarr_cartesian.yaml norm stats are computed over the whole dataset. Decrease norm_stat_fraction in train_zarr_cartesian.yaml when training on large datasets.
Tips
- Always verify
folder_pathexists and has enough disk space.\ - Large datasets will auto-download from S3 if not present locally.\
- For debugging small runs, filter by a single
episode_hash. You can also set logger=debug trainer=debug to run fewer epochs.
Sample Commands
Debugging
python egomimic/trainHydra.py \
--config-name=train_zarr_cartesian_pi \
trainer=debug \
logger=debug \
norm_stats.sample_frac=0.001
Training
python egomimic/trainHydra.py -m \
--config-name=train_zarr_cartesian_pi \
name="fold_clothes" \
description="test_run" \
launch_params.nodes=1 \
launch_params.gpus_per_node=4
Eval (using multirun.yaml from a previous training run)
python egomimic/trainHydra.py \
--config-path=../logs/test/test_2026-04-07_15-53-47/.hydra/ \
--config-name=config \
hydra.searchpath=[file://egomimic/hydra_configs] \
++mode=eval \
+evaluator=eval_video \
+norm_stats.precomputed_norm_path="logs/test/test_2026-04-07_15-53-47/norm_stats/norm_stats.json" \
++ckpt_path="'logs/test/test_2026-04-07_14-20-30/checkpoints/last.ckpt'"