Instructions to use nepyope/rtc with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use nepyope/rtc with LeRobot:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
|
Download README.md from nepyope/rtc: direct link, hf CLI and curl.
- Browser
- Download file 4.98 kB
-
https://huggingface.co/nepyope/rtc/resolve/main/README.md
- Command line
-
hf download hf://nepyope/rtc/README.md
-
curl -L -o README.md https://huggingface.co/nepyope/rtc/resolve/main/README.md
4.98 kB
| library_name: lerobot | |
| pipeline_tag: robotics | |
| base_model: lerobot-data-collection/folding_final | |
| datasets: | |
| - lerobot-data-collection/level2_final_quality3_t_0_hil_data_c | |
| tags: | |
| - lerobot | |
| - pi05 | |
| - robotics | |
| - real-time-chunking | |
| - rtc | |
| # pi0.5 folding — training-time RTC, max delay 10 (step 3000) | |
| π₀.₅ fine-tuned with **training-time real-time chunking** so that inference can run with | |
| `--inference.rtc.mode=trained`: during training the last `d` actions of the previous chunk are | |
| held clean and the remainder is denoised, with `d` drawn uniformly from 0…10 per example. The | |
| model therefore learns to complete a chunk whose prefix is already committed, which is what makes | |
| delay-compensated inference sound rather than approximate. | |
| This is step 3000 of a planned 5000-step run. The interactive session hosting the job was lost at | |
| around step 3800, so this is the last checkpoint written and the cosine schedule had not annealed | |
| (LR was 1.2e-05 at the point of loss). Loss was flat from step 2100 onward, so the missing 2000 | |
| steps are unlikely to matter much for behaviour, but it is not a fully decayed model. | |
| | | | | |
| | --- | --- | | |
| | base checkpoint | [`lerobot-data-collection/folding_final`](https://huggingface.co/lerobot-data-collection/folding_final) @ `695abe40dbf3aac04efda59c1501d748681fa0fb` | | |
| | dataset | [`lerobot-data-collection/level2_final_quality3_t_0_hil_data_c`](https://huggingface.co/datasets/lerobot-data-collection/level2_final_quality3_t_0_hil_data_c) @ `2496db53d330c360f910d095e13698d968c56fc6` — 1319 episodes, 3,414,338 frames | | |
| | code | `huggingface/lerobot` @ `4dbb965455ed8c260e5ba947e55558b4d4c14b5d` (training-time RTC, [PR #4056](https://github.com/huggingface/lerobot/pull/4056)) | | |
| | `rtc_training_max_delay` | 10 | | |
| | `chunk_size` | 30 | | |
| | relative actions | enabled (`relative_exclude_joints: ['gripper']`) | | |
| | hardware | 8×H100 80GB, one node, 45.96 GB per GPU | | |
| | batch | 12 per GPU × 8 = 96 | | |
| | optimizer | AdamW, LR 3.75e-05, weight decay 0.01, cosine decay with 500 warm-up steps over 5000 | | |
| | throughput | 1.22 s/step, ~78 samples/s | | |
| ## Training command | |
| Run under `accelerate` on a single 8×GPU node. `--policy.path` points at a local copy of the base | |
| snapshot, because `folding_final` predates the `delta_actions_processor` → | |
| `relative_actions_processor` registry rename and that one string has to be patched in | |
| `policy_preprocessor.json` before it will load. | |
| ```bash | |
| accelerate launch \ | |
| --num_machines=1 \ | |
| --num_processes=8 \ | |
| --main_process_port=29827 \ | |
| lerobot-train \ | |
| --policy.path=/path/to/folding_final_snapshot_copy \ | |
| --policy.rtc_training_max_delay=10 \ | |
| --policy.device=cuda \ | |
| --policy.dtype=bfloat16 \ | |
| --policy.gradient_checkpointing=true \ | |
| --policy.compile_model=false \ | |
| --policy.push_to_hub=false \ | |
| --policy.scheduler_warmup_steps=500 \ | |
| --policy.scheduler_decay_steps=5000 \ | |
| --dataset.repo_id=lerobot-data-collection/level2_final_quality3_t_0_hil_data_c \ | |
| --dataset.root=/path/to/level2_final_quality3_t_0_hil_data_c_snapshot \ | |
| --dataset.use_imagenet_stats=false \ | |
| --output_dir=/path/to/output \ | |
| --job_name=folding-final-rtc-d10-5k \ | |
| --batch_size=12 \ | |
| --steps=5000 \ | |
| --num_workers=8 \ | |
| --save_freq=1000 \ | |
| --log_freq=100 \ | |
| --seed=1000 \ | |
| --wandb.enable=true \ | |
| --wandb.project=folding-rtc \ | |
| --wandb.disable_artifact=true | |
| ``` | |
| `--policy.compile_model=false` is required rather than cosmetic: the base checkpoint carries | |
| `compile_model: true` with `compile_mode: max-autotune`, and triton fails to lower it | |
| (`KeyError: 'cubin'`) on this cluster. `--policy.dtype=bfloat16` with no AMP keeps AdamW state in | |
| bf16, which is why a full 4.1B-parameter fine-tune fits in 46 GB. | |
| ## Loss | |
| | step | 100 | 600 | 1100 | 1600 | 2100 | 2600 | 3100 | 3600 | | |
| | --- | --- | --- | --- | --- | --- | --- | --- | --- | | |
| | loss | 0.428 | 0.036 | 0.029 | 0.026 | 0.026 | 0.023 | 0.023 | 0.021 | | |
| | grad norm | 5.71 | 0.38 | 0.27 | 0.25 | 0.24 | 0.25 | 0.25 | 0.25 | | |
| ## Inference | |
| ```bash | |
| lerobot-rollout \ | |
| --strategy.type=base \ | |
| --policy.path=nepyope/rtc \ | |
| --inference.type=rtc \ | |
| --inference.rtc.mode=trained \ | |
| --inference.rtc.execution_horizon=10 \ | |
| --inference.queue_threshold=10 \ | |
| --robot.type=bi_openarm_follower \ | |
| --task="Fold the T-shirt properly" \ | |
| --fps=30 \ | |
| --interpolation_multiplier=3 | |
| ``` | |
| `execution_horizon` must satisfy `rtc_training_max_delay <= horizon <= chunk_size - | |
| rtc_training_max_delay`, so the valid window here is **10 to 20**, and `queue_threshold` has the | |
| same lower bound of 10. Measured rollout delay on the reference hardware is ~7 frames, so 10 is the | |
| reactive end of the range; raise it if calls overrun and chunks get discarded. A one-off spike past | |
| the trained delay discards that chunk and retries — only a sustained overrun is fatal. | |
| The relative-actions processor must stay enabled: RTC inference requires an enabled | |
| `RelativeActionsProcessorStep` to reconstruct absolute targets from the committed prefix. | |