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

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

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

注意:命令 dvc stage 可用于创建和列出 Stage 。

dvc.yaml 文件可以使用 Git 进行版本控制。

这些文件使用 YAML 1.2 文件格式。 我们鼓励您熟悉它,以便您可以自己修改、编写或生成 Stage 和 Pipeline。


阶段(Stages)

stages 列表包含一个或多个用户定义的 stages。 这是一个名为 transpose 的简单 stages:

stages:
  transpose:
    cmd: ./trans.r rows.txt > columns.txt
    deps:
      - rows.txt
    outs:
      - columns.txt
复制代码


另请参阅 dvc stage add,一个用于在 dvc.yaml 中编写 Stage 的辅助命令。

Stage 中最重要的部分是它执行的终端命令(cmd 字段)。 这就是 DVC 在 Stage 再现时运行的内容(请参阅 dvc repro)。

如果命令读取输入文件,则这些文件(或它们的目录位置)可以定义为依赖项(deps)。 DVC 会检查它们是否已经改变来决定该 Stage 是否需要重新执行(请参阅 dvc status))。

如果它写入文件或目录,则可以将它们定义为输出(outs)。 DVC 将继续跟踪它们(类似于使用 dvc add)。

请参阅完整的 Stage 条目规范


参数依赖(Parameter dependencies)

Parameters是一种特殊类型的 Stage 依赖。 它们由一个 name/value 对组成,可在 YAML、JSON、TOML 或 Python 参数文件(默认为 params.yaml)中发现。 具体示例如下:

stages:
  preprocess:
    cmd: bin/cleanup raw.txt clean.txt
    deps:
      - raw.txt
    params:
      - threshold
      - passes
    outs:
      - clean.txt
复制代码


这允许多个 Stage 依赖于共享结构化文件的值(可以直接使用 Git 对其进行版本控制)。 另请参见 dvc params diff

指标和图表输出

常见的输出一样,指标和图表文件由 Stage 的 cmd 生成。 但是,它们的目的是不同的。 通常,它们包含用于评估流水线流程的元数据。 具体示例如下:

stages:
  build:
    cmd: python train.py
    deps:
      - features.csv
    outs:
      - model.pt
    metrics:
      - accuracy.txt:
          cache: false
    plots:
      - auc.json:
          cache: false
复制代码


其中,cache: false 在这里是特有的,因为它们足够小,可以让 Git 直接进行版本控制。

dvc metricsdvc plots命令可帮助您显示和比较指标和图表。


模板(Templating)-DVC 2.0

这是 DVC 2.0 中的新功能(具体请参见 dvc version

dvc.yaml 支持模板(Templating)格式以在 YAML 结构中插入来自不同来源的值。 这些来源可以是 parameters filesdvc.yaml 中定义的 vars

请注意,此参数化功能仅支持通过手动编辑 dvc.yaml ,并且与 dvc run 不兼容。

假设我们有一个params.yaml(默认参数文件)具有以下的内容:

models:
  us:
    threshold: 10
    filename: 'model-us.hdf5'
复制代码


这些值可以在 dvc.yaml 中的任何位置使用 ${} 替换表达式:

stages:
  build-us:
    cmd: >-
      python train.py
      --thresh ${models.us.threshold}
      --out ${models.us.filename}
    outs:
      - ${models.us.filename}:
          cache: true
复制代码


DVC 将跟踪 ${} 中使用的简单参数值(数字、字符串等)(它们将由 dvc params diff 列出)。

或者,可以将替换值列为顶级 vars,如下所示:

vars:
  - models:
      us:
        threshold: 10
  - desc: 'Reusable description'
stages:
  build-us:
    desc: ${desc}
    cmd: python train.py --thresh ${models.us.threshold}
复制代码


请注意,来自 vars 的值不会像参数一样被跟踪。

要加载其他参数文件,请按所需顺序将它们列在顶部的 vars 中,例如:

如果有的话,参数文件路径将根据 wdir 进行评估。

vars:
  - params.json
  - myvar: 'value'
  - config/myapp.yaml
复制代码


请注意,默认的params.yaml文件总是首先加载(如果存在的话)。

还可以使用 : 冒号指定要从其他参数文件中包含的内容:

vars:
  - params.json:clean,feats
stages:
  featurize:
    cmd: ${feats.exec}
    deps:
      - ${clean.filename}
    outs:
      - ${feats.dirname}
复制代码


还支持 Stage 特有的值,带有内部 vars。 您还可以在本地加载其他参数文件。 例如:

stages:
  build-us:
    vars:
      - params.json:build
      - model:
          filename: 'model-us.hdf5'
    cmd: python train.py ${build.epochs} --out ${model.filename}
    outs:
      - ${model.filename}
复制代码


DVC 会尽可能在每个范围内合并来自 params 文件和 vars 的值。 例如,{"grp": {"a": 1}}{"grp": {"b": 2}} 合并,但不与{"grp": {"a": 7}}

⚠️ 本地vars的已知限制:

  • wdir 不能使用本地 vars 中的值,因为 DVC 首先使用工作目录(从 vars 中列出的 params 文件加载任何值)。
  • 目前,foreach 也与本地vars 不兼容。

替换表达式支持以下形式:

${param} # Simple
${param.key} # Nested values through . (period)
${param.list[0]} # List elements via index in [] (square brackets)
复制代码


要在 dvc.yaml 中按字面意思使用表达式(即 DVC 不会将其替换为值),请使用反斜杠对其进行转义,例如 \${....


foreach 阶段-DVC 2.0

这是 DVC 2.0 中的新功能(具体请参见 dvc version

您可以使用以下语法在单个 dvc.yaml 条目中定义多个 Stage 。 一个 foreach 元素接受一个列表或字典,其中包含要迭代的值,而 do 包含常规 Stage 字段(cmdouts等)。

这是一个简单的例子:

stages:
  cleanups:
    foreach: # List of simple values
      - raw1
      - labels1
      - raw2
    do:
      cmd: clean.py "${item}"
      outs:
        - ${item}.cln
复制代码


dvc repro 时,列表中的每个 item 都会通过替换表达式${item}中的值来展开到自己的 Stage 。item 的值附加到每个 Stage 名称后的@,其格式为:stage名@item的值foreach 语法生成的最终的 Stage 保存到 dvc.lock,如下所示:

schema: '2.0'
stages:
  cleanups@labels1:
    cmd: clean.py "labels1"
    outs:
      - path: labels1.cln
  cleanups@raw1:
    cmd: clean.py "raw1"
    outs:
      - path: raw1.cln
  cleanups@raw2:
    cmd: clean.py "raw2"
    outs:
      - path: raw2.cln
复制代码


对于包含复杂值的列表(例如字典),替换表达式可以使用${item.key} 形式。 Stage 名称将附加一个从零开始的索引。 例如:

stages:
  train:
    foreach:
      - epochs: 3
        thresh: 10
      - epochs: 10
        thresh: 15
    do:
      cmd: python train.py ${item.epochs} ${item.thresh}
复制代码


dvc.lock文件如下所示:

# dvc.lock
schema: '2.0'
stages:
  train@0:
    cmd: python train.py 3 10
  train@1:
    cmd: python train.py 10 15
复制代码


相关文章
|
7月前
|
机器学习/深度学习 数据可视化 计算机视觉
YOLOv5改进 | 2023Neck篇 | 轻量级跨尺度特征融合模块CCFM(附yaml文件+添加教程)
YOLOv5改进 | 2023Neck篇 | 轻量级跨尺度特征融合模块CCFM(附yaml文件+添加教程)
737 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起不来(一直处于创建中)
127 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配置文件
170 0
|
4月前
|
JSON Kubernetes 数据格式
k8s集群yaml文件方式迁移
k8s集群yaml文件方式迁移