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

LeRobot 框架的开发指南 (上)

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

开发环境设置

本地开发环境

为 LeRobot 设置本地开发环境需要 Python 3.10 和包管理工具。建议使用 Poetry 或 uv 进行依赖管理。

请添加图片描述

设置步骤:
克隆代码库并创建 Python 环境
使用以下方法之一安装依赖项:
使用 Poetry:poetry sync --extras “dev test” 或 poetry sync --all-extras
使用 uv:uv sync --extra dev --extra test 或 uv sync --all-extras
安装预提交hooks:pre-commit install

Docker 环境

LeRobot 提供三种 Docker 镜像,适用于不同的开发场景:

请添加图片描述

请添加图片描述

使用这些docker images:

CPU image

docker pull huggingface/lerobot-cpu

GPU image (requires NVIDIA Container Toolkit)

docker pull huggingface/lerobot-gpu

Development image

docker pull huggingface/lerobot-gpu:dev

测试框架

LeRobot 项目使用 pytest 进行测试,并包含一个全面的测试套件。

请添加图片描述

本地运行测试

可以使用 pytest 运行测试,命令如下:

Run all tests

python -m pytest -sv ./tests

Run specific test file

pytest tests/test_specific.py -v

Run end-to-end

tests make test-end-to-end

测试套件使用 Git LFS 来存储测试 artifacts。请确保设置好 Git LFS 并拉取 artifacts:
git lfs install
git lfs pull

CI/CD 工作流程

LeRobot 使用 GitHub Actions 进行持续集成和部署(CI/CD)工作流程。

请添加图片描述

Pull 请求工作流

创建 Pull 请求时,以下工作流会自动运行:
1.测试工作流 (test.yml) - 使用不同配置运行 pytest:

  • 包含所有附加组件的完整安装
  • 最小化安装
  • 端到端测试

2.质量工作流 (quality.yml) - 检查代码质量:

  • Ruff 用于 linting 和格式化
  • 拼写检查

3.Docker 测试 (test-docker-build.yml) - 当 Dockerfile 发生更改时,测试 Docker 构建

调度的工作流

以下工作流按每日调度运行:
1.夜间测试 (nightly-tests.yml) - 在 Docker 容器中进行全面测试:

  • CPU 容器测试
  • GPU 容器测试

2.Docker 构建 (build-docker-images.yml) - 构建并发布 Docker 镜像:
huggingface/lerobot-cpu
huggingface/lerobot-gpu
huggingface/lerobot-gpu:dev

安全检查

密钥扫描 (trufflehog.yml) - 每次推送时运行,以检测意外密钥泄露

贡献指南

请添加图片描述

代码风格和预提交 hooks

LeRobot 使用预提交 hooks 来强制执行代码风格和质量:
pre-commit install # Install hooks
pre-commit # Run hooks on staged files
pre-commit run --all-files # Run hooks onallfiles

预提交的配置包括:

请添加图片描述

Pull 请求流程

  • 分叉并克隆代码库
  • 创建分支用于修改:
    git checkout -b descriptive-branch-name
  • 进行修改并确保测试通过
  • 使用预提交功能,维护代码质量
  • 将修改推送到分叉(fork)
  • 创建包含清晰描述的 pull 请求
  • 在审核期间处理反馈

创建 pull 请求时:

  • 使用描述性标题概括贡献
  • 对任何相关的问题做参考
  • 确保所有测试通过
  • 将正在进行的 pull 请求,标记为 [WIP] 或草稿拉取请求

开发最佳实践

文件结构

LeRobot 使用标准 Python 项目结构。开发者需要注意的关键文件和目录:

  1. pyproject.toml - 包配置和依赖项
  2. .pre-commit-config.yaml - 预提交钩子配置
  3. tests/ -测试套件
  4. .github/workflows/ - CI/CD 配置
  5. docker/ - Docker 配置

忽略的文件

Git 和 Docker 中忽略的文件和目录:

  1. 构建文件:build/、dist/、*.egg-info/
  2. 虚拟环境:.venv/、env/
  3. 缓存文件:pycache/、.pytest_cache/
  4. 日志和数据:logs/、data/、outputs/、wandb/
  5. IDE 设置:.vscode/

开发工具

推荐的开发工具包括:

  • Poetry 或 uv 用于依赖管理
  • pre-commit 用于代码质量监控
  • pytest 用于测试
  • Git 和 GitHub 用于版本控制
  • Docker 用于容器化开发和测试

在此介绍 LeRobot 可用的 Docker 环境、其配置以及如何与 CI/CD 流水线集成。Docker 容器为 LeRobot 应用程序的开发、测试和部署提供一致的环境。

可用的 Docker images

请添加图片描述

lerobot-cpu

lerobot-cpu image 提供了一个轻量级容器,用于在仅 CPU 环境下运行 LeRobot:

  • 基于 Python 3.10 slim 镜像
  • 包含必要的构建工具和库
  • 配置了 MuJoCo EGL 渲染后端
  • 已安装常用依赖项的LeRobot
  • 用于推理的 PyTorch CPU 版本

lerobot-gpu

lerobot-gpu image 支持 GPU 加速训练和推理:

  • 基于 NVIDIA CUDA 12.4.1 和 Ubuntu 22.04
  • 包含必要的构建工具和库
  • 配置了 MuJoCo EGL 渲染后端
  • 已安装常用依赖项的 LeRobot
  • 支持 CUDA 的 PyTorch

lerobot-gpu-dev

lerobot-gpu-dev image 专为为 LeRobot 做出贡献的开发者设计:

  • 基于 NVIDIA CUDA 12.2.2 开发类 image,搭载 Ubuntu 22.04 操作系统
  • 包含全面的开发工具(git、vim、htop 等)
  • 包含用于视频处理的 FFmpeg 构建依赖项
  • 包含用于代码库交互的 GitHub CLI
  • 使用 Poetry 进行依赖项管理
  • 无需预装 LeRobot 软件包(仅供开发使用)

Docker image 架构

请添加图片描述

Docker image 内容

Docker image 的分层和内容

请添加图片描述

CI/CD 集成

LeRobot 使用 Docker 容器作为其 CI/CD 流水线,确保在不同机器上保持一致的测试环境。

Docker 构建工作流

build-docker-images.yml 工作流自动构建 Docker image 并将其推送到 DockerHub:

  • 按每日调度运行
  • 构建所有三个 Docker images(CPU、GPU、GPU-Dev)
  • 将它们推送到 huggingface 组织下的DockerHub
  • 也可以手动触发

Docker 测试工作流程

当 Dockerfile 发生更改时,test-docker-build.yml 工作流程会确保构建成功:

  • 触发修改 Dockerfile 文件的拉取请求
  • 检测哪些 Dockerfile 已更改
  • 仅构建修改后的 Dockerfile
  • 在合并前验证构建是否成功完成

使用 Docker 进行夜间测试

nightly-tests.yml 工作流使用 Docker 容器进行全面测试:

  • 在 CPU 机器上使用 lerobot-cpu image
  • 运行测试 在 GPU 机器上使用 lerobot-gpu image
  • 运行测试在两种环境中执行端到端测试

Docker CI/CD 工作流

请添加图片描述

。。。。。。待续。。。。。。

http://www.xdnf.cn/news/8384.html

相关文章:

  • 【【嵌入式开发 Linux 常用命令系列 19 -- linux top 命令的交互使用介绍】
  • Vue常用自定义指令-积累的魅力【VUE】
  • DETR3D- 3D Object Detection from Multi-view Images via 3D-to-2D Queries
  • 展锐 Android 15 锁定某个App版本的实现
  • OpenGL ES 基本基本使用、绘制基本2D图形
  • DDS compiler(6.0) IP核配置与使用教程
  • 基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(五)
  • 【数据架构05】数据要素架构篇
  • 二、OpenCV图像处理-几何变换
  • 服务接口鉴权与内部认证:自定义注解与AOP实现的企业级实践
  • Android 14 Binderized HAL开发实战指南(AIDL版)
  • StringBuilder 和 StringBuffer 的线程安全分析
  • maven添加自己下载的jar包到本地仓库
  • Python字典的工作原理:深入理解哈希表实现
  • Redis主从+哨兵+集群分片
  • 回溯算法:解锁多种问题的解决之门
  • 利用Qt绘图随机生成带多种干扰信息的数字图片
  • Lavavel学习笔记(Eloquent ORM/Swoole 定时任务)
  • Logback 在 Spring Boot 中的详细配置
  • 【深尚想!爱普特APT32F1023H8S6单片机重构智能电机控制新标杆】
  • PostgreSQL 软件升级
  • 06 如何定义方法,掌握有参无参,有无返回值,调用数组作为参数的方法,方法的重载
  • 解构赋值与剩余参数:语法特性背后的思考
  • Go语言爬虫系列教程(三)HTML解析技术
  • 【MySQL】剖析事务和锁
  • 疏锦行Python打卡 DAY 9 热力图和子图的绘制
  • 如何备份和恢复Linux系统?
  • RHCSA Linux 系统 硬盘管理
  • linux 内核warn_on/Bug_on
  • 【深度学习-Day 16】梯度下降法 - 如何让模型自动变聪明?