模型卡指南:从训练发布到 Hub 加载推理的完整实践)
LeRobot 奖励模型Reward Model模型卡指南从训练发布到 Hub 加载推理的完整实践【免费下载链接】lerobot LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobotLeRobot 将「奖励模型」作为一类与策略网络并列的一等公民在真实机器人操作中任务成功与否往往无法直接观测需要由奖励模型从观测/轨迹中预测奖励信号用于离线强化学习、人在环路微调、数据筛选与自动失败检测等下游环节。本文以仓库中的 lerobot_rewardmodel_modelcard_template.md 为核心系统讲解 LeRobot 奖励模型的四类实现Reward Classifier、SARM、ROBOMETER、TOPReward、模型卡模板的渲染机制以及从零训练、发布到 Hugging Face Hub、再以 Python API 加载并计算奖励的完整实战流程。一、模板是什么奖励模型模型卡生成机制lerobot_rewardmodel_modelcard_template.md是一个Jinja2 渲染模板它不是直接面向读者的说明文档而是 LeRobot 在训练完成后自动生成模型卡Model Card所用的骨架。模板顶层通过{{ card_data }}注入 YAML front matter随后用{{ model_name }}、{{ license }}等占位符动态填充内容。从源码看模型卡的渲染入口位于 src/lerobot/common/train_utils.py 的generate_model_card函数当训练的是奖励模型而非策略时该函数会读取lerobot_rewardmodel_modelcard_template.md模板文件见 L761并仅依据card_data渲染——即训练配置中的奖励模型类型、数据集信息与 Hub 元数据最终决定了模型卡上展示的内容。这意味着模板中的{% if model_name ... %}分支模板 L12-L22是整个模型卡的「摘要引擎」当前仓库支持四种已注册的奖励模型类型分别对应reward_classifier、sarm、robometer、topreward四个分支。若类型未被识别模板会回退到提示文案Reward model type not recognized — please update this template.。四种类型的官方定义模板原文语义类型键全称/出处一句话定位是否可训练reward_classifierReward Classifier轻量神经网络为观测或轨迹的成功与否打分提供学习型奖励信号或离线评估是sarmSuccess-Aware Reward ModelSARM从观测预测稠密奖励信号用于强化学习或人在环路微调是robometerROBOMETER基于微调 Qwen3-VL-4B 的通用视频-语言奖励模型输出逐帧稠密任务进度与成功率是toprewardTOPReward零样本奖励模型直接抽取现成 VLM默认 Qwen3-VL对指令的 token 对数概率作为奖励无需微调否零样本二、四类奖励模型深度剖析模板的四个分支各有对应的配置类与建模实现均注册在RewardModelConfig的选择注册表中见 src/lerobot/rewards/init.py 与 src/lerobot/rewards/factory.py 的get_reward_model_class。2.1 Reward Classifier轻量图像分类器配置类RewardClassifierConfig位于 src/lerobot/rewards/classifier/configuration_classifier.py模型实现Classifier位于 src/lerobot/rewards/classifier/modeling_classifier.py。默认以lerobot/resnet10为图像编码器model_name支持model_type切换CNN或Transformer两种骨干编码器参数被冻结_freeze_encoder见 modeling_classifier.py#L159-L162只训练轻量的SpatialLearnedEmbeddings MLP 分类头核心超参数num_classes2二分类时输出 sigmoid 概率、hidden_dim256、latent_dim256、image_embedding_pooling_dim8、dropout_rate0.1、num_cameras2、learning_rate1e-4、weight_decay0.01、grad_clip_norm1.0推理时compute_reward对二分类返回(probabilities 0.5).float()即成功返回 1.0、失败返回 0.0见 modeling_classifier.py#L237-L245训练时forward返回(loss, {accuracy: ...})可直接对接训练循环配置校验要求输入特征中必须存在以observation.image开头的图像特征validate_features。2.2 SARM面向长程操作的阶段感知奖励建模SARMStage-Aware Reward Modeling for Long Horizon Robot Manipulation配置类位于 src/lerobot/rewards/sarm/configuration_sarm.py。其核心设计是annotation_mode三档模式single_stage默认无需任何额外标注将整条轨迹视为一个阶段稀疏 head 学习任务完成度dense_only使用 VLM 生成的细粒度标注训练稠密 head同时自动生成覆盖全轨迹的单个稀疏「task」阶段dual稀疏高层 稠密细粒度双 head 全量训练。时序建模上采用双向抽帧observation_delta_indices以当前帧为中心向前后各取frame_gap3030fps 下约 1 秒间隔的帧见 configuration_sarm.py#L217-L236配合max_rewind_steps4的时序回退增强rewind_probability0.8训练序列长度为1 n_obs_steps max_rewind_steps 13帧。输出特征包含stage与progress两类奖励头架构默认hidden_dim768、num_heads12、num_layers8。SARM 预设了 AdamW 优化器lr5e-5与余弦退火调度器warmup 500 步、decay 50000 步训练时无需额外配置优化器。2.3 ROBOMETER通用视频-语言奖励模型ROBOMETER 配置类位于 src/lerobot/rewards/robometer/configuration_robometer.py基于Qwen3-VL-4Bbase_model_idQwen/Qwen3-VL-4B-Instruct微调带progress / preference / success三个头。其关键机制输入为轨迹视频 任务描述逐帧输出[0,1]的稠密任务进度与帧级成功率服务于离线/在线 RL、数据筛选与检索、自动失败检测reward_output可在progress与success间切换success_threshold0.5控制二值化frame_pooling支持mean/boundary/attention三种逐帧池化策略progress_loss_type支持l1/l2/discrete离散分箱默认 10 箱与上游权重复原相关的特殊 token 顺序被显式固定为数据契约见 configuration_robometer.py#L39-L45|split_token|、|reward_token|、|pref_token|、|sim_token|、|prog_token|任何增删或换序都会导致保存的 embedding 行与 token id 错位配置初始化时会读取 Qwen3-VL 的 config 与 tokenizer将vocab_size扩为len(tokenizer) 5 151,674与发布的Robometer-4B检查点一致默认pretrained_pathlerobot/Robometer-4B即开箱即用的官方预训练权重。2.4 TOPReward零样本 token 对数概率奖励TOPReward 配置类位于 src/lerobot/rewards/topreward/configuration_topreward.py其实现文档src/lerobot/rewards/topreward/modeling_topreward.py明确指出它是inference-only、不可训练的模型forward有意继承基类的NotImplementedError因此is_trainable恒为False所谓「检查点」只是单个config.jsonVLM 权重默认Qwen/Qwen3-VL-8B-Instruct在加载时按 Hub id 现取。奖励的计算方式是概率化的处理器把「视频 指令 后缀」组装成 prompt默认后缀模板为{instruction} Decide whether the above statement is True or not. The answer is: True然后只对末尾的True标记解除 label 掩码最终奖励即log P(True | 视频 prompt 指令)见 modeling_topreward.py#L29-L41。关键参数max_frames16每样本送入 VLM 的帧数上限、fps2.0Qwen 视频处理器的元数据、add_chat_template开关、success_threshold有限值时返回(reward threshold).float()的二值结果、max_input_length32768超限样本抛ValueError。注意TOPReward 属于「零样本」方案get_optimizer_preset返回None与此对应基类 src/lerobot/configs/rewards.py 中优化器预设的注释也写明Nonefor zero-shot models。三、从零训练并发布到 Hub模板中给出的训练命令是发布奖励模型的推荐姿势本质上是调用 lerobot_train.py 并把reward_model.type指定为上述四种类型之一lerobot-train \ --dataset.repo_id${HF_USER}/dataset \ --reward_model.type{{ model_name | default(reward_classifier, true) }} \ --output_diroutputs/train/desired_reward_model_repo_id \ --job_namelerobot_reward_training \ --reward_model.devicecuda \ --reward_model.repo_id${HF_USER}/desired_reward_model_repo_id \ --wandb.enabletrue各参数含义与注意点参数说明备注--dataset.repo_id训练用数据集的 HF repo id需替换${HF_USER}/dataset占位符--reward_model.type奖励模型类型reward_classifier/sarm/robometer/topreward模板默认渲染为reward_classifiertopreward为零样本模型实际上没有可训练权重--output_dir本地输出目录检查点写入outputs/train/desired_reward_model_repo_id/checkpoints/--job_name训练任务名同时用于 WandB 等日志分组--reward_model.device训练设备如cuda基类 RewardModelConfig 会自动校验设备可用性不可用时会回退到自动选择--reward_model.repo_id目标 Hub 仓库 id训练完成推送的地址与--reward_model.push_to_hub配合使用--wandb.enable是否启用 WandB 日志训练奖励模型默认可开启从 src/lerobot/configs/train.py 可见TrainPipelineConfig中reward_model与policy二选一当配置了--reward_model.path时train.py#L200-L214训练器会从该路径加载已有奖励模型的配置并应用 CLI 覆盖项实现断点续训。训练入口在 lerobot_train.py#L454-L459 通过make_reward_model实例化模型并在训练完成后将配置、模型权重safetensors 单文件、前后处理器一起推送至reward_model.repo_id。训练产物检查点目录包含config.json含奖励模型配置与 Hub 元数据与model.safetensors。序列化逻辑在 src/lerobot/rewards/pretrained.py_save_pretrained由主进程写入分布式场景下副本权重一致因此无需集体通信。四、在 Python 中加载与推理模板提供了最小可用的加载与推理片段from lerobot.rewards import make_reward_model reward_model make_reward_model(pretrained_pathhf_user/reward_model_repo_id) reward reward_model.compute_reward(batch)4.1make_reward_model工厂的工作方式工厂函数位于 src/lerobot/rewards/factory.py#L107-L135。其逻辑为通过get_reward_model_class(cfg.type)动态导入对应类使用懒加载避免一次性加载全部模型依赖见 factory.py#L33-L70若配置中设置了pretrained_path则调用from_pretrained从本地目录或 HF Hub 下载权重否则从零初始化统一将模型to(cfg.device)。from_pretrained的完整签名src/lerobot/rewards/pretrained.py#L83-L142支持revision指定 Hub commit/branch/tag 固定版本、token私有仓库鉴权、cache_dir、local_files_only、strict严格检查权重键名等参数。注意加载完成后模型默认处于eval()模式——若需继续训练必须显式调用reward.train()。4.2compute_reward统一的奖励接口基类 PreTrainedRewardModel 定义了抽象方法compute_reward(batch) - Tensorpretrained.py#L165-L176输入为包含至少观测张量的 batch 字典输出形状为(batch_size,)的奖励张量。各类型的输出语义Reward Classifier{0.0, 1.0}二值成功/失败或argmax多类索引SARM逐帧稀疏/稠密 stage 分类与 progress 稠密进度ROBOMETERreward_outputprogress时为[0,1]稠密进度success时为阈值二值化成功率TOPReward默认返回原始 token 对数概率配置success_threshold后返回二值成功判定。训练与推理的区分由is_trainable属性承担pretrained.py#L184-L191可训练模型重写了forward零样本模型如 TOPReward继承基类实现并抛出NotImplementedError。这一契约在 tests/rewards/test_reward_model_base.py 中有对应测试覆盖A reward model that only implementscompute_rewardis zero-shot。4.3 预处理与后处理管线奖励模型同样走处理器管线。make_reward_pre_post_processorsfactory.py#L138-L205按配置类型分派到各子包的 processor 工厂。以 Reward Classifier 为例src/lerobot/rewards/classifier/processor_classifier.py#L32-L80预处理器依次执行输入/输出特征的NormalizerProcessorStep依据dataset_stats与normalization_mapping与DeviceProcessorStep后处理器将输出移回 CPU 并施加恒等步骤。SARM 的处理器还会注入数据集元数据dataset_meta用于阶段标注对齐ROBOMETER/TOPReward 的处理器则负责把视频帧、指令与 prompt 组装成 VLM 所需的编码张量。测试方面tests/rewards/test_modeling_topreward.py 与 tests/rewards/test_modeling_robometer.py 分别验证了compute_reward返回(B,)形状、success_threshold二值化、以及缺失输入键时报错的契约行为。五、模型卡元数据Model Details模板末尾的Model Details区块要求填充license字段其默认值为占位符[More Information Needed]。在实际训练中该字段来源于奖励模型配置基类 RewardModelConfig 的 Hub 元数据字段字段类型说明licensestr开源协议标识如 ROBOMETER 默认apache-2.0、TOPReward 默认mittagslist[str]检索标签如[reward-model, vision-language, qwen3-vl, zero-shot]privatebool推送时是否创建私有仓库push_to_hubbool训练结束是否自动推送repo_idstr目标 Hub 仓库 id各具体配置类已为license/tags提供合理默认值见 configuration_robometer.py#L62-L65、configuration_topreward.py#L100-L103训练时可通过 CLI 覆盖。这些元数据随config.json一起保存是模型卡渲染与 Hub 检索的关键依据。六、端到端工作流小结选型根据任务确定奖励模型类型——轻量图像级成败判断选reward_classifier长程操作需要阶段感知稠密奖励选sarm视频-语言通用奖励选robometer希望零成本、零微调地复用现成 VLM 选topreward训练lerobot-train指定--reward_model.type与数据集检查点落盘到outputs/train/repo_id/checkpoints/发布训练完成后推送config.jsonmodel.safetensorsTOPReward 仅推送config.json至--reward_model.repo_idHub 元数据驱动模型卡渲染推理make_reward_model(pretrained_path...)一行加载compute_reward(batch)得到(batch_size,)奖励向量作为 RL 奖励信号、数据筛选分数或失败检测器使用。更多细节可继续研读src/lerobot/rewards/factory.py、src/lerobot/rewards/pretrained.py、src/lerobot/configs/rewards.py以及测试目录 tests/rewards 中各类模型的契约测试。【免费下载链接】lerobot LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考