在 GitHub 上编辑

exp save

将当前工作区的状态捕获为一个DVC 实验

另请参阅dvc exp run,它包含此操作。

概要

usage: dvc exp save [-h] [-q | -v] [-R] [-f]
                   [--json] [-n <name>]
                   [-I path] [-m <message>]
                   [targets [targets ...]]

positional arguments:
  targets        Limit DVC caching to these stages or .dvc files.
                 Using -R, directories to search for stages or .dvc
                 files can also be given.

描述

将您的项目快照保存为一个实验,而无需用不必要的提交、分支、目录等污染您的 Git 仓库。

这使您在对项目进行任何更改后(例如重新训练 ML 模型),能够快速开始跟踪、比较绘图共享实验。

除非您显式使用 --include-untracked-I)指定未跟踪的文件,否则仅保存由 Git 或 DVC 跟踪的文件(见下方示例)。

使用 dvc exp show 查看 实验。成功的实验可通过 dvc exp branchdvc exp apply 恢复并提交至 Git 仓库,从而 持久化;无需的实验可通过 dvc exp remove 清除

选项

  • -n <name>, --name <name> - 为此实验指定一个唯一名称。否则将自动生成默认名称,例如 urban-sign

    实验名称会暴露在环境变量 DVC_EXP_NAME 中。

  • -I <path>, --include-untracked <path> - 指定要包含在实验中的未跟踪文件或目录。此选项可多次使用。

  • -m <message>, --message <message> - 保存实验时使用的自定义消息。若未提供,则使用 dvc: commit experiment {hash}

  • -R, --recursive - 通过搜索每个目标目录及其子目录中的阶段(在dvc.yaml中)或.dvc文件来确定要缓存的文件。如果 targets 中没有目录,此选项无效。

  • -f, --force - 如果实验已存在,则覆盖它。

  • -h, --help - 打印使用/帮助信息并退出。

  • -q--quiet - 不向标准输出写入任何内容。如果所有阶段均已最新或全部成功执行,则以退出码 0 结束;否则以退出码 1 结束。阶段中定义的命令仍可自由输出信息,不受此标志影响。

  • -v, --verbose - 显示详细的跟踪信息。

示例

本示例基于 我们的入门指南,您可在其中找到实际源代码。

假设我们通过添加新数据(data/new.xml)、新代码(src/extratrees.py)以及修改训练脚本(src/train.py)对仓库进行了更改。在运行dvc add data/new.xml后,仓库状态如下:

$ git status
On branch main

Changes not staged for commit:
	modified:   data/.gitignore
	modified:   src/train.py
Untracked files:
	data/new.xml.dvc
	src/extratrees.py

运行实验后(本例中由于示例项目使用DVC 流水线,我们可通过dvc repro实现),我们可以使用dvc metrics show(或其他方式)检查结果。我们尚未准备好进行 Git 提交,但仍希望将结果保存到仓库中:

dvc exp save --name extra-trees \
             -I data/new.xml.dvc -I src/extra_trees.py

我们使用-I将新(未跟踪)文件包含在实验中。

现在我们可以清除工作区中的所有更改并移除未跟踪文件:

$ git reset --hard
$ rm data/new.xml data/new.xml.dvc src/extratrees.py

我们使用dvc exp show查看刚刚保存的实验:

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 Experiment                  Created        avg_prec   roc_auc   prepare.split   prepare.seed   featurize.max_features   featurize.ngrams   train.seed   train.n_est   train.min_split   data/data.xml   data/features   data/prepared   model.pkl   src/evaluate.py   src/featurization.py   src/prepare.py   src/train.py
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 workspace                   -                 0.925   0.94602   0.2             20170428       200                      2                  20170428     50            0.01              22a1a29         f35d4cc         153aad0         fb021d7     759095a           e0265fc                f09ea0c          c3961d7
 main                        Nov 02, 2022      0.925   0.94602   0.2             20170428       200                      2                  20170428     50            0.01              22a1a29         f35d4cc         153aad0         fb021d7     759095a           e0265fc                f09ea0c          c3961d7
 └── d0f234c [extra-trees]   12:11 PM        0.92707   0.94612   0.2             20170428       200                      2                  20170428     50            0.01              ced660e         f35d4cc         153aad0         27473f2     759095a           e0265fc                f09ea0c          6537232
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

该实验的 avg_prec/roc_auc 更高,因此我们希望恢复它,可使用dvc exp apply

$ dvc exp apply extra-trees
Changes for experiment 'extra-trees' have been applied to your current workspace.
$ git status
On branch main

Changes not staged for commit:
	modified:   data/...
	modified:   dvc.lock
	modified:   evaluation/...
	modified:   src/train.py

Untracked files:
	data/new.xml.dvc
	src/extratrees.py

所有更改,包括未跟踪文件,均已恢复至工作区。

请参阅我们的入门指南,获取更多关于如何使用实验的示例。

示例:指定要保存的目标

假设仓库结构如下:

$ tree
.
├── dir_a
│   └── dvc.yaml
└── dir_b
    └── dvc.yaml

dvc repro dir_a/dvc.yaml 将重新运行 dir_a/dvc.yaml 中的阶段。如果 dir_b/dvc.yaml 中的阶段尚未运行,dvc exp save 将失败,因为这些阶段的输出不存在。运行 dvc exp save dir_a/dvc.yaml 将忽略 dir_b/dvc.yaml 中的阶段,仅缓存 dir_a/dvc.yaml 中阶段的更改。

dir_b 中 Git 跟踪文件(包括 dir_b/dvc.yaml 本身)的更改将作为实验的一部分被保存,因为整个仓库已提交至 Git。

内容

🐛 发现问题?告诉我们!或者修复它:

在 GitHub 上编辑

有疑问?加入我们的聊天,我们会为您提供帮助:

Discord 聊天