当前位置: 首页 > news >正文

LeRobot 框架的开发指南 (下)

本文给想要贡献或扩展 LeRobot 框架的开发者提供全面的指南。它涵盖开发环境、测试流程、持续集成工作流程以及贡献指南。

请添加图片描述

。。。。。。继续。。。。。。

在此记录 LeRobot 项目中使用的测试框架,涵盖本地开发测试和持续集成工作流程。本指南将帮助开发者了解如何在代码库中编写、运行和自动化测试。

测试架构

LeRobot 框架采用全面的测试策略,包含多层验证,从本地开发检查到自动化 CI/CD 流水线。

测试组件概述

请添加图片描述

本地测试

预提交 hooks

预提交 hooks 在每次提交前自动运行,以便在开发过程的早期发现问题。这些 hooks 可以强制执行代码质量、代码风格和安全标准。

请添加图片描述

建立预提交 hooks:

Install pre-commit

pip install pre-commit

Install the hooks

pre-commitinstall

Run all hooks manually (useful before pushing)

pre-commit run --all-files

运行单元测试

LeRobot 使用 pytest 进行单元测试。该测试套件涵盖从数据集到策略的各个组件。
要在本地运行测试:

Run all tests

python -m pytest tests -v

Run tests with coverage report

python -m pytest tests -v --cov=./lerobot

Run a specific test file

python -m pytest tests/path/to/test_file.py

Pytest 会自动发现 tests/ 目录中的测试并运行。测试文件应以 test_ 为前缀命名。

端到端测试

端到端 (E2E) 测试,验证从训练到评估的完整工作流程。它们在 Makefile 中定义,并使用特定数据集测试不同的策略类型。

Run all end-to-end tests

make test-end-to-end

Run a specific end-to-end test

make test-act-ete-train

CI/CD 测试

LeRobot 使用 GitHub Actions 进行持续集成和测试。多个工作流会根据拉取请求和预定时间间隔自动运行。

主测试工作流

主测试工作流根据 Pull 请求运行并推送到主分支。它包括:
完整安装测试 (pytest)
最小安装测试(仅包含核心依赖项的 pytest)
端到端测试

请添加图片描述

测试工作流程使用 uv(一种 Python 打包工具)来管理依赖项并运行带有覆盖率报告的测试。

质量工作流程

质量工作流程检查代码风格并检测拼写错误:

请添加图片描述

Docker 构建测试

Docker 构建测试用于验证 Docker image 是否可以成功构建:

请添加图片描述

当 Dockerfiles 在 PR 中被修改时,这些测试就会运行,确保对容器化的更改不会破坏构建。

夜间测试

夜间测试按每日调度运行更全面的测试套件:

请添加图片描述

夜间测试在 Docker 容器中运行,确保 CPU 和 GPU 测试的环境一致。

端到端测试

端到端测试验证策略训练和评估的整个工作流程。这些测试使用小型数据集并以最少的步骤运行,但会测试系统的所有组件。

策略端到端测试结构

请添加图片描述

LeRobot 端到端测试三种策略类型:

1.ACT(动作分块 Transformer)
训练
从检查点恢复训练
评估

2.扩散策略
训练
评估

3.TDMPC(时间差分模型预测控制)
训练
评估

每个测试都使用一个小型环境配置和数据集运行。

示例测试命令

以下是 ACT 策略训练测试命令的示例:

python lerobot/scripts/train.py \
–policy.type=act \
–policy.dim_model=64 \
–policy.n_action_steps=20 \
–policy.chunk_size=20 \
–policy.device=$(DEVICE) \
–env.type=aloha \
–env.episode_length=5 \
–dataset.repo_id=lerobot/aloha_sim_transfer_cube_human \
–dataset.image_transforms.enable=true \
–dataset.episodes=“[0]” \
–batch_size=2 \
–steps=4 \
–eval_freq=2 \
–eval.n_episodes=1 \
–eval.batch_size=1 \
–save_freq=2 \
–save_checkpoint=true \
–log_freq=1 \
–wandb.enable=false \
–output_dir=tests/outputs/act/

测试 artifacts

某些测试需要测试 artifacts(权重、样本数据)才能正常运行。这些工件使用 Git LFS 存储在 tests/artifacts/ 目录中。
设置 Git LFS
要使用测试 artifacts:

Install Git LFS
On Mac

brew install git-lfs
git lfs install

On Ubuntu

sudo apt-get install
git-lfs git lfs install

Pull artifacts if not already present

git lfs pull

安全测试

LeRobot 采用了多种安全扫描工具:

请添加图片描述

TruffleHog 工作流程在每次推送时运行,以检查是否存在意外的证据暴露。

测试覆盖率

在 CI 运行期间,使用 pytest-cov 跟踪测试覆盖率。覆盖率报告显示测试覆盖了哪些代码部分。

要在本地运行覆盖率测试,执行以下操作:
pytest tests -v --cov=./lerobot --cov-report=xml

编写测试

为 LeRobot 项目编写新测试时,遵循以下准则:
将测试放置在 tests/ 目录中的适当位置
使用 test_ 前缀命名测试文件
使用 test_ 前缀命名测试函数
使用 pytest 夹具进行通用设置
测试成功和失败的情况
保持测试快速且独立

测试结构示例:
deftest_feature_behavior():
# Setup
# Execute
# Assert

指标追踪

LeRobot 提供用于在测试和训练过程中追踪指标的工具。MetricsTracker 类提供诸如损失、已处理样本和 epochs 等指标的标准化报告:

请添加图片描述

在此记录 LeRobot 框架中使用的持续集成和持续部署 (CI/CD) 工作流程。这些自动化流水线可确保代码质量、验证测试覆盖率、构建 Docker image 并执行安全扫描。

CI/CD 工作流程概述

LeRobot 使用 GitHub Actions 进行 CI/CD,其中包含几个专门的工作流程,用于处理开发过程的不同方面:

请添加图片描述

测试工作流程

主要测试工作流程

当 pull 请求或推送到主要分支影响代码库中的相关路径时,test.yml 工作流程将运行:

请添加图片描述

这个工作执行不同类型的测试:

请添加图片描述

夜间测试工作流程

nightly-tests.yml 工作流程使用 Docker 容器按计划运行全面测试:

请添加图片描述

代码质量工作流程

质量工作流程

quality.yml 工作流程强制执行代码风格并检查拼写错误:

请添加图片描述

此工作流程使用与 .pre-commit-config.yaml 中配置的预提交 hooks 相同的工具,确保本地开发环境和持续集成环境之间的一致性。

Docker 工作流程

Docker 构建工作流程

build-docker-images.yml 工作流程创建 Docker 镜像并将其推送到 DockerHub:

请添加图片描述

Docker 测试工作流程

test-docker-build.yml 工作流程无需推送到 DockerHub 即可测试 Docker 构建:

请添加图片描述

安全工作流程

trufflehog.yml 工作流程会扫描代码库中潜在的安全问题:

请添加图片描述

工作流触发器和路径

CI/CD 工作流使用各种触发条件来确定何时运行:

请添加图片描述

对于test.yml来说,触发工作流的具体路径包括:

lerobot/**
tests/**
examples/**
.github/**
pyproject.toml
.pre-commit-config.yaml
Makefile
.cache/**

环境和依赖项

所有工作流程均使用 Python 3.10 作为标准 Python 版本。测试工作流程使用 uv(版本 0.6.0)进行依赖项管理,与传统方法相比,它能够提供更快、更可靠的软件包安装。

对于基于 Docker 的测试,代码库维护三个 Docker images:

请添加图片描述

与开发工作流集成

CI/CD 工作流旨在与开发流程无缝协作。它们有助于确保:
代码更改在合并前经过适当测试
保持代码风格一致性
定期构建和测试 Docker image
及早发现安全问题

在为 LeRobot 贡献代码时,开发者应:
在推送代码前在本地运行预提交 hooks(与质量工作流中使用的工具相同)
确保在提交 PR 前在本地通过测试
注意触发特定工作流的路径

结论

LeRobot 的 CI/CD 工作流提供了一个全面的系统,用于维护代码质量、测试覆盖率和安全性。它们旨在在相关事件发生时自动运行,也可在需要时手动触发。

在此提供为 LeRobot 项目做出贡献的全面指南。无论是修复错误、添加新功能、改进文档还是报告问题,本指南都能帮助了解贡献流程。

贡献方式

LeRobot 项目欢迎各种类型的贡献:
修复现有代码中未解决的问题
实现新的模型、数据集或模拟环境
为示例或文档做出贡献
提交与错误或所需新功能相关的问题
帮助社区中的其他人(Discord、GitHub 问题)
贡献工作流程
设置开发环境

在贡献之前,需要设置开发环境:

请添加图片描述

1.复制并克隆代码库:
git clone git@github.com:<你的 Github 用户名>/lerobot.git
cd lerobot
git remote add upstream https://github.com/huggingface/lerobot.git

  1. 创建开发分支:
    git checkout main
    git fetch upstream
    git rebase upstream/main
    git checkout -b your-feature-branch

  2. 设置开发环境:
    使用 conda:
    conda create -y -n lerobot-dev python=3.10 && conda activate lerobot-dev
    使用 uv:
    uv venv --python 3.10 && source .venv/bin/activate

  3. 安装依赖项:
    开发环境:uv sync --extra dev --extra test 或 poetry sync --extras “dev test”
    完整安装:uv sync --all-extras 或 poetry sync --all-extras

  4. 安装预提交 hooks:
    pre-commitinstall

进行更改并提交 Pull 请求

请添加图片描述

在分支上开发功能或修复问题
运行测试以验证更改:
pytest tests/<TEST_TO_RUN>.py

运行预提交 hooks:
pre-commit run --all-files

推送更改:
git push -u origin your-feature-branch

按照 PR 模板在 GitHub 上创建 pull 请求
处理来自代码审查的任何反馈

代码质量标准

LeRobot 通过自动化工具和流程保持高代码质量标准:

请添加图片描述

预提交 hooks

该项目使用多个预提交 hooks 来确保代码质量:

请添加图片描述

使用以下命令运行预提交检查:
pre-commit run --all-files

持续集成

LeRobot 使用 GitHub Actions 构建 CI/CD 流水线,以确保代码质量并维护 Docker image:

请添加图片描述

测试工作流

请添加图片描述

测试贡献

LeRobot 包含一个全面的测试套件,用于确保代码质量和验证功能:
1.安装 git-lfs 以检索测试工件:

Ubuntu

sudo apt-get install git-lfs
git lfs install

Mac

brew install git-lfs
git lfs install

  1. 运行测试:
    python -m pytest -sv ./tests

  2. 测试特定组件:
    pytest tests/<TEST_FILE>.py::test_function

添加新组件

在 LeRobot 中实现新组件时,遵循以下指南:

添加新策略

在 lerobot/init.py 中更新 available_policies 和 available_policies_per_env
在策略类中设置所需的 name 类属性
通过导入新的策略类来更新 tests/test_available.py 中的变量

添加新数据集

在 lerobot/init.py 中更新 available_datasets_per_env
确保数据集与 LeRobotDataset API 兼容

添加新环境

在 lerobot/init.py 中更新 available_tasks_per_env 和 available_datasets_per_env
按照标准 API 设计实现环境

问题报告

错误报告

报告错误时,包含以下内容:
操作系统类型和版本、Python 和 PyTorch 版本
一段简短、完整的代码片段,用于重现错误
如果出现异常,提供完整的回溯
其他信息,例如可能有用的屏幕截图

功能请求

请求功能时,包含以下内容:
动机(问题/挫折、项目需求、社区效益)
一段描述该功能的段落
一段演示其未来用途的代码片段(snippet)
相关论文链接(如适用)
其他信息(图表、屏幕截图)

Pull 请求流程

提交 Pull 请求时:
提供描述性标题,概述贡献
参考相关问题
将正在进行的 pull 请求标记为 [WIP] 或草稿 pull 请求
确保现有测试通过
描述变更的测试方式
提供审阅者签出并尝试变更的步骤

LeRobot 开发架构

请添加图片描述

该图说明 LeRobot 项目中的开发工作流程如何与 CI/CD 流水线和代码质量工具集成。

组件添加过程

请添加图片描述

该图展示向 LeRobot 添加新组件的过程以及它们如何融入现有架构。

结论

为 LeRobot 贡献代码是一个协作的过程,有助于每个人改进框架。遵循本文档中的指南,可以确保贡献有效地融入项目。

相关文章:

  • opencv 图像的平移和旋转
  • Flyweight(享元)设计模式 软考 享元 和 代理属于结构型设计模式
  • ArcGIS Pro 3.4 二次开发 - 编辑
  • 单机Kafka配置ssl并在springboot使用
  • Spring MVC-面试题(33)
  • 「二叉搜索树·手撕暴走篇」:用C++《一路向北》狂写指针のの死亡轮盘!
  • C++成员对象和封闭类
  • 在ubuntu 24安装 postgresql 17 (源码安装)
  • 【Python数据库全栈指南】从SQL到ORM深度实践
  • 深入浅出IIC协议 - 从总线原理到FPGA实战开发 -- 第五篇:多主仲裁与错误恢复
  • 【编程语言】【Python】一篇文章搭建python知识体系
  • 数据保护与通讯安全
  • 基于 STC89C52 的养殖场智能温控系统设计与实现
  • 基于S7-1200 PLC与MM440变频器的速冻库制冷控制系统设计与实现
  • 算法打卡第五天
  • CMake指令:option()
  • vue-table-print 一个强大的Vue 3表格打印工具,支持ElementPlus、Ant Design Vue等主流UI组件库。
  • Windows逆向工程提升之IMAGE_IMPORT_DESCRIPTOR
  • 【Django DRF】一篇文章总结Django DRF框架
  • LabVIEW与SQLServer2019换计算机重新安装数据库
  • wordpress 媒体库角色权限/长沙百度快照优化排名
  • wordpress维基主题/厦门关键词优化网站
  • 襄阳做网站/seo关键词排名优化联系方式
  • wordpress kalium/广告投放优化师
  • 网站上线发布流程/谷歌推广哪家好
  • ur网站建设/网店如何推广