Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
55e752f
docs(dataset): add dataset v3 documentation (#1956)
jadechoghari Sep 16, 2025
78b8661
feat(processors): use pipelines across the codebase (#1452)
AdilZouitine Sep 18, 2025
1bc38be
small tiny nit (#1975)
fracapuano Sep 18, 2025
5d1837d
fix (docs): image link for phone (#1977)
pkooij Sep 18, 2025
cc135d3
bump gym-hil version to be pipeline compatible (#1983)
michel-aractingi Sep 19, 2025
d65668f
Add docs for LeRobot Image transforms (#1972)
pkooij Sep 19, 2025
62d6169
fix formatting readme (#1987)
pkooij Sep 19, 2025
ce3670a
bump datasets to 4.0.0 (#1990)
michel-aractingi Sep 22, 2025
f728319
fix(trainer): overrides device to the target device, for the device p…
AdilZouitine Sep 22, 2025
2538472
feat(sim): Add Libero Env (#1984)
jadechoghari Sep 22, 2025
4bad09c
feat(ci): add stale GH action bot for stalled issues & PRs (#1996)
imstevenpmwork Sep 22, 2025
a665a9d
chore(ci): update time for stale issue/pr (#1997)
imstevenpmwork Sep 22, 2025
664c00b
Update README.md (#1989)
complete-dope Sep 22, 2025
a68424c
Fix: Resolve PermissionError and UnicodeDecodeError in Python scripts…
JivinDotL Sep 23, 2025
9d0cf64
fix(dataset): cast fps to int instead of float (#2001)
imstevenpmwork Sep 23, 2025
d6a32e9
chore(rl): move rl related code to its directory at top level (#2002)
imstevenpmwork Sep 23, 2025
3068ce3
docs(rl): fix path (#2004)
imstevenpmwork Sep 23, 2025
1666097
refactor(scripts): update system info script (#2005)
imstevenpmwork Sep 23, 2025
c435d3c
feat(script): add entry point for dataset viz (#2006)
imstevenpmwork Sep 23, 2025
c9787bd
feat(script): add entry point for image transform viz (#2007)
imstevenpmwork Sep 23, 2025
7cf04a5
chore: move constants to utils (#2016)
imstevenpmwork Sep 24, 2025
1033680
chore: move errors to utils (#2017)
imstevenpmwork Sep 24, 2025
bd09b21
chore(scripts): move find_cameras to scripts (#2018)
imstevenpmwork Sep 24, 2025
a4178f3
feat(script): add entry point for find joints limits (#2010)
imstevenpmwork Sep 24, 2025
98bcda2
chore(scripts): move find_port to scripts (#2019)
imstevenpmwork Sep 24, 2025
42e4b3d
chore(scripts): move teleop to scripts (#2023)
imstevenpmwork Sep 24, 2025
2b59850
chore(scripts): move record to scripts (#2022)
imstevenpmwork Sep 24, 2025
acbc14f
chore(scripts): move calibrate to scripts (#2024)
imstevenpmwork Sep 24, 2025
1301064
chore(scripts): move setup_motors to scripts (#2020)
imstevenpmwork Sep 24, 2025
7359e18
chore(scripts): move replay to scripts (#2021)
imstevenpmwork Sep 24, 2025
1cba47d
chore(async): move async related code to its directory at top level (…
imstevenpmwork Sep 24, 2025
cdd2bf1
chore(ci): update stale message (#2027)
imstevenpmwork Sep 24, 2025
163df97
fix(docs): update outdated links (#2026)
imstevenpmwork Sep 24, 2025
af1760f
chore(utils): move benchmark and buffer to their respective modules (…
imstevenpmwork Sep 24, 2025
ec63225
chore(utils): move encoding utils and process to their respective mod…
imstevenpmwork Sep 24, 2025
853cc70
chore(utils): remove unused utils legacy functions + rename init_reru…
imstevenpmwork Sep 24, 2025
170c09e
chore(utils): move queue utils and wandb_utils to their respective mo…
imstevenpmwork Sep 24, 2025
a87d4c9
(docs): small change in dataset name (#2032)
jadechoghari Sep 24, 2025
ddba994
chore(scripts): rename eval and train scripts (#2033)
imstevenpmwork Sep 24, 2025
43d878a
chore: replace hard-coded obs values with constants throughout all th…
imstevenpmwork Sep 25, 2025
9627765
chore(mypy): add mypy configuration and module overrides for gradual …
AdilZouitine Sep 26, 2025
d2782cf
chore: replace hard-coded action values with constants throughout all…
imstevenpmwork Sep 26, 2025
ec40ccd
Bug in conversion from v2.1 script (#2057)
michel-aractingi Sep 26, 2025
c5b5955
chore: replace hard-coded next values with constants throughout all t…
imstevenpmwork Sep 26, 2025
49918ef
chore(utils): remove unused code (#2059)
imstevenpmwork Sep 26, 2025
ddfff05
feat(train): enhance processor overrides with normalizer and unnormal…
AdilZouitine Sep 26, 2025
5b647e3
docs(fix): libero example command (#2060)
jadechoghari Sep 26, 2025
e3b5729
Save Cropped Dataset to Hub (#2071)
fracapuano Sep 27, 2025
62e9849
use abs path when concatenating (#2076)
Tavish9 Sep 28, 2025
f59eb54
chore: remove unused code (#2062)
imstevenpmwork Sep 29, 2025
90684a9
Improve V3 aggregate implementation (#2077)
Tavish9 Sep 29, 2025
c378a32
chore: enable pyugrade ruff lint (#2084)
imstevenpmwork Sep 29, 2025
bbcf66b
chore: enable simplify in ruff lint (#2085)
imstevenpmwork Sep 29, 2025
f173265
feat(normalization): add validation for empty features in NormalizerP…
AdilZouitine Sep 29, 2025
2d3a605
Revert feat(normalization): add validation for empty features in Norm…
AdilZouitine Sep 29, 2025
1ad2da4
feat(policies): add noise parameter to action prediction methods (#2063)
AdilZouitine Sep 29, 2025
a0d7627
feat(train): include input and output features in processor overrides…
AdilZouitine Sep 29, 2025
50977a2
fix(video_path): setting video_path to None during conversion for ima…
CarolinePascal Oct 1, 2025
5dfdec9
feat(mypy): enable type checking for envs module and configure mypy s…
AdilZouitine Oct 1, 2025
6d33131
feat(mypy): configure mypy settings and add module overrides for grad…
AdilZouitine Oct 1, 2025
b6c528a
Making Envs module pass MyPy checks (#2048)
iakhil Oct 1, 2025
abde7be
Add OpenPi, Pi0 and Pi0.5 (#1910)
pkooij Oct 2, 2025
38f6fc8
(chore) improve v3 message, allow converting local datasets to V3 (#1…
michel-aractingi Oct 2, 2025
5c8dd88
fix bug in `augment_dataset_quantile_stats.py` that was not detecting…
michel-aractingi Oct 2, 2025
a4bed41
Improve docs pi (#2110)
pkooij Oct 3, 2025
b74e2a6
feat(deps): ceil dependency versions (#2091)
imstevenpmwork Oct 5, 2025
5ac9356
Update README.md to fix broken link to example notebook for visuals (…
iuliaferoli Oct 7, 2025
fcaa0ea
remove extra time base set. (#2133)
michel-aractingi Oct 7, 2025
9f32e00
fix(async): Add pre and post processing to async inference and update…
pkooij Oct 7, 2025
bf3c874
feat(devices): add lazy loading for 3rd party robots cameras and tele…
imstevenpmwork Oct 7, 2025
6c28ef8
chore(docs): add missing license headers (#2140)
imstevenpmwork Oct 8, 2025
9a49e57
refactor(datasets): add compress_level parameter to write_image() and…
imstevenpmwork Oct 8, 2025
4ccf284
Add act documentation (#2139)
pkooij Oct 8, 2025
829d2d1
fic(docs): local docs links (#2149)
imstevenpmwork Oct 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ body:
id: system-info
attributes:
label: System Info
description: If needed, you can share your lerobot configuration with us by running `python -m lerobot.scripts.display_sys_info` and copy-pasting its outputs below
description: Please share your LeRobot configuration by running `lerobot-info` (if installed) or `python -m lerobot.scripts.display_sys_info` (if not installed) and pasting the output below.
render: Shell
placeholder: lerobot version, OS, python version, numpy version, torch version, and lerobot's configuration
validations:
Expand Down
68 changes: 68 additions & 0 deletions .github/workflows/stale.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Copyright 2025 The HuggingFace Inc. team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This workflow handles closing stale issues and PRs.
name: Stale
on:
# Allows running this workflow manually from the Actions tab
workflow_dispatch:

# Runs at 02:00
schedule:
- cron: "0 2 * * *"

env:
CLOSE_ISSUE_MESSAGE: >
This issue was closed because it has been stalled for 14 days with no activity.
Feel free to reopen if is still relevant, or to ping a collaborator if you have any questions.
CLOSE_PR_MESSAGE: >
This PR was closed because it has been stalled for 14 days with no activity.
Feel free to reopen if is still relevant, or to ping a collaborator if you have any questions.
WARN_ISSUE_MESSAGE: >
This issue has been automatically marked as stale because it has not had
recent activity (6 months). It will be closed if no further activity occurs.
Thank you for your contributions.
WARN_PR_MESSAGE: >
This PR has been automatically marked as stale because it has not had
recent activity (6 months). It will be closed if no further activity occurs.
Thank you for your contributions.

jobs:
# This job runs the actions/stale action to close stale issues and PRs.
stale:
name: Close Stale Issues and PRs
runs-on: ubuntu-latest
permissions:
actions: write
contents: write # only for delete-branch option
issues: write
pull-requests: write
steps:
- uses: actions/stale@v10
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-label: stale
stale-pr-label: stale
exempt-issue-labels: never-stale
exempt-pr-labels: never-stale
days-before-issue-stale: 180 # TODO(Steven): Will modify this to 90 after initial cleanup
days-before-issue-close: 14
days-before-pr-stale: 180
days-before-pr-close: 14
delete-branch: true
close-issue-message: ${{ env.CLOSE_ISSUE_MESSAGE }}
close-pr-message: ${{ env.CLOSE_PR_MESSAGE }}
stale-issue-message: ${{ env.WARN_ISSUE_MESSAGE }}
stale-pr-message: ${{ env.WARN_PR_MESSAGE }}
operations-per-run: 500
183 changes: 183 additions & 0 deletions .github/workflows/unbound_deps_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
# Copyright 2025 The HuggingFace Inc. team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This workflow handles full testing with unboud dependencies versions.
name: Unbound Dependency Tests

on:
# Allows running this workflow manually from the Actions tab
workflow_dispatch:

# Run on the 1st and 15th of every month at 09:00 UTC
schedule:
- cron: '0 2 1,15 * *'

permissions:
contents: read

# Sets up the environment variables
env:
UV_VERSION: "0.8.0"
PYTHON_VERSION: "3.10"
DOCKER_IMAGE_NAME: huggingface/lerobot-gpu:unbound

# Ensures that only the latest action is built, canceling older runs.
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

jobs:

# This job runs the E2E tests + pytest with all unbound extras
full-tests:
name: Full Unbound Tests
runs-on: ubuntu-latest
env:
MUJOCO_GL: egl
steps:
- uses: actions/checkout@v4
with:
lfs: true
persist-credentials: false

- name: Install apt dependencies
run: |
sudo apt-get update && sudo apt-get install -y build-essential \
git curl libglib2.0-0 libegl1-mesa-dev ffmpeg libusb-1.0-0-dev \
speech-dispatcher libgeos-dev portaudio19-dev

- name: Setup uv and Python
uses: astral-sh/setup-uv@v6 # zizmor: ignore[unpinned-uses]
with:
enable-cache: true
version: ${{ env.UV_VERSION }}
python-version: ${{ env.PYTHON_VERSION }}

- name: Unbound dependencies
run: |
sed -i 's/,[[:space:]]*<[0-9\.]*//g' pyproject.toml
echo "Dependencies unbound:" && cat pyproject.toml

- name: Install lerobot with all extras
run: uv sync --all-extras

- name: Run pytest (all extras)
run: uv run pytest tests -vv

- name: Run end-to-end tests
run: uv run make test-end-to-end

# This job builds a GPU enabled image for testing
build-and-push-docker:
name: Build and Push Docker
runs-on:
group: aws-general-8-plus
outputs:
image_tag: ${{ env.DOCKER_IMAGE_NAME }}
env:
GITHUB_REF: ${{ github.ref }}
steps:
- name: Install Git LFS
run: |
sudo apt-get update
sudo apt-get install git-lfs
git lfs install
- uses: actions/checkout@v4
with:
lfs: true
persist-credentials: false
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 # zizmor: ignore[unpinned-uses]
with:
cache-binary: false
- name: Login to Docker Hub
uses: docker/login-action@v3 # zizmor: ignore[unpinned-uses]
with:
username: ${{ secrets.DOCKERHUB_LEROBOT_USERNAME }}
password: ${{ secrets.DOCKERHUB_LEROBOT_PASSWORD }}
- name: Build and push Docker image
uses: docker/build-push-action@v6 # zizmor: ignore[unpinned-uses]
with:
context: .
file: ./docker/Dockerfile.internal
push: true
tags: ${{ env.DOCKER_IMAGE_NAME }}
build-args: |
UNBOUND_DEPS=true

# This job runs pytest with all unbound extras in a GPU enabled host
# It runs everytime a test image is created
gpu-tests:
name: GPU Unbound Tests
needs: [build-and-push-docker]
runs-on:
group: aws-g6-4xlarge-plus
env:
HF_HOME: /home/user_lerobot/.cache/huggingface
HF_LEROBOT_HOME: /home/user_lerobot/.cache/huggingface/lerobot
TORCH_HOME: /home/user_lerobot/.cache/torch
TRITON_CACHE_DIR: /home/user_lerobot/.cache/triton
container:
image: ${{ needs.build-and-push-docker.outputs.image_tag }} # zizmor: ignore[unpinned-images]
options: --gpus all --shm-size "16gb"
credentials:
username: ${{ secrets.DOCKERHUB_LEROBOT_USERNAME }}
password: ${{ secrets.DOCKERHUB_LEROBOT_PASSWORD }}
defaults:
run:
shell: bash
working-directory: /lerobot
steps:
- name: Run pytest on GPU
run: pytest tests -vv
- name: Run end-to-end tests
run: make test-end-to-end

# This job deletes the test image recently created
# It runs everytime after the gpu-tests have finished
delete-unbound-image:
name: Delete Unbound Image
needs: [gpu-tests, build-and-push-docker]
if: always() && needs.build-and-push-docker.result == 'success'
runs-on: ubuntu-latest
steps:
- name: Get Docker Hub Token and Delete Image
# zizmor: ignore[template-injection]
run: |
IMAGE_NAME=$(echo "${{ needs.build-and-push-docker.outputs.image_tag }}" | cut -d':' -f1)
IMAGE_TAG=$(echo "${{ needs.build-and-push-docker.outputs.image_tag }}" | cut -d':' -f2)

echo "Attempting to delete image: $IMAGE_NAME:$IMAGE_TAG"

TOKEN=$(curl -s -H "Content-Type: application/json" \
-X POST \
-d '{"username": "${{ secrets.DOCKERHUB_LEROBOT_USERNAME }}", "password": "${{ secrets.DOCKERHUB_LEROBOT_PASSWORD }}"}' \
https://hub.docker.com/v2/users/login/ | jq -r .token)

if [ "$TOKEN" == "null" ] || [ -z "$TOKEN" ]; then
echo "::error::Failed to get Docker Hub token."
exit 1
fi

HTTP_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" \
-H "Authorization: JWT ${TOKEN}" \
-X DELETE \
https://hub.docker.com/v2/repositories/${IMAGE_NAME}/tags/${IMAGE_TAG}/)

if [ "$HTTP_RESPONSE" -eq 204 ]; then
echo "Successfully deleted Docker image tag: $IMAGE_NAME:$IMAGE_TAG"
else
echo "::error::Failed to delete Docker image. HTTP status: $HTTP_RESPONSE"
exit 1
fi
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -173,3 +173,7 @@ outputs/

# Dev folders
.cache/*
*.stl
*.urdf
*.xml
*.part
11 changes: 6 additions & 5 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,12 @@ repos:

# TODO(Steven): Uncomment when ready to use
##### Static Analysis & Typing #####
# - repo: https://github.com/pre-commit/mirrors-mypy
# rev: v1.16.0
# hooks:
# - id: mypy
# args: [--python-version=3.10]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.16.0
hooks:
- id: mypy
args: [--config-file=pyproject.toml]
exclude: ^(examples|benchmarks|tests)/

##### Docstring Checks #####
# - repo: https://github.com/akaihola/darglint2
Expand Down
54 changes: 11 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -197,20 +197,20 @@ wandb login

### Visualize datasets

Check out [example 1](https://github.com/huggingface/lerobot/blob/main/examples/1_load_lerobot_dataset.py) that illustrates how to use our dataset class which automatically downloads data from the Hugging Face hub.
Check out [example 1](https://github.com/huggingface/lerobot/blob/main/examples/dataset/load_lerobot_dataset.py) that illustrates how to use our dataset class which automatically downloads data from the Hugging Face hub.

You can also locally visualize episodes from a dataset on the hub by executing our script from the command line:

```bash
python -m lerobot.scripts.visualize_dataset \
lerobot-dataset-viz \
--repo-id lerobot/pusht \
--episode-index 0
```

or from a dataset in a local folder with the `root` option and the `--local-files-only` (in the following case the dataset will be searched for in `./my_local_data_dir/lerobot/pusht`)

```bash
python -m lerobot.scripts.visualize_dataset \
lerobot-dataset-viz \
--repo-id lerobot/pusht \
--root ./my_local_data_dir \
--local-files-only 1 \
Expand All @@ -221,19 +221,19 @@ It will open `rerun.io` and display the camera streams, robot states and actions

https://github-production-user-asset-6210df.s3.amazonaws.com/4681518/328035972-fd46b787-b532-47e2-bb6f-fd536a55a7ed.mov?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240505%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240505T172924Z&X-Amz-Expires=300&X-Amz-Signature=d680b26c532eeaf80740f08af3320d22ad0b8a4e4da1bcc4f33142c15b509eda&X-Amz-SignedHeaders=host&actor_id=24889239&key_id=0&repo_id=748713144

Our script can also visualize datasets stored on a distant server. See `python -m lerobot.scripts.visualize_dataset --help` for more instructions.
Our script can also visualize datasets stored on a distant server. See `lerobot-dataset-viz --help` for more instructions.

### The `LeRobotDataset` format

A dataset in `LeRobotDataset` format is very simple to use. It can be loaded from a repository on the Hugging Face hub or a local folder simply with e.g. `dataset = LeRobotDataset("lerobot/aloha_static_coffee")` and can be indexed into like any Hugging Face and PyTorch dataset. For instance `dataset[0]` will retrieve a single temporal frame from the dataset containing observation(s) and an action as PyTorch tensors ready to be fed to a model.

A specificity of `LeRobotDataset` is that, rather than retrieving a single frame by its index, we can retrieve several frames based on their temporal relationship with the indexed frame, by setting `delta_timestamps` to a list of relative times with respect to the indexed frame. For example, with `delta_timestamps = {"observation.image": [-1, -0.5, -0.2, 0]}` one can retrieve, for a given index, 4 frames: 3 "previous" frames 1 second, 0.5 seconds, and 0.2 seconds before the indexed frame, and the indexed frame itself (corresponding to the 0 entry). See example [1_load_lerobot_dataset.py](https://github.com/huggingface/lerobot/blob/main/examples/1_load_lerobot_dataset.py) for more details on `delta_timestamps`.
A specificity of `LeRobotDataset` is that, rather than retrieving a single frame by its index, we can retrieve several frames based on their temporal relationship with the indexed frame, by setting `delta_timestamps` to a list of relative times with respect to the indexed frame. For example, with `delta_timestamps = {"observation.image": [-1, -0.5, -0.2, 0]}` one can retrieve, for a given index, 4 frames: 3 "previous" frames 1 second, 0.5 seconds, and 0.2 seconds before the indexed frame, and the indexed frame itself (corresponding to the 0 entry). See example [1_load_lerobot_dataset.py](https://github.com/huggingface/lerobot/blob/main/examples/dataset/load_lerobot_dataset.py) for more details on `delta_timestamps`.

Under the hood, the `LeRobotDataset` format makes use of several ways to serialize data which can be useful to understand if you plan to work more closely with this format. We tried to make a flexible yet simple dataset format that would cover most type of features and specificities present in reinforcement learning and robotics, in simulation and in real-world, with a focus on cameras and robot states but easily extended to other types of sensory inputs as long as they can be represented by a tensor.

Here are the important details and internal structure organization of a typical `LeRobotDataset` instantiated with `dataset = LeRobotDataset("lerobot/aloha_static_coffee")`. The exact features will change from dataset to dataset but not the main aspects:

````
```
dataset attributes:
├ hf_dataset: a Hugging Face dataset (backed by Arrow/parquet). Typical features example:
│ ├ observation.images.cam_high (VideoFrame):
Expand Down Expand Up @@ -269,7 +269,7 @@ dataset attributes:
├ root (Path): local directory where the dataset is stored
├ image_transforms (Callable): optional image transformations to apply to visual modalities
└ delta_timestamps (dict): optional delta timestamps for temporal queries
decoding videos (e.g., 'pyav', 'torchcodec')
```

A `LeRobotDataset` is serialised using several widespread file formats for each of its parts, namely:

Expand All @@ -279,42 +279,6 @@ A `LeRobotDataset` is serialised using several widespread file formats for each

Dataset can be uploaded/downloaded from the HuggingFace hub seamlessly. To work on a local dataset, you can specify its location with the `root` argument if it's not in the default `~/.cache/huggingface/lerobot` location.

### Evaluate a pretrained policy

Check out [example 2](https://github.com/huggingface/lerobot/blob/main/examples/2_evaluate_pretrained_policy.py) that illustrates how to download a pretrained policy from Hugging Face hub, and run an evaluation on its corresponding environment.

We also provide a more capable script to parallelize the evaluation over multiple environments during the same rollout. Here is an example with a pretrained model hosted on [lerobot/diffusion_pusht](https://huggingface.co/lerobot/diffusion_pusht):

```bash
lerobot-eval \
--policy.path=lerobot/diffusion_pusht \
--env.type=pusht \
--eval.batch_size=10 \
--eval.n_episodes=10 \
--policy.use_amp=false \
--policy.device=cuda
````

Note: After training your own policy, you can re-evaluate the checkpoints with:

```bash
lerobot-eval --policy.path={OUTPUT_DIR}/checkpoints/last/pretrained_model
```

See `lerobot-eval --help` for more instructions.

### Train your own policy

Check out [example 3](https://github.com/huggingface/lerobot/blob/main/examples/3_train_policy.py) that illustrates how to train a model using our core library in python, and [example 4](https://github.com/huggingface/lerobot/blob/main/examples/4_train_policy_with_script.md) that shows how to use our training script from command line.

To use wandb for logging training and evaluation curves, make sure you've run `wandb login` as a one-time setup step. Then, when running the training command above, enable WandB in the configuration by adding `--wandb.enable=true`.

A link to the wandb logs for the run will also show up in yellow in your terminal. Here is an example of what they look like in your browser. Please also check [here](https://github.com/huggingface/lerobot/blob/main/examples/4_train_policy_with_script.md#typical-logs-and-metrics) for the explanation of some commonly used metrics in logs.

\<img src="https://raw.githubusercontent.com/huggingface/lerobot/main/media/wandb.png" alt="WandB logs example"\>

Note: For efficiency, during training every checkpoint is evaluated on a low number of episodes. You may use `--eval.n_episodes=500` to evaluate on more episodes than the default. Or, after training, you may want to re-evaluate your best checkpoints on more episodes or change the evaluation settings. See `lerobot-eval --help` for more instructions.

#### Reproduce state-of-the-art (SOTA)

We provide some pretrained policies on our [hub page](https://huggingface.co/lerobot) that can achieve state-of-the-art performances.
Expand Down Expand Up @@ -373,3 +337,7 @@ If you want, you can cite this work with:
## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=huggingface/lerobot&type=Timeline)](https://star-history.com/#huggingface/lerobot&Timeline)

```

```
File renamed without changes.
Loading
Loading