Skip to content

批量语法 ​

批量语法用于脚本工作区。Web 界面使用 form 模式,CLI 的 add 和 run --config 也会展开批量配置。

不适用场景:

  • yaml 模式:固定只生成一个配置任务
  • shell 模式:固定只生成一个 shell 任务

支持的三种写法 ​

1. Product ​

yaml
lr: 0.001 | 0.01 | 0.1
optimizer: adam | sgd

含义:

  • 所有候选值做笛卡尔积

结果:

text
3 × 2 = 6 tasks

2. Zip ​

yaml
seed: (1 | 2 | 3)
tag: (a | b | c)

含义:

  • 按位置一一配对

结果:

text
(1, a)
(2, b)
(3, c)

要求:

  • 所有 zip 参数长度必须一致

3. 数值区间 ​

yaml
epoch: 10:100:10

含义:

  • 展开为数值序列

结果:

text
10, 20, 30, ..., 90

区间不包含终点,与 Python 的 range 一致。

也支持:

yaml
x: 1:5

表示默认步长为 1。

混合使用 ​

yaml
lr: 0.001 | 0.01
optimizer: adam | sgd
seed: (1 | 2 | 3)
tag: (exp_a | exp_b | exp_c)
epoch: 10:30:10

总数计算:

text
Product: 2 × 2 × 2 = 8
Zip: 3
Total: 8 × 3 = 24

嵌套参数 ​

语法同样适用于嵌套字段:

yaml
training:
  lr: 0.001 | 0.01

model:
  hidden: 128 | 256

展开会保留原始键和字典结构:字面键 "a.b" 与嵌套的 a: {b: ...} 是两个独立字段,数字键和空字典也会保留。 模板类型校验和配置内容搜索也会分别处理这些字段。 列表整体作为固定值,其中的字符串不参与批量展开。

网格和树形表单会区分字段路径:嵌套字段显示为 a.b,字面点键显示为 ["a.b"],数字键与同名字符串键分别显示为 [1] 和 ["1"]。置顶和搜索结果中的编辑也会定位到原字段,空字符串键显示为 [""]。 列表输入支持 YAML 和 JSON 写法;例如 ["x | y"] 是固定列表,编辑或移开焦点时不会变成批量表达式。 表单会保留整数的完整精度,包括超过 9007199254740991 的值和键;列表中的整数也适用。 1.0、0.0 等字段保留浮点类型,编辑成 1.25 时不会被取整,其他字段的编辑也不会将它们改成整数。 批量预览中,悬停任务样本可查看展开后的 YAML,保留大整数、浮点类型、数字与字符串键的区别,以及尚未求值的插值表达式。

预览显示完整任务总数和前六个样本。所有候选值仍会校验;选择模板时,未展示的组合也会检查字段类型。预览只构造需要展示的完整配置,减少大批量配置的等待和内存占用。

单次批量展开最多允许 10000 个任务,超过上限会在展开前提示缩小范围。超大数值区间同样受此限制。 候选值包含无效插值等配置错误时,预览和创建接口会返回具体字段的错误说明。

生成后的落盘结果 ​

批量展开后,每个任务会得到自己的 config.yaml:

text
_pyruns_/<script>/tasks/<task_name>/
├─ task_info.json
├─ config.yaml
└─ run_logs/

每个任务里的 config.yaml 都是该任务独立的最终快照。

常见错误 ​

Zip 长度不一致 ​

yaml
seed: (1 | 2 | 3)
tag: (a | b)

会报错,因为 zip 长度不同。

YAML 根节点不是 mapping ​

yaml
- 1
- 2

Generator 只接受对象型根节点。

建议 ​

  • 参数很多时优先用 form 模式检查批量范围
  • 确认预览数量合理后再生成
  • 对于一次性脚本内容,直接使用 shell workspace,不要再回退到旧 args 思路