| # Experiments |
|
|
| Experiments in DoVLA-CIL focus on whether same-state counterfactual interventions improve action |
| selection, effect prediction, language controllability, and robustness. |
|
|
| ## CausalStress |
|
|
| CausalStress generates controlled toy-backend groups across: |
|
|
| - `minimal_language_change` |
| - `wrong_target_distractor` |
| - `near_miss_boundary` |
| - `physics_shift_placeholder` |
| - `effect_query` |
| - `counterfactual_ranking` |
| - `similar_distractors` |
| - `spatial_relation_minimal_pairs` |
| - `negation_and_avoidance` |
| - `sequential_tasks` |
| - `irreversible_failure` |
| - `physics_perturbation_placeholders` |
|
|
| Harder families include red mug vs red cup, blue bowl vs blue plate, same category/different color, |
| same color/different category, left/right, inside/next-to, behind/front, negation, sequential |
| skills, out-of-workspace failures, low friction, heavy objects, and sticky drawers. |
|
|
| Metrics: |
|
|
| - `task_success_rate` |
| - `instruction_switch_accuracy` |
| - `pairwise_ranking_accuracy` |
| - `top1_action_selection` |
| - `ndcg_at_k` |
| - `effect_prediction_mae` |
| - `success_prediction_accuracy` |
| - `regret_calibration_error` |
| - per-category success, instruction switch, and failure rate |
| - target-selection confusion matrices |
|
|
| Run: |
|
|
| ```bash |
| python scripts/eval_causalstress.py \ |
| --checkpoint runs/dovla_toy/best.pt \ |
| --backend toy \ |
| --out runs/dovla_toy/causalstress.json \ |
| --num-tasks 20 \ |
| --k 16 |
| ``` |
|
|
| ## Scaling Over K |
|
|
| Scaling experiments keep total record budget fixed as `B = N * K`. For each `K`, the runner chooses |
| `N = total_records // K`, generates a toy CIL dataset, trains DoVLA, evaluates CausalStress, writes |
| per-run metrics, aggregates CSVs, creates plots, and fits: |
|
|
| ```text |
| score = alpha + beta_log_k * log(K) |
| ``` |
|
|
| Run: |
|
|
| ```bash |
| python scripts/run_scaling.py \ |
| --backend toy \ |
| --tasks builtins \ |
| --out runs/scaling_toy \ |
| --total-records 4096 \ |
| --k-values 1,2,4,8,16,32 \ |
| --epochs 3 \ |
| --seed 0 |
| ``` |
|
|
| ## Baselines |
|
|
| ```bash |
| python scripts/run_baseline.py \ |
| --baseline expert_only_bc \ |
| --dataset data/cil_toy \ |
| --out runs/baselines/expert_only_bc |
| ``` |
|
|
| Modes: |
|
|
| - `expert_only_bc`: one best/expert action per group; no ranking/regret. |
| - `more_independent_demos`: K=1-style independent demonstration comparison. |
| - `random_negatives`: structured candidates replaced by random-negative labels. |
| - `cross_state_negatives`: matched-budget reward-ordered pairs from different states of the same |
| task; this tests whether exact same-state cancellation matters. |
| - `label_only_counterfactual`: heuristic labels without measured outcomes. |
| - `world_model_auxiliary`: effect/progress/success auxiliary losses without ranking/regret. |
| - `no_effect_head`: effect loss removed. |
| - `no_rank_regret`: ranking and regret removed. |
|
|
| ## Reports |
|
|
| Dataset report: |
|
|
| ```bash |
| python scripts/report_dataset.py --dataset data/cil_toy --out reports/cil_toy |
| ``` |
|
|
| Evaluation report: |
|
|
| ```bash |
| python scripts/report_eval.py \ |
| --inputs "runs/scaling_toy/*/metrics.json" \ |
| --out reports/scaling_toy |
| ``` |
|
|
| Paper artifacts: |
|
|
| ```bash |
| python scripts/make_paper_artifacts.py --runs runs --out paper_artifacts |
| ``` |
|
|
| The paper artifact script writes scaling, baseline, ablation, and per-category tables, plus figures |
| for performance vs K, same-state vs cross-state ranking, physical-outcome vs label-only, success by |
| failure category, and regret calibration. |
|
|
| ## Optional TransferCritic Studies |
|
|
| TransferCritic is a secondary data-curation module for selecting CIL records or groups under a |
| budget. It compares random, top-reward, task-balanced, and set-conditioned utility selections. See |
| `docs/transfercritic.md`. |
|
|
| ## Optional Retrieval Studies |
|
|
| Critic-gated retrieval is an inference-time extension for retrieving successful, near-miss, and |
| partial-success CIL exemplars. It compares no retrieval, nearest-neighbor, success-only, |
| success/failure contrastive, and critic-gated retrieval. See `docs/retrieval.md`. |
|
|
| ## Configs |
|
|
| Reproducible YAML configs live under: |
|
|
| - `configs/toy/` |
| - `configs/baselines/` |
| - `configs/large/` |
|
|
| The loader supports environment expansion, CLI overrides, and saving resolved configs into run |
| directories. |
|
|
| ## Large-Scale Manifests |
|
|
| Large multi-stage experiment manifests live under `manifests/`: |
|
|
| - `cil_160m.yaml` |
| - `cil_1b_template.yaml` |
| - `scaling_k_sweep.yaml` |
| - `baselines_full.yaml` |
|
|
| Plan a manifest without executing jobs: |
|
|
| ```bash |
| python scripts/run_manifest.py manifests/scaling_k_sweep.yaml --dry-run |
| ``` |
|
|
| Emit generic Slurm scripts and save a resolved manifest: |
|
|
| ```bash |
| python scripts/run_manifest.py \ |
| manifests/cil_160m.yaml \ |
| --dry-run \ |
| --emit-slurm \ |
| --out runs/cil_160m_plan |
| ``` |
|
|
| The manifest runner redacts secret-looking fields and never emits API keys into planned commands. |
| Manifests are validated before any files are written: positive record counts, training duration, |
| loss weights, and unique positive K values are checked locally. Slurm resources use the optional |
| `scheduler` manifest section and may be overridden while emitting scripts with |
| `DOVLA_PARTITION`, `DOVLA_ACCOUNT`, `DOVLA_CPUS_PER_TASK`, `DOVLA_GPUS_PER_TASK`, |
| `DOVLA_MEM`, `DOVLA_TIME`, and `DOVLA_LOG_DIR`. These values are resolved into literal |
| `#SBATCH` directives because Slurm does not expand shell expressions in directive lines. |
|
|
| Backend planning is explicit. Toy manifests call `generate_cil.py` and may be run with |
| `--execute-local`. ManiSkill manifests call `generate_maniskill_lattice.py`, multiply |
| `num_tasks * num_states_per_task` into the physical state-group count, and require |
| `simulator_params.demo_path` (normally supplied through `MANISKILL_DEMO_PATH`). Genesis remains |
| a visible placeholder until a task-specific measured-intervention adapter exists. Training loss |
| weights are forwarded as repeated `--loss-weight NAME=VALUE` arguments and are saved again in the |
| trainer's resolved config. |
|
|