zimplex's picture
Add detailed HARP train37 training provenance
47553fd verified
|
Raw History Blame Contribute Delete
7.15 kB
---
tags:
- lerobot
- robotics
- imitation-learning
- vision-language-action
- harp-vla
- qpos-absolute
- diffusion
datasets:
- zhouqh/harp_vla_data
library_name: lerobot
pipeline_tag: robotics
---
# LeRobot Diffusion Policy fine-tuned on HARP VLA train37
This is the validated final LeRobot policy checkpoint from the joint 37-task
HARP VLA fine-tuning run. It predicts **absolute Franka joint-position targets
plus gripper state** (`qpos_target_abs`, action dimension 8).
Repository: `zimplex/harp-vla-train37-diffusion`
Final step: **6,250**
Final training job: **131349**
Final audit job: **131714**
## Dataset
| Field | Value |
|---|---|
| Public source | [`zhouqh/harp_vla_data`](https://huggingface.co/datasets/zhouqh/harp_vla_data) |
| Dataset card license | MIT at the pinned revision |
| Pinned source revision | [`46691c4098ae2ca46a131745d1fe386d63a3fc33`](https://huggingface.co/datasets/zhouqh/harp_vla_data/tree/46691c4098ae2ca46a131745d1fe386d63a3fc33) |
| Conversion | LeRobot v3, `qpos_target_abs`, 20 Hz, PyAV video backend |
| Robot / renderer / schema | Franka / NYX / `vla_steps_v2_qpos_target` |
| Coverage | 37 source tasks, 36 language instructions, 300 episodes/task |
| Size | 11,100 episodes; 4,373,192 frames |
| Camera payload | head RGB + right-wrist RGB; recorded depth groups are empty by contract |
| Dataset completion marker SHA-256 | `f9d5121d9f7a210918e5d3dd394d915b00a413d1659538d01729e8f8f6b46db6` |
| Converted data tree SHA-256 | `65dfc626682a26bfb64478d8b9da9b008aafe2d5536c97b52a21b2c320e8c055` |
| Task manifest SHA-256 | `b0f46008dfe238c08be3c31f24d86ef80e155e7c5b9b8e75b99c8d73812aa8c6` |
## Training protocol
All five policies used the same optimizer-step and example budget as the
earlier HR-Bench train19 sweep. Every policy consumed exactly **6,400,000
training examples** (6,400,000 for this model), approximately 1.46
passes over the 4,373,192-frame dataset. This is not equal-epoch training.
| Field | Value |
|---|---|
| Model / policy type | `diffusion` |
| Initialization | `Diffusion Policy initialized from scratch with a TorchVision ResNet-18 ImageNet-1K backbone` |
| Pinned base revision or digest | `f37072fd47e89c5e827621c5baffa7500819f7896bbacec160b1a16c560e07ec` |
| Nodes × GPUs/node | 4 × 8 NVIDIA B200 |
| Batch per process | 32 |
| Global batch | 1024 |
| Optimizer steps | 6,250 |
| Save cadence | every 5,000 steps |
| Total examples | 6,400,000 |
| Seed | 1000 |
| Image augmentation | disabled |
| Mixed precision flag | `use_amp=false` |
| Data workers | 4 per process; prefetch factor 4 |
| cuDNN deterministic | `false` |
| W&B | offline; project `harp_vla_train37_gcp` |
| Training budget policy | `same_optimizer_and_example_budget_as_hr_v2_train19` |
The Diffusion Policy was initialized from scratch apart from the pinned TorchVision ResNet-18 `IMAGENET1K_V1` visual backbone.
### Pinned software runtime
| Component | Version / revision |
|---|---|
| LeRobot source | `26ff40ddd784280efc133a8e5af1a76e5ac731c2` plus the recorded HARP entrypoint |
| Python | 3.12 |
| PyTorch / TorchVision | 2.8.0 / 0.23.0 |
| Diffusers / Datasets | 0.35.2 / 4.4.1 |
| PyAV | 15.1.0 |
### Optimizer and scheduler
```json
{
"optimizer": {
"betas": [
0.95,
0.999
],
"eps": 1e-08,
"grad_clip_norm": 10.0,
"lr": 0.0001,
"type": "adam",
"weight_decay": 1e-06
},
"scheduler": {
"name": "cosine",
"num_warmup_steps": 500,
"type": "diffuser"
}
}
```
### Policy architecture
| Config field | Value |
|---|---|
| `n_obs_steps` | `2` |
| `horizon` | `64` |
| `n_action_steps` | `32` |
| `vision_backbone` | `resnet18` |
| `pretrained_backbone_weights` | `ResNet18_Weights.IMAGENET1K_V1` |
| `use_separate_rgb_encoder_per_camera` | `true` |
| `down_dims` | `[512, 1024, 2048]` |
| `kernel_size` | `5` |
| `n_groups` | `8` |
| `diffusion_step_embed_dim` | `128` |
| `noise_scheduler_type` | `DDPM` |
| `num_train_timesteps` | `100` |
| `beta_schedule` | `squaredcos_cap_v2` |
| `prediction_type` | `epsilon` |
| `clip_sample` | `true` |
| `normalization_mapping` | `{"ACTION": "MIN_MAX", "STATE": "MIN_MAX", "VISUAL": "MEAN_STD"}` |
### Inputs and outputs
| Feature | Direction | Type | Shape |
|---|---|---|---|
| `observation.image` | input | VISUAL | `3 × 256 × 256` |
| `observation.state` | input | STATE | `8` |
| `observation.wrist_image` | input | VISUAL | `3 × 256 × 256` |
| `action` | output | ACTION | `8` |
The exact, machine-readable training and policy configurations are included as
`train_config.json` and `config.json`. They are the files emitted by the final
checkpoint; their hashes were checked against the immutable completion marker.
## Files and loading
The repository root contains the complete `pretrained_model/` payload from the
LeRobot checkpoint (1.04 GiB), including policy
weights, processor state, `train_config.json`, and `config.json`.
`checkpoint_manifest.json` records every uploaded checkpoint file's byte size
and SHA-256; `SHA256SUMS` provides the same digests in standard text form.
`training_provenance.json` records the immutable run, dataset,
source, job, and audit contract.
Optimizer and RNG files from `training_state/` are intentionally not published;
this public repository is an inference checkpoint, not a resume bundle.
```python
from lerobot.policies.factory import make_policy_from_pretrained
policy = make_policy_from_pretrained("zimplex/harp-vla-train37-diffusion", device="cuda")
policy.eval()
```
Use a LeRobot checkout compatible with the configuration included here.
## Reproducibility and validation
| Field | Value |
|---|---|
| Immutable run ID | `harp_vla_train37_full_deadline_20261001T151243Z_2747a40` |
| Original protocol source commit | `2747a401bd29a070452aeab815d99847d7b507bb` |
| Final attempt source commit | `da1a0456fe16bab22bdf3759b6577b335c683680` |
| HARP race-safe entrypoint SHA-256 | `bf6ac26d9d4487ffe3258fd482a4c3561d5effaab9fc501442367a159631e88e` |
| Pinned LeRobot trainer SHA-256 | `5ae8b0b8f3312f14f054364b56d21f39e3843d650162443286e7342bc489d8c8` |
| Training environment marker SHA-256 | `dd775f736fa809107dc69b653d5c0eef4679e6958fc9b8950fe6aaa3835c2bab` |
| Completion marker SHA-256 | `598755aa7bf50578936bab4f523b28be175348c039b7e1f6650fe25f2787cda8` |
| `train_config.json` SHA-256 | `36c90b7dcb16831cc72ff0fe3405c341bff4ea8b4e65473492f8e3df58c21eb1` |
| `config.json` SHA-256 | `3306dca683170e16adfa3d61e8f46d2cfe5fc365bbcf7703e2821d2c426537fb` |
The final audit required Slurm `COMPLETED/0:0`, exact marker/config hashes, the
pinned dataset and topology, and finite values in every final Safetensors
tensor. This model passed with zero audit errors.
## Limitations
- This release contains training artifacts, not HARP benchmark evaluation
scores. No downstream success rate is claimed by this model card.
- The checkpoint is specific to the converted 20 Hz absolute-qpos convention
and its feature/normalization schema.
- No license is asserted by this card; users must comply with the licenses and
terms of the base model/backbone, dataset, LeRobot, and other dependencies.