LeRobot入门教程 07:LeRobot 环境与网络

目录:00_LeRobot入门教程_目录.md

1. LeRobot 是什么

LeRobot 是 Hugging Face 维护的机器人学习开源库。机器人学习里最容易「每个实验室各写一套」的几件事,它都收进了统一接口:

环节LeRobot 里的对象本套教程在哪讲
数据集读写LeRobotDataset08 册《LeRobot 数据集》
仿真环境make_env + envs.configs.*Env09 册《LeRobot 仿真》
策略模型make_policy + PreTrainedConfig10 册《LeRobot 策略推理》
评测命令行 lerobot-eval11 册《LeRobot 评测》
真机部署命令行 lerobot-rollout12 册《LeRobot 真机部署》
微调命令行 lerobot-train13 册《LeRobot 微调》
奖励模型 / 强化学习lerobot.rewards / lerobot.rl14 册《奖励模型》、15 册《强化学习》

07–15 这九册的代码都跑在 LeRobot 0.6.1 上

2. 为什么第一件事是配置网络

LeRobot 的模型和数据集都托管在 Hugging Face Hub 上。第一次运行时需要下载的东西不小:

  • lerobot/libero 数据集:1693 条演示、27 万帧,含视频文件;
  • lerobot/pi0_libero_finetuned 策略:π0 系列视觉语言动作模型;
  • LIBERO 仿真资产、RoboMeter-4B 奖励模型(约 4B 参数,8 GB 量级)。

国内直连 Hub 经常几十 KB/s 甚至直接超时。AutoDL 提供了 /etc/network_turbo 学术加速脚本(第 05 册 5.2 节讲过)。

但这里有个坑:在 Jupyter 里写 !source /etc/network_turbo 只对那一个子进程生效,下一个格子照样没有代理。所以本册不 source,而是用 Python 把脚本里的 export 解析进当前 kernel 进程的 os.environ,这样后面所有格子(包括 from_pretrained 触发的下载)都能走加速通道。

3. 两个必须提前设好的环境变量

第一格代码里有两行看起来不起眼、但漏了就会报错的设置:

环境变量值为什么
MUJOCO_GLeglMuJoCo 渲染画面需要 OpenGL 上下文。这台服务器没有显示器、也没有 X11,只能用 GPU 离屏渲染(EGL)。不设会退化到需要图形界面的后端而初始化失败;设成 osmesa 则改成 CPU 软件渲染。
TORCHDYNAMO_DISABLE1关掉 torch.compile。仿真 + 大模型组合下 dynamo 编译容易在第一次调用时长时间卡住甚至编译失败,先关掉更稳。

这两行都要在 import torch 之前生效,所以它们写在格子最前面。

import os, re
for line in open("/etc/network_turbo").read().replace("&&", "\n").splitlines():
    m = re.match(r"\s*export\s+([A-Za-z_]+)=(.*)", line)
    if m:
        os.environ[m.group(1)] = m.group(2).strip().strip('"')
os.environ.setdefault("MUJOCO_GL", "egl")
os.environ["TORCHDYNAMO_DISABLE"] = "1"
try:
    from huggingface_hub.utils._http import close_session
    close_session()
except Exception:
    pass

import torch, lerobot
print("lerobot", lerobot.__version__, "| torch", torch.__version__, "| cuda", torch.cuda.is_available())
lerobot 0.6.1 | torch 2.8.0+cu128 | cuda True

4. 逐行看懂这一格

代码作用
open("/etc/network_turbo").read().replace("&&", "\n")该文件里存在 export A=1 && export B=2 这种一行多个的写法,先把 && 换成换行,才能一行一个 export
re.match(r"\s*export\s+([A-Za-z_]+)=(.*)", line)只认 export 名字=值 的行,注释和空行自动跳过
os.environ[m.group(1)] = m.group(2).strip().strip('"')写进当前进程环境变量,并去掉值两边可能带的引号
os.environ.setdefault("MUJOCO_GL", "egl")用 setdefault 而不是直接赋值:如果外部已经指定了渲染后端(比如调试时想换 osmesa),就不覆盖
try: ... close_session() ... except: passhuggingface_hub 会复用长连接,代理切换后旧连接可能还指向老路由,这里主动关掉。包版本不同时这个内部函数可能不存在,所以用 try 包住
print("lerobot", ...)一行确认三件事:lerobot 版本、torch 版本、CUDA 是否可用

5. 这一格跑完应该看到什么

lerobot 0.6.1 | torch 2.8.0+cu128 | cuda True

三个信息分别代表:

  • lerobot 0.6.1:版本对上了,后面的参数名才对得上;
  • torch 2.8.0+cu128:+cu128 表示这个 wheel 带 CUDA 12.8 运行时;
  • cuda True:能看到 GPU。如果是 False,后面所有推理、训练都会退到 CPU,第一次加载模型就可能几十分钟,先解决这个再往下走。

6. 常见问题

现象原因处理
下载卡在 Fetching files 或超时当前 kernel 没走加速通道回到第 1 节这一格重跑;确认 os.environ 里有 http_proxy
cuda 是 FalseGPU 被别的任务占满,或驱动/CUDA 不匹配nvidia-smi 看显存;确认没有别的进程占着卡
TypeError: unexpected keyword argumentlerobot 版本不是 0.6.1按项目要求安装对应版本,别随意 pip install -U
上一格设了代理,这一格还是慢每开一个新 kernel 都要重新跑第 1 节九册里凡是下载相关的格子,前面都依赖这一格