具身智能配置#

本节介绍具身智能 RL 训练专用的配置参数(机器人操作、模拟器、VLA 模型)。 这些参数扩展了 基础配置 中的共享配置。

defaults#

defaults:
  - env/manikill_put_carrot_on_plate_in_scene@env.train
  - env/manikill_put_carrot_on_plate_in_scene@env.eval

defaults:Hydra 配置继承。指定训练与评估加载的环境配置。

hydra#

hydra:
  searchpath:
    - file://${oc.env:REPO_PATH}/config/

hydra.searchpath:额外的配置文件搜索路径。

runner#

runner:
  only_eval: False
  max_prompt_length: 30
  overlap_env_bootstrap: False

runner.only_eval:只运行评估,不进行训练。

runner.max_prompt_length:最大提示长度(token 数)。

runner.overlap_env_bootstrap: 将环境的 bootstrap(重置/reset)过程与 Actor 训练过程重叠,以隐藏重置延迟。 当环境重置较慢时,此功能非常有用。 注意: 仅在 env.train.enable_offload 为 False 时生效。 如果环境和 Actor 共享同一个加速器,开启此功能可能会增加重合期间的 GPU 显存压力。

algorithm#

algorithm:
  normalize_advantages: True
  kl_penalty: kl

  rollout_epoch: 1

  reward_type: chunk_level
  logprob_type: token_level
  entropy_type: token_level

  length_params:
    max_new_token: null
    max_length: 1024
    min_length: 1

algorithm.normalize_advantages:是否对优势值归一化处理。

algorithm.rollout_epoch:每个训练步骤前的 rollout 轮数。

algorithm.reward_type:奖励聚合层级(chunk_level、action_level)。

algorithm.logprob_type:对数概率的计算层级。

algorithm.entropy_type:熵的计算层级。

length_params:

algorithm.length_params.max_new_token:最大新增 token 数。

algorithm.length_params.max_length:最大总序列长度。

algorithm.length_params.min_length:最小序列长度。

env#

env:
  group_name: "EnvGroup"
  channel:
    name: "env_buffer_list"
    queue_name: "obs_buffer"
    queue_size: 0
  enable_offload: True

  train:
    total_num_envs: null
    auto_reset: False
    ignore_terminations: False
    use_fixed_reset_state_ids: True
    max_episode_steps: 10

  eval:
    total_num_envs: null
    auto_reset: False
    ignore_terminations: False
    use_fixed_reset_state_ids: True
    max_episode_steps: 10

env.group_name:环境 worker 组的逻辑名称。

env.channel.name:进程间通信的共享内存通道名。

env.channel.queue_name:观测缓冲区队列名。

env.channel.queue_size:队列大小(0 表示不限制)。

env.enable_offload:启用环境侧的下放以降低内存占用。

env.train.total_num_envs:训练用的并行环境总数。

env.train.auto_reset:训练时当 episode 终止时自动重置环境。

env.train.ignore_terminations:训练时忽略 episode 终止(如果启用,episode 仅在达到 max_episode_steps 时结束)。

env.train.use_fixed_reset_state_ids:使用固定的 reset 状态 ID(false 则随机化)。GRPO 始终为 True,PPO 默认为 False。

env.train.max_episode_steps:训练时每个 episode 的最大步数。

env.eval.total_num_envs:评估用的并行环境总数。

env.eval.auto_reset:评估时当 episode 终止时自动重置环境。

env.eval.ignore_terminations:评估时忽略 episode 终止(如果启用,episode 仅在达到 max_episode_steps 时结束)。

env.eval.use_fixed_reset_state_ids:使用固定的 reset 状态 ID(false 则随机化)。GRPO 始终为 True,PPO 默认为 False。

env.eval.max_episode_steps:评估时每个 episode 的最大步数。

rollout#

rollout:
  channel:
    name: ${env.channel.name}
    queue_name: "action_buffer"
    queue_size: 0
  mode: "collocate"
  backend: "huggingface"
  enforce_eager: True
  enable_offload: True
  pipeline_stage_num: 2

rollout.channel.name:共享内存通道(继承自 env)。

rollout.channel.queue_name:动作缓冲区队列名。

rollout.channel.queue_size:队列大小。

rollout.mode:rollout 模式(collocate 表示**共享式**使用 GPU)。

rollout.backend:模型后端(huggingface、vllm)。

rollout.pipeline_stage_num:rollout 的流水线阶段数。

actor#

actor:
  channel:
    name: ${env.channel.name}
    queue_name: "replay_buffer"
    queue_size: 0
  training_backend: "fsdp"
  micro_batch_size: 8
  global_batch_size: 160
  enable_offload: True

  model:
    model_path: "/path/to/hf_model"
    model_type: "openvla_oft"
    action_dim: 7
    num_action_chunks: 8
    use_proprio: False
    unnorm_key: bridge_orig
    value_type: ${algorithm.reward_type}
    val_micro_batch_size: 8
    center_crop: True
    do_sample: False

    precision: "bf16"
    add_bias_linear: False
    add_qkv_bias: True
    vocab_size: 32000
    hidden_size: 4096
    policy_setup: "widowx_bridge"
    image_size: [224, 224]
    is_lora: True
    lora_rank: 32
    lora_path: /storage/models/oft-sft/lora_004000
    num_images_in_input: 1
    attn_implementation: "flash_attention_2"
    low_cpu_mem_usage: True
    trust_remote_code: True

  tokenizer:
    tokenizer_type: "HuggingFaceTokenizer"
    tokenizer_model: "/storage/download_models/Openvla-oft-SFT-libero10-trajall/"
    extra_vocab_size: 421
    use_fast: False
    trust_remote_code: True
    padding_side: "right"

  optim:
    lr: 1.0e-4
    value_lr: 3.0e-3
    adam_beta1: 0.9
    adam_beta2: 0.999
    adam_eps: 1.0e-05
    clip_grad: 10.0

actor.channel.name:共享内存通道(继承自 env)。

actor.channel.queue_name:回放缓冲区队列名。

actor.training_backend:训练后端(分布式 FSDP)。

actor.micro_batch_size:每张 GPU 的微批大小。

actor.global_batch_size:全局批大小(跨所有 GPU)。

actor.enable_offload:启用模型下放以降低内存占用。

模型配置:

actor.model.model_type:模型类型(openvla_oft)。

actor.model.action_dim:动作空间维度。

actor.model.num_action_chunks:每条序列的动作块数量。

actor.model.use_proprio:是否使用本体感知信息。

actor.model.unnorm_key:动作反归一化的键。

actor.model.value_type:价值函数类型(继承自 algorithm.reward_type)。

actor.model.val_micro_batch_size:价值函数计算的微批大小。

actor.model.center_crop:是否对输入图像做中心裁剪。

actor.model.do_sample:推理时是否采样。

actor.model.precision:数值精度(bf16/fp16/fp32)。

actor.model.add_bias_linear / add_qkv_bias:线性/QKV 是否加 bias。

actor.model.vocab_size / hidden_size:词表大小与隐藏维度。

actor.model.policy_setup:策略配置(widowx_bridge)。

actor.model.image_size:输入图像尺寸 [H, W]。

actor.model.is_lora / lora_rank / lora_path:是否使用 LoRA、秩与权重路径。

actor.model.megatron_checkpoint:模型 checkpoint 路径。

actor.model.num_images_in_input:输入的图像数量。

actor.model.attn_implementation:注意力实现(flash_attention_2)。

actor.model.low_cpu_mem_usage:低内存初始化。

actor.model.trust_remote_code:加载模型时信任远程代码。

分词器配置:

actor.tokenizer.tokenizer_type:分词器类型(HuggingFaceTokenizer)。

actor.tokenizer.tokenizer_model:分词器模型路径。

actor.tokenizer.extra_vocab_size:额外词表大小。

actor.tokenizer.use_fast:是否使用 fast 版本。

actor.tokenizer.trust_remote_code:信任远程代码。

actor.tokenizer.padding_side:填充方向(left/right)。

优化器配置:

actor.optim.lr:策略网络学习率。

actor.optim.value_lr:价值网络学习率。

actor.optim.adam_beta1/beta2/eps:Adam 超参数。

actor.optim.clip_grad:梯度裁剪阈值。

环境配置参考#

以下示例以 Libero-10 为例说明环境关键参数。

路径为

环境类型

env_type: libero
task_suite_name: libero_10

env_type:模拟器类型(libero 表示 Libero 基准)。

task_suite_name:任务集合(libero_10 表示 10 个任务的基准)。

Episode 配置

auto_reset: ${algorithm.auto_reset}
ignore_terminations: ${algorithm.ignore_terminations}
max_episode_steps: 512

auto_reset:episode 结束时是否自动重置(继承自 algorithm)。

ignore_terminations:训练时是否忽略终止(继承自 algorithm)。

max_episode_steps:每个 episode 的最大步数(复杂 Libero 任务通常取 512)。

奖励配置

use_rel_reward: true
reward_coef: 5.0

use_rel_reward:使用相对奖励(当前步与前一状态的差值)。

reward_coef:奖励缩放系数(如 5.0 强化奖励信号)。

随机化与分组

seed: 0
group_size: 1
use_fixed_reset_state_ids: True

seed:环境初始化随机种子(0 便于复现)。

group_size:每个分组的环境数(继承自 algorithm.group_size)。

use_fixed_reset_state_ids:是否使用固定 reset 状态(GRPO 为 True,PPO 默认 False)。

环境规模

total_num_envs: null

total_num_envs:总并行环境数用于训练或评估。

视频记录

video_cfg:
  save_video: true
  info_on_video: true
  video_base_dir: ${runner.logger.log_path}/video/train

video_cfg.save_video:训练时保存视频。

video_cfg.info_on_video:在视频上叠加训练信息。

video_cfg.video_base_dir:视频保存目录。

相机配置

init_params:
  camera_heights: 256
  camera_widths: 256

init_params.camera_heights:相机图像高度(像素)。

init_params.camera_widths:相机图像宽度(像素)。