m1b's picture
Upload train_args.json with huggingface_hub
f08119f verified
Raw
History Blame Contribute Delete
11.2 kB
{
"dataset": "data/rmbench_lerobot_full/battery_try",
"checkpoint_dir": "training/models/Wan2.2-TI2V-5B",
"action_dit_pretrained_path": "none",
"prompt_cache": null,
"output_dir": "training/experiments/rmbench_kairos_wam_v15_gist4_gated_r4_pointwise_full_kv_d640_battery_try_nextstate_1x8_50k_run1/outputs",
"resume": "none",
"required_cameras": "mosaic",
"device": "cuda",
"dtype": "bfloat16",
"mixed_precision": "bf16",
"batch_size": 1,
"gradient_accumulation_steps": 1,
"num_workers": 4,
"learning_rate": 0.0002,
"weight_decay": 0.01,
"beta1": 0.9,
"beta2": 0.95,
"optimizer_fused": false,
"optimizer_foreach": "auto",
"max_grad_norm": 1.0,
"num_epochs": 1000,
"max_steps": 50000,
"warmup_ratio": 0.05,
"log_every": 10,
"save_every": 1000,
"keep_last": 10,
"skip_final_checkpoint": false,
"skip_trainer_state_checkpoint": false,
"profile_timings": false,
"profile_microbatches": false,
"profile_all_ranks": false,
"profile_warmup_steps": 3,
"profile_log_every": 1,
"torch_profile_dir": null,
"torch_profile_wait": 1,
"torch_profile_warmup": 1,
"torch_profile_active": 3,
"torch_profile_repeat": 1,
"torch_profile_record_shapes": false,
"torch_profile_memory": false,
"torch_profile_with_stack": false,
"seed": 42,
"tokenizer_max_len": 128,
"keep_text_encoder_loaded": false,
"image_size": "160,192",
"disable_mot_checkpoint_mixed_attn": false,
"noise_beta_alpha": 0.0,
"noise_beta_beta": 1.0,
"proprio_mode": "native",
"action_space": "aloha_agilex_absolute",
"model_variant": "wam",
"video_backbone": "kairos",
"kairos_video_pretrained": "training/kairos/step-4500.safetensors",
"kairos_action_pretrained": "training/checkpoints/KairosActionDiT_from_video_step4500_alphascale_14dim_d640_ffn2560_attn2560.safetensors",
"kairos_action_model_dim": 640,
"kairos_action_ffn_dim": 2560,
"kairos_action_attn_hidden_dim": 2560,
"allow_random_kairos_action_init": false,
"kairos_vae_pretrained": "training/pretrained/Wan-AI/Wan2.1-T2V-1.3B/Wan2.1_VAE.pth",
"kairos_text_encoder_path": "training/pretrained/Qwen/Qwen2.5-VL-7B-Instruct",
"wandb": false,
"wandb_project": "little-wam",
"wandb_entity": null,
"wandb_name": null,
"wandb_group": null,
"eval_every": 0,
"eval_num_inference_steps": 10,
"faithfulness": {
"spec": "memorywam_kairos",
"spec_doc": "docs/memorywam-kairos-design.md#7c-faithfulness-deviation-ledger",
"contract_lineage": "v15",
"contract_version": "v15_gist4_gated_episode_d640_0init_4recent_pointwise_adaptive_full",
"memory_bootstrap_opt_in": true,
"runtime_debug": {
"zero_optimizer_offload_device": "none",
"speed_comparable_to_standard_gpu_training": true
},
"backbone_provenance": "Kairos 3.1-pre WAM/Libero config (2560/32/20), not the G1-robot 1024/28/484 config",
"train_infer_fix": "absolute_video_rope_with_full_video3d_action_rope",
"train_infer_fix_components": [
"per_query_role_routing",
"absolute_pinned_3d_rope_video_cache",
"full_video3d_temporal_fraction_marker_action_rope"
],
"rope_basis": "video3d_absolute_pinned",
"action_rope": "video3d_temporal_fraction_marker",
"rope_cache_append_only": false,
"surviving_kv_immutable": true,
"cache_update": "append_new_delete_expired_full_no_recompute",
"geometry": {
"video_chunk_frames": 1,
"latent_frames_per_chunk": 1,
"action_horizon": 16,
"chunk_stride": 16,
"video_objective": "per_frame_autoregressive_F1"
},
"memory_policy": {
"n_init": 0,
"n_recent": 4,
"mv": 4,
"gist_tokens": 4,
"min_target_chunk": 0,
"clean_aug_prob": 1.0,
"max_prefix_frames": 128,
"compressed_repr": "gist_only",
"gated_memory": "episode",
"router_mode": "delta_pointwise_threshold",
"delta_threshold": 1.5,
"physical_evict_full": true,
"physical_memory_unit": "observed_latent_frame",
"latent_gid": "chunk_idx"
},
"compressed_memory": {
"representation": "gist_only",
"gist_tokens": 4,
"materialized_levels": [
"gist"
],
"router": {
"mode": "delta_pointwise_threshold",
"enabled": true,
"selection_signal": "positive_raw_dt",
"token_filter": "clean_committed_full_only",
"patch_pool": "mean",
"head_reduce": "raw_l2",
"threshold": 1.5,
"pass1": "no_grad_streaming",
"pass2": "monolithic_frozen_route_no_delta_capture",
"dynamic_anchor_cap": null,
"selected_anchor_demotion": false,
"decision_rule": "frame_score_gte_threshold",
"score_scope": "single_expiring_frame",
"accumulator": false,
"pending_capacity": 0,
"delta_layer_resolution": "pending_model_init"
},
"physical_evict_full": true
},
"action_representation": {
"status": "fixed",
"ours": "absolute_joint_14d",
"paper": "absolute_joint_14d",
"action_space_name": "aloha_agilex_absolute",
"action_space_tag": "aloha_agilex_absolute_joint_14d",
"fail_loud_on_resume": true,
"note": "ACTION_SPACE=aloha_agilex_absolute is the canonical paper-faithful RMBench 14D joint action representation; ACTION_SPACE=aloha_agilex remains a legacy chunk-delta ablation."
},
"memory_window": {
"status": "fixed",
"ours": "no permanent anchors; recent window has 4 FULL chunks including current; older frames use learned gist tokens only; video GATED state persists across clean commits and noisy targets read clock-correct state without committing",
"paper": "V15-baseline-derived GIST-only static retention",
"n_init": 0,
"n_recent": 4,
"clean_full_attended": 4,
"wam_only": true,
"note": "V15 GIST4/GATED-R4 has n_init=0 and n_recent=4 by default. The exact resolved values are recorded here and in checkpoint metadata; streaming physically removes expired FULL KV after verifying that its GIST KV exists. No L1 representation is constructed or retained."
},
"kairos_forced_deviations": [
"8 GATED (linear-attn) layers in the 32-block schedule (Kairos arch, not paper's 30 uniform softmax)",
"decomposed video/action two-tower forward (consequence of the 8 GATED layers)",
"Wan2.1 16-ch VAE vs paper Wan2.2 48-ch latent",
"Qwen2.5-VL text encoder vs paper T5"
],
"noise_schedule": {
"objective": "continuous flow-matching, 1000 steps (paper-faithful)",
"timestep_sampling": {
"status": "fixed",
"ours": "shifted logit-normal (SD3-style: u~N(0,1) -> sigmoid -> phi-shift)",
"paper": "shifted logit-normal",
"wam_only": true,
"note": "memwam loss only; idm/joint/base keep uniform+phi-shift (untouched)"
},
"video_flow_shift": {
"status": "fixed",
"ours": 5.0,
"paper": 5.0,
"wam_only": true,
"fail_loud_on_resume": true,
"note": "was dynamic kairos_shift_from_shape ~1.67 at 480-token F=1 latent; now fixed (resolved from KAIROS_WAM_VIDEO_SHIFT, default 5.0)"
},
"action_flow_shift": {
"status": "fixed",
"ours": 1.0,
"paper": 1.0,
"fail_loud_on_resume": true,
"note": "already 1.0; kept and now sampled via the logit-normal schedule (resolved from KAIROS_WAM_ACTION_SHIFT, default 1.0)"
},
"loss_reweight": {
"status": "fixed",
"ours": "unit weight (1.0); emphasis carried once by logit-normal sampling (SD3 single-application)",
"paper": "\u00a74.1 'reweighted by the scheduler's logit-normal training weight' (prose names the schedule = the sampling; no explicit weighting equation)",
"wam_only": true,
"metadata_value": "scheduler_logit_normal_single",
"flag": "KAIROS_WAM_LOSS_REWEIGHT={scheduler_logit_normal|unit} (default scheduler_logit_normal; unit = compat/debug, NOT paper-faithful)",
"note": "PAPER AMBIGUITY (no equation; \u00a74.1 only NAMES the logit-normal training weight): we follow SD3 single-application. \u00a74.1 'reweighted by the scheduler's logit-normal weight' and 'unit weight' are the SAME single application \u2014 the emphasis lives in the logit-normal SAMPLING, not a SECOND density multiply. The blueprint STEP-6 'non-constant training_weight ON TOP of logit-normal sampling' would DOUBLE-apply the emphasis (\u221d \u03c0_ln\u00b2, mean \u22481.29) \u2014 the v8 bug G1 fixed \u2014 so we keep single-application (unit weight). idm/joint/base keep the centred Gaussian bump (untouched)."
}
},
"observation_window": {
"status": "fixed",
"ours": "4-raw-frame window {3,7,11,15} of the PREVIOUS segment (anchor + {-12,-8,-4,0}) VAE-encoded into one F=1 latent; chunk 0 seeded from the repeated initial mosaic",
"paper": "appendix A.1 4-raw-frame window {3,7,11,15} aggregated into one latent frame",
"causal_alignment": "train_obs(chunk_i) == deploy_obs(chunk_i); conditioned on frames <= start_i (offset 0 = anchor, the pre-action obs)",
"ledger": "docs/memorywam-kairos-design.md \u00a77c C (Latent temporal window) + \u00a77c F1",
"gate": "tests/test_kairos_obs_window_causal_alignment.py (train obs == deploy obs per chunk, no future leak)",
"load_fail_loud_keys": [
"action_horizon",
"obs_window_mode",
"obs_window_substep_offsets",
"obs_window_prev_segment",
"obs_window_prev_window_offsets"
],
"wam_only": true,
"note": "supersedes the earlier 'single conditioning latent frame' deviation AND the earlier same-chunk {3,7,11,15} leak (v5); requires the v6 re-train (v5 trained the leaky alignment)"
},
"sim_deploy_denoise_steps": {
"status": "fixed",
"ours_realworld_default": 10,
"ours_sim": 50,
"paper_sim": 50,
"paper_realworld": 10,
"control": "robot.deployment.policy_server --num-inference-steps/--sim-denoise-steps (per-request params.num_inference_steps overrides)",
"note": "sim closed-loop eval pins the SERVER's resolved default to 50 via the deploy recipe (03_deploy_server.sh --num-inference-steps 50, SIM_NUM_INFERENCE_STEPS), not relying solely on the RMBench client's per-request value; per-request params.num_inference_steps still overrides"
},
"open_deviations": [],
"resolved_deviations": [
{
"aspect": "action_rope_basis",
"ours": "full video 3-D temporal-fraction action RoPE: action tokens use f=c+(p+1)/(T+1) and one constant non-pixel h/w marker from the video's f/h/w RoPE basis",
"paper": "action queries share the video's full 3-D (f,h,w) RoPE basis",
"deviation": "none; temporal fractional action slots and the non-pixel h/w marker follow the LingBot-VA released-code convention for action coordinates",
"action_video_spatial_cross_term": "R_f(c+frac_p-gid) * R_h(marker_h-i) * R_w(marker_w-j)",
"train_infer_consistent": true,
"class": "F",
"ledger": "docs/memorywam-kairos-design.md#7c-faithfulness-deviation-ledger (C + F3)"
}
]
}
}