跳转到内容

自动搜索参数 ​

自动搜索用于批量运行多组参数,并按同一验证指标比较结果。先用单次训练确认数据、图和评价目标,再把已明确的参数范围交给搜索工具,可以减少手动修改配置与整理试验的工作。

确定搜索目标 ​

使用场景 ​

您遇到的问题搜索可以帮助什么搜索前先完成什么
世界模型可以训练,但学习率取值不确定比较几个学习率的预测误差固定数据划分、验证长度与训练轮数
多步预测需要权衡精度与训练开销比较少量推演长度或批量组合明确业务响应时间和内存上限
策略行为约束强度难以确定比较控制回报与动作偏移固定世界模型、奖励和动作范围
多台计算卡可供试验使用并行执行独立候选测量单个试验的资源需求

例如倒立摆 BC 世界模型已能正常训练,希望在 0.0001、0.0003、0.001 三个学习率中选择一组。可以固定多步 MAE 为选模指标,让搜索依次完成三个试验,再检查误差和训练耗时。本页以这项任务说明操作流程,取值需在自己的数据上比较。

先在 SDK 源码根目录安装可选依赖:

bash
pip install -e ".[tune]"

准备 config.yaml 作为基础训练配置,sweep.yaml 描述搜索目标、范围和资源。只比较世界模型时,基础配置可以只保留世界模型阶段;若还保留策略阶段,每个试验也会执行其配置的流程,应计入总成本。

定义参数范围 ​

示例:搜索世界模型学习率 ​

把下面的内容保存为 sweep.yaml。示例使用 CPU 顺序运行三组学习率,可按下一节改为加速器:

yaml
sweep:
  sweep_id: venv-lr
  objective:
    - stage: venv
      metric: best_metric
      direction: minimize
  search:
    algorithm: grid
    n_trials: 3
    seed: 42
  pruner: {type: none}
  resources:
    backend: cpu
    per_trial: {cpu: 2, gpu: 0}
    max_concurrent: 1
  params:
    - path: training.stages.venv.hyperparameters.optimizer.lr
      type: categorical
      choices: [0.0001, 0.0003, 0.001]

objective.stage 指向基础配置中的阶段名,best_metric 使用该阶段实际选模指标。本例需在阶段中使用误差指标并按最小值选模,因此搜索方向为 minimize;搜索奖励最大值时,目标与阶段选模方向应相应一致。

grid 遍历给定候选,choices 是待比较的具体值。n_trials 是总尝试数量,包含失败和剪枝的试验。首次搜索可以不启用剪枝,让少量候选完成相同训练预算。

在基础配置中声明搜索位置 ​

以下 training 片段需要合入包含图与数据的完整任务配置:

yaml
training:
  stages:
    - name: venv
      algorithm: venv.bc
      hyperparameters:
        optimizer:
          lr: 0.0003
      validation:
        rollout:
          enabled: true
          horizon: 50
          force_final: true
        selection:
          metric: val/rollout/mae
          mode: min

搜索路径按阶段的 name 定位,training.stages.venv 表示名为 venv 的阶段,使用列表下标不能替代阶段名称。路径还要沿用户 YAML 中已声明的映射逐级查找,因此本例显式写出 optimizer 和 lr,不能只依赖算法默认值补齐这层结构。

若改用 REVIVE-P,监督学习率路径应为 training.stages.venv.hyperparameters.bc.optimizer.lr,基础配置也需声明对应的 bc.optimizer。参数位置与优先级见查看生效参数。

安排试验与资源 ​

设置并发与设备 ​

先估计一个试验的内存、CPU 和设备需求,再增加并发。使用 CUDA 时,可将上例 resources 替换为:

yaml
# sweep 下的 resources 片段
resources:
  backend: cuda
  gpu_ids: [0, 1]
  per_trial: {cpu: 2, gpu: 1.0}
  placement: spread
  max_concurrent: 2

per_trial.cpu 包含试验主进程,所以应满足 data.num_workers <= per_trial.cpu - 1。per_trial.gpu 表示每个试验使用的设备份额;小于 1 可以在同卡上安排多个 worker,但仍需确认显存足够。当前单个试验不支持跨多张卡训练,也不支持基于 Ray 的多机执行。

双环境任务还要在每个试验的资源额度内安排 A/B:加速器调度每个试验分配一张本地卡,分支依次执行;CPU 资源足够时可并行。实际模式见阶段的 dual_environment/execution.json,详细配置见双环境训练。

共享重复的数据准备 ​

多组试验使用相同数据与图时,可以共享加载、派生列、划分和归一化结果,减少重复准备。以下配置放在 sweep 下:

yaml
shared_data:
  mode: required
  storage: mmap
  cache_scope: sweep
  reuse: true
  integrity: content
  cleanup: keep

默认 mode: auto 会在兼容时共享,不兼容时回退为各试验独立准备。required 要求搜索不改变数据与图的准备约定;搜索 data.path、train_ratio、split_mode、split_seed、转移关系或函数节点定义时,不能强制复用同一份准备结果。

比较模型超参数时,通常固定 data.split_seed。检查不同训练随机性可搜索 training.seed,它与数据划分种子相互独立。

预览并执行搜索 ​

开始前完成安装与授权。在线搜索会按计划试验数申请一次授权, 续跑时保持原 sweep_id、搜索定义和预算;修改试验预算时使用新的 sweep_id。 包含 controller.* 阶段的任务需使用离线许可证。

从任务目录执行,基础配置需通过 data.path 等字段指向已准备的数据:

bash
revive validate --config config.yaml --show-defaults
revive-sweep --config config.yaml --sweep sweep.yaml --plan

预览列出搜索路径、目标、试验次数、资源申请和各阶段训练/验证规模。它不读取训练数据、不创建 study 或启动训练;依赖数据才能确定的规模会标为待确定。应先确认基础配置能够独立完成训练,再提交批量搜索。

检查计划后执行:

bash
revive-sweep --config config.yaml --sweep sweep.yaml

执行会在运行根目录保存 plan.json。实际并发由启动时资源检查决定;若搜索包含训练预算字段,应按各试验的生效配置统计成本。继续已有 study 时,剩余尝试数量以执行时读取的记录为准。

比较并使用结果 ​

结果位于 <training.log_dir>/<sweep_id>/,其中 optuna.db 保存搜索记录。各阶段在 <domain>/_tune_<stage>/ 汇总:

文件用来做什么
metrics/leaderboard.csv查看候选参数和目标指标
metrics/comparison.md、comparison.json核对数据、奖励、验证定义、预算与资源是否可比
config/best_config.yaml使用最优参数覆盖后的任务配置

domain 为 venv 或 policy,控制器同样归入 policy 域;stage 为阶段名称。只有成功完成且目标值有限的试验才能作为结果候选,没有可选试验时不会生成最佳配置。

先处理失败,再比较指标 ​

试验记录会区分完成、配置问题、数据问题、数值异常、资源不足、取消和剪枝,并保留错误原因。失败不会被替换成一个低分。若候选普遍因同一错误失败,先修复基础配置或资源设置,再继续搜索。

比较报告只在已知且一致的数据与评价条件内排序。不同组的原始目标值需要先对齐条件,不能直接按数值判断哪组更好。还应查看业务约束、动作分布与耗时,选模指标之外的要求可按业务验收检查。

将候选配置用于正式训练 ​

将选中的 best_config.yaml 复制回任务配置目录,例如命名为 config.best.yaml,核对数据、自定义函数和阶段依赖的相对路径,然后执行:

bash
revive validate --config config.best.yaml --show-defaults
revive train --config config.best.yaml --run-id selected-001

用新的 run ID 保留正式结果,按照评估与选择模型检查选中模型,再用预留测试数据评价最终方案。手动对比的记录方法见比较实验结果,完整命令参数见命令行参考。