DVC 还可以对直接提供给 foreach
的字典进行迭代,从而产生两个可用的替换表达式:${key}
和${item}
。 前者用于 Stage 名称:
stages: build: foreach: uk: epochs: 3 thresh: 10 us: epochs: 10 thresh: 15 do: cmd: python train.py '${key}' ${item.epochs} ${item.thresh} outs: - model-${key}.hdfs 复制代码
dvc.lock
文件如下所示:
# dvc.lock schema: '2.0' stages: build@uk: cmd: python train.py 'uk' 3 10 outs: - path: model-uk.hdfs md5: 17b3d1efc339b416c4b5615b1ce1b97e build@us: ... 复制代码
重要的是,来自 参数文件 的字典也可以用于foreach
阶段:
stages: mystages: foreach: ${myobject} # From params.yaml do: cmd: ./script.py ${key} ${item.prop1} outs: - ${item.prop2} 复制代码
注意,此功能目前与 模板 不兼容。
Stage 条目
这些是每个Stage接受的字段:
字段 | 描述 |
cmd |
(必须的) Stage 执行的一个或多个命令(可能包含单个值或列表)。 命令按顺序执行,直到所有命令都完成或其中一个失败(请参阅 dvc repro )。 |
wdir |
stage命令要在其进行运行的工作目录(相对于文件的位置)。其他字段中的任何路径也基于此工作目录。默认为. (文件的位置)。 |
deps |
此 Stage 的依赖路径列表(相对于wdir )。 |
outs |
此 Stage 的输出路径列表(相对于wdir )。 这些可以包含某些可选的 子字段。 |
params |
要从params.yaml (在wdir 中)跟踪的参数依赖键(字段名称)列表。 该列表还可能包含其他参数文件名,以及要在他们之中进行跟踪的参数名称的子列表。 |
metrics |
指标文件 列表,以及是否缓存此指标文件(默认情况下为true )(可选)。 请参阅 dvc run 的--metrics-no-cache (-M ) 选项。 |
plots |
图表指标 列表,以及可选的默认配置(匹配 dvc plots modify 命令参数选项的子字段),以及此图表文件是否被缓存(默认为 true )。 请参阅 dvc run 的--plots-no-cache 参数选项。 |
frozen |
这个阶段是否因重现而冻结 |
always_changed |
此阶段是否被 dvc status 和 dvc repro 等命令视为已更改。 默认 为false |
meta |
(可选的) 可以使用此字段手动添加任意元数据。 支持任何 YAML 内容。 meta 内容被 DVC 忽略,但它们对于直接读取或写入 .dvc 文件的用户进程可能有意义。 |
desc |
(可选的) 此 Stage 的用户描述。 这不会影响任何 DVC 操作。 |
live |
(可选的) Dvclive 配置字段 |
dvc.yaml
文件也支持 #
号注释 ,如:# the comments is demo
。
请注意,我们维护一个 dvc.yaml
schema 可供 VSCode 或 PyCharm 等编辑器使用,目的是为了启用自动语法验证和自动完成。
请参阅如何合并冲突。
输出(output
)子字段
字段 | 描述 |
cache |
是否缓存此文件或目录(默认为true )。 请参阅 dvc add 的--no-commit 选项参数。 |
remote |
(可选的) 用于pushing /fetching 的远程存储的名称。 |
persist |
dvc repro 运行时是否应保留输出文件/目录(默认为false :dvc repro 启动时会删除输出 |
checkpoint |
(可选的) 设置为 true 让 DVC 知道此输出与 checkpoint 实验 相关联。 这些输出将恢复到它们在 dvc exp run 处的最后一个缓存版本,并且在 Stage 执行期间也“持久化”。 |
desc |
(可选的) 此输出的用户描述。 这不会影响任何 DVC 操作。 |
⚠️ 请注意,使用 dvc.yaml
中的 checkpoint
字段与 dvc repro
不兼容。
dvc.lock
文件
避免编辑这些文件。 DVC 将为您创建和更新它们。
为了记录流水线的状态并帮助跟踪其输出,DVC 对于每个 dvc.yaml
将维护一个 dvc.lock
文件。 他们的目的包括:
- 当 Stage 定义或其依赖关系发生变化时,允许 DVC 检测。此类状况将使 Stage 无效,需要对其进行重新生产(参见
dvc status
)。 - 跟踪流水线的中间和最终输出---类似于
.dvc
文件。 - 需要多个 DVC 命令才能运行,例如:
dvc checkout
或dvc get
。
具体示例如下:
schema: '2.0' stages: features: cmd: jupyter nbconvert --execute featurize.ipynb deps: - path: data/clean md5: d8b874c5fa18c32b2d67f73606a1be60 params: params.yaml: levels.no: 5 outs: - path: features md5: 2119f7661d49546288b73b5730d76485 size: 154683 - path: performance.json md5: ea46c1139d771bfeba7942d1fbb5981e size: 975 - path: logs.csv md5: f99aac37e383b422adc76f5f1fb45004 size: 695947 复制代码
dvc.lock
中再次列出了 Stage ,以便了解它们的定义是否在 dvc.yaml
中发生了变化。
常规的依赖项和所有形式的输出项(包括 metrics 和 plots 文件)也在 dvc.lock
中,包括一个内容哈希字段(md5
、etag
或 checksum
)。
每个参数文件名下也列出了完整的参数依赖项(包括键和值)(在params
下)。 templated dvc.yaml
文件,实际值写入了dvc.lock
(没有${}
表达式)。
至于 foreach
阶段,扩展了各个 Stage(不保留foreach
结构)。