Start gate source validationThen environment and artifactsFinish one-step training smoke test

Common setup

Getting started

Prepare a clean KinRT environment and verify every external input before launching a long training run. This page stops at a one-step software smoke test; benchmark-specific commands follow on the RoboTwin and DIYRobot pages.

Audience: first-time userPlatform: Linux GPU hostRuntime: Python 3.11+, CUDA 12, uv
01

Check the prerequisites

The validated release path uses Ubuntu, an NVIDIA CUDA stack, and the pinned Python workspace. Verify the supported combinations below before installing the command-line dependencies.

System / GPUKinRT trainingRoboTwin GPU simulationDIYRobot deployment
Ubuntu 22.04 / NVIDIASupported pathSupported pathSupported path
Other Linux / NVIDIACompatibility-dependentFollow RoboTwin supportHardware-dependent
Windows / NVIDIANot documentedNot documentedNot supported
WSL2 / NVIDIANot validatedNot validatedDo not use
macOS / Apple siliconNot supportedNot supportedNot supported

Also install FFmpeg and reserve storage for datasets, base parameters, normalization assets, router labels, checkpoints, and evaluation videos. FULL requires substantially more trainable GPU memory than LoRA.

Host checks
python3 --version
nvidia-smi
git lfs version
ffmpeg -version
uv --version
Expected gate

Python is at least 3.11, the GPU is visible, and all four command-line tools return without error.

02

Understand what is included

The release contains one KinRT/OpenPI policy workspace. FULL and LoRA are configuration choices in the same registry; the RoboTwin environment and all large artifacts remain external.

PathPurposeUse directly?
policy/pi05KinRT training, serving, and all retained OpenPI configsYes
scriptRoboTwin evaluation overlayCopy into a compatible simulator checkout
configs/PAPER_MODELS.jsonPaper model evidence and checkpoint mappingReference
manifests/Unified source inventory and provenanceValidation
Not a data release

No private dataset, router-label array, base weight, trained checkpoint, simulator asset, or calibration file is embedded in this package.

03

Choose FULL or LoRA

Both variants implement KinRT. Choose by optimization budget, not by routing behavior.

PropertyFULLLoRA
RoboTwin configkinrt_fullkinrt_lora
PaliGemmaDense gemma_2bgemma_2b_lora, rank 32
Action expertDense gemma_300mgemma_300m_lora, rank 64
Base parametersTrainableFrozen by filter
Router and routed expertsTrainableTrainable
Routing objectiveIdentical KinRT settingIdentical KinRT setting

For a first installation test, use kinrt_lora. For the paper's FULL row, use kinrt_full from the same config registry.

04

Install the pinned environment

KinRT workspace
cd /path/to/KinRT/policy/pi05
uv sync --frozen
uv run python -c "import jax; print(jax.devices())"
uv run python -c "from openpi.training import config; print(config.get_config('kinrt_lora').name)"

The lockfile pins JAX 0.5.0, Flax 0.10.2, Transformers 4.48.1, and a recorded LeRobot revision. Do not update dependencies during a reproduction run unless the changed environment is reported separately.

Expected gate

JAX lists a GPU and the final command prints kinrt_lora.

05

Connect external artifacts

Edit only the selected block in src/openpi/training/config.py. Replace its dataset identity, router-label path, base checkpoint path, asset location, and checkpoint output location.

Config fieldMust point toFailure symptom
repo_idThe intended LeRobot datasetMissing dataset or wrong task count
router_labels_pathLabels generated from that exact dataset revisionIndex error or semantically wrong supervision
weight_loaderMatching PI0.5 or PI0 base paramsShape or restore error
assets_dir / asset_idNorm stats for this dataset and action schemaMissing stats or unstable actions
checkpoint_base_dirA writable local filesystemCheckpoint save failure
Path existence is not identity.

A file at the expected path may still belong to another dataset or model. Record checksums and metadata with every experiment.

06

Pass the dataset gate

Inspect metadata before running PCA/KMeans or normalization. KinRT aligns labels by the LeRobot global index field.

Dataset metadata check
python - <<'PY'
import json
from pathlib import Path

root = Path("/data/lerobot/my_dataset")
info = json.loads((root / "meta" / "info.json").read_text())
required = {"observation.state", "action"}
features = set(info["features"])
print("episodes", info["total_episodes"])
print("frames", info["total_frames"])
print("missing", sorted(required - features))
print("data_path", info["data_path"])
PY

For DIYRobot, verify 14-D state/action vectors in degrees and three image streams. For RoboTwin, verify that the selected conversion produces the exact keys used by the config.

07

Run a bounded training smoke test

Complete the KinRT offline-label procedure first, then compute norm stats. Before a full run, override the selected config in a disposable copy to one step and one checkpoint. Do not publish smoke settings as benchmark settings.

Training smoke gate
uv run python scripts/compute_norm_stats.py --config-name kinrt_lora
uv run python scripts/train.py kinrt_lora --exp-name kinrt_smoke
Expected gate

Data loading succeeds, total loss and router loss are finite, all four label classes are observable, and a checkpoint can be written and restored.