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 branch
或 dvc 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。