feat: add LeRobot imitation learning pipelines for OSMO and Azure ML#165
Merged
feat: add LeRobot imitation learning pipelines for OSMO and Azure ML#165
Conversation
- add OSMO workflows for ACT training (HF Hub, Azure Blob, OSMO dataset sources) and inference - add Azure ML workflow and submission script for LeRobot training with MLflow integration - add end-to-end pipeline script for train → evaluate → register flow - add offline inference test script with pre/post processor normalization - update scripts and workflows README docs with LeRobot usage 🤖 - Generated by Copilot
- add robot observation and command data classes with UR10E joint mapping - add framework-agnostic PolicyRunner wrapping ACT policy with normalization - add ROS2 inference node with dry-run safety gate and JointTrajectory publishing - add inference documentation with AML and HuggingFace model pull instructions 🤖 - Generated by Copilot
- add --from-blob, --storage-account, --blob-prefix to submit script - add MLflow metric logging and checkpoint upload to azure-data workflow - decouple blob dataset container from log storage container env var - remove ad-hoc submit-lerobot-training.sh script 🚀 - Generated by Copilot
- remove azure.ai.ml and azure.identity dependencies from training workflows - use mlflow.log_artifacts and mlflow.register_model for checkpoint registration - pass active MLflow run to upload functions instead of standalone ML client - update registration step to use MLflow tracking URI and experiment context - remove unused threading and datetime imports 🔄 - Generated by Copilot
… packaging - merge lerobot-train-azure-data.yaml into lerobot-train.yaml with conditional blob handling - replace fragile git clone with base64-encoded zip payload pattern matching IsaacLab workflow - remove WANDB support in favor of MLflow-only logging with system metrics - delegate training logic to Python modules via packaged src/training payload 🔧 - Generated by Copilot
…er_model - replace mlflow.register_model with MLClient.models.create_or_update to avoid azureml_artifacts_builder tracking_uri bug - extract shared _get_aml_client and _register_model_via_aml helpers - simplify upload_checkpoints_to_azure_ml to use shared helper 🐛 - Generated by Copilot
- accept main's markdownlint-cli2 config and chat location settings - keep [json] editor settings from feature branch - adopt main's table formatting style in workflows README
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
There was a problem hiding this comment.
Pull request overview
Adds end-to-end LeRobot imitation learning support across OSMO and Azure ML by introducing new workflow templates, submission/pipeline scripts, and Python modules for training, dataset acquisition, checkpoint registration, and ACT policy inference.
Changes:
- Added OSMO workflows for LeRobot training (inline payload + dataset mount) and evaluation/optional AML model registration.
- Added Azure ML command-job template + submission script for LeRobot training with environment registration.
- Introduced new Python modules for LeRobot training orchestration, blob dataset download/prep, checkpoint upload/registration, and ACT inference (including a ROS2 node), plus updated docs/READMEs and VS Code settings.
Reviewed changes
Copilot reviewed 23 out of 23 changed files in this pull request and generated 15 comments.
Show a summary per file
| File | Description |
|---|---|
| workflows/osmo/lerobot-train.yaml | OSMO LeRobot training workflow using inline base64 payload and MLflow logging. |
| workflows/osmo/lerobot-train-dataset.yaml | OSMO LeRobot training workflow using an OSMO dataset mount (includes WANDB/MLflow toggles). |
| workflows/osmo/lerobot-infer.yaml | OSMO evaluation workflow that downloads a policy and optionally registers it to AML. |
| workflows/osmo/README.md | Documents new OSMO LeRobot workflows and submission commands. |
| workflows/azureml/lerobot-train.yaml | AzureML command-job template for LeRobot training submission. |
| workflows/azureml/README.md | Documents AzureML LeRobot training template and usage. |
| workflows/README.md | Updates workflow directory overview + adds LeRobot examples/sections. |
| src/training/scripts/lerobot/train.py | MLflow-wrapping training orchestrator that parses logs and uploads/registers checkpoints. |
| src/training/scripts/lerobot/download_dataset.py | Azure Blob dataset download + dataset fixes (stats/timestamps). |
| src/training/scripts/lerobot/checkpoints.py | Checkpoint artifact upload and AML model registration helpers. |
| src/training/scripts/lerobot/bootstrap.py | AML MLflow bootstrap + HuggingFace authentication helpers. |
| src/training/scripts/lerobot/init.py | Package init for LeRobot training scripts. |
| src/inference/scripts/act_inference_node.py | ROS2 node for running ACT inference and optionally publishing joint commands. |
| src/inference/robot_types.py | Observation/command dataclasses for ACT inference integration. |
| src/inference/policy_runner.py | Framework-agnostic ACT policy runner that normalizes inputs and produces joint commands. |
| scripts/test-lerobot-inference.py | Offline ACT inference validation script against dataset observations. |
| scripts/submit-osmo-lerobot-training.sh | Submits OSMO LeRobot training workflow and packages training payload inline. |
| scripts/submit-osmo-lerobot-inference.sh | Submits OSMO LeRobot evaluation workflow with optional AML registration. |
| scripts/submit-azureml-lerobot-training.sh | Registers AzureML environment and submits LeRobot training job via az ml job create. |
| scripts/run-lerobot-pipeline.sh | Orchestrates train → wait/poll → evaluate → optional registration in OSMO. |
| scripts/README.md | Adds LeRobot scripts and pipeline usage documentation. |
| docs/lerobot-inference.md | New documentation for offline inference + ROS2 deployment. |
| .vscode/settings.json | Adds excludes for datasets/cache folders and tweaks JSON editor settings. |
nguyena2
approved these changes
Feb 12, 2026
- fix f-string quoting bug and add subscription param in azureml submission script - replace empty string defaults with 'none' sentinels in azureml job template - add ENCODED_ARCHIVE guard and jq dependency for osmo workflows - fix DefaultAzureCredential to use workload identity in download_dataset.py - remove WANDB references from docs, add front matter to lerobot-inference.md 🔧 - Generated by Copilot
- switch table separators to compact |---| style matching main - restore OSMO inference parameters table rows - remove lerobot-train-dataset.yaml from directory tree 📝 - Generated by Copilot
- remove extra space after ## in LeRobot Inference heading (MD019) - rename duplicate Inference Parameters heading to OSMO Inference Parameters (MD024) 📝 - Generated by Copilot
…kflow templates table
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Soundtrack: Gorillaz - White Flag
Summary
Adds end-to-end LeRobot imitation learning support across OSMO and Azure ML, covering training (multiple data sources), checkpoint management, and edge inference.
What Changed
Training Pipelines
lerobot-train.yaml,lerobot-train-dataset.yaml)lerobot-train.yaml) with MLflow experiment tracking, system metrics, and model registrationsubmit-osmo-lerobot-training.sh,submit-azureml-lerobot-training.sh) with full CLI for dataset, policy, and compute configurationrun-lerobot-pipeline.sh) for train → evaluate → register flowTraining Modules (
src/training/scripts/lerobot/)train.pycheckpoints.pydownload_dataset.pybootstrap.pyInference
PolicyRunner— framework-agnostic wrapper for ACT policy inference with normalization statsrobot_types.py— observation and command data classes with UR10E joint mappingact_inference_node.py— ROS2 node with dry-run safety gate andJointTrajectorypublishinglerobot-infer.yaml) and submission scripttest-lerobot-inference.py) for validating policy output shape and normalizationCheckpoint Management
mlflow.register_modelwithMLClient.models.create_or_updateto avoidazureml_artifacts_buildertracking URI bug_get_aml_clientand_register_model_via_amlhelpers for consistent registrationDocumentation
docs/lerobot-inference.md— inference setup with AML and HuggingFace model pull instructionsscripts/README.md,workflows/README.md,workflows/osmo/README.md, andworkflows/azureml/README.mdwith LeRobot usageFiles Changed
New files (19): Training modules, inference modules, workflows, submission scripts, docs
Modified files (4): READMEs, VS Code settings
Key Design Decisions
src/training/) is base64-zip encoded into the workflow YAML, avoiding container image rebuilds for training logic changesMLClientusage instead of MLflow'sregister_modelto work around tracking URI limitations in OSMO environments