DVC 使用指南:项目结构中dvc.yaml文件详解(下)

简介: 您可以通过在一个或多个 dvc.yaml 文件(或流水线文件)中定义各个阶段(Stage)来构建数据科学或机器学习流水线(Pipeline)。 Stage 相互连接时形成 Pipeline (形成依赖关系图,具体请见: dvc dag)。

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 statusdvc repro等命令视为已更改。 默认 为false
meta (可选的) 可以使用此字段手动添加任意元数据。 支持任何 YAML 内容。 meta 内容被 DVC 忽略,但它们对于直接读取或写入 .dvc 文件的用户进程可能有意义。
desc (可选的) 此 Stage 的用户描述。 这不会影响任何 DVC 操作。
live (可选的) Dvclive 配置字段

dvc.yaml 文件也支持 # 号注释 ,如:# the comments is demo

请注意,我们维护一个 dvc.yamlschema  可供 VSCode 或  PyCharm 等编辑器使用,目的是为了启用自动语法验证和自动完成。

请参阅如何合并冲突

输出(output)子字段

其中包括 .dvc 文件 output 条目 中的部分字段。

字段 描述
cache 是否缓存此文件或目录(默认为true)。 请参阅 dvc add--no-commit 选项参数。
remote (可选的) 用于pushing/fetching的远程存储的名称。
persist dvc repro 运行时是否应保留输出文件/目录(默认为falsedvc 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 checkoutdvc 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中发生了变化。

常规的依赖项和所有形式的输出项(包括 metricsplots 文件)也在 dvc.lock 中,包括一个内容哈希字段(md5etagchecksum)。

每个参数文件名下也列出了完整的参数依赖项(包括键和值)(在params下)。 templated dvc.yaml 文件,实际值写入了dvc.lock(没有${}表达式)。

至于 foreach 阶段,扩展了各个 Stage(不保留foreach 结构)。

相关文章
|
7月前
|
机器学习/深度学习 数据可视化 计算机视觉
YOLOv5改进 | 2023Neck篇 | 轻量级跨尺度特征融合模块CCFM(附yaml文件+添加教程)
YOLOv5改进 | 2023Neck篇 | 轻量级跨尺度特征融合模块CCFM(附yaml文件+添加教程)
731 1
|
3月前
|
JSON Kubernetes API
深入理解Kubernetes配置:编写高效的YAML文件
深入理解Kubernetes配置:编写高效的YAML文件
|
6月前
|
存储 运维 Serverless
函数计算产品使用问题之在YAML文件中配置了环境变量,但在PHP代码中无法读取到这些环境变量,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
|
2月前
|
Kubernetes Docker Perl
k8s常见故障--yaml文件检查没有问题 pod起不来(一直处于创建中)
k8s常见故障--yaml文件检查没有问题 pod起不来(一直处于创建中)
124 1
|
2月前
ingress相关yaml文件报错且相关资源一切正常解决方法
ingress相关yaml文件报错且相关资源一切正常解决方法
ingress相关yaml文件报错且相关资源一切正常解决方法
|
5月前
|
运维 Kubernetes Serverless
Serverless 应用引擎使用问题之s.yaml文件中如何使用外部环境变量
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
5月前
|
存储 缓存 运维
函数计算产品使用问题之如何将外部环境变量放到s.yaml文件中使用
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
4月前
|
机器学习/深度学习 计算机视觉 Python
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
深度学习项目中在yaml文件中定义配置,以及使用的python的PyYAML库包读取解析yaml配置文件
154 0
|
4月前
|
JSON Kubernetes 数据格式
k8s集群yaml文件方式迁移
k8s集群yaml文件方式迁移