共享实验
请观看下方视频,了解如何使用 VS Code 的 DVC 扩展共享实验,或继续阅读以深入了解。
自动共享
默认情况下,你的实验仅存储在运行它们的位置。要自动共享所有实验信息,你需要具备以下条件:
- Git 远程仓库(例如 GitHub)
- DVC 远程存储,用于存储你希望 DVC 跟踪的大型产物文件
- 连接到该 Git 远程仓库的 DVC Studio 项目
要自动共享你的实验,请运行:
$ dvc studio login
配置完成后,DVC 将会:
继续阅读,了解如何精细控制共享的信息内容及共享时机。
实时指标和图表
执行 dvc studio login
将设置你的 访问令牌,以自动发送实时指标和图表。
你可以将实时实验结果发送到 DVC Studio,这样就能在任何正在运行的实验中查看指标和图表的中间结果。要开始向 DVC Studio 共享实时指标,请设置你的 访问令牌。
在实验运行期间,你将在 DVC Studio 中看到如下所示的实时更新(任何有项目访问权限的人都能看到):
参见 DVC 配置,了解如何启用/禁用实时指标,以及如何配置不同的 DVC Studio URL 或 Git 仓库;或者查阅 DVC Studio 关于[实时实验]的指南,获取更多关于设置、查看和对比的信息。
推送实验
dvc studio login
会配置 DVC 以 自动推送实验。
dvc exp push
会推送 Git 可上传至 GitHub 等远程服务器的 实验 提交记录,但这些提交不会出现在用户界面中(因此不会污染你的仓库),并且可以在不影响项目其他部分的情况下被清理。
为了理解 dvc exp push
的工作方式,我们来对比推送一个 持久化 提交的情况。对于普通的 Git 提交,你会使用 git push
将其上传到 Git 远程仓库,并使用 dvc push
将对应的数据上传到 DVC 远程存储。
┌────────────────┐ ┌────────────────┐
├────────────────┤ │ DVC remote │ Remote locations
│ Git remote │ │ storage │
│ │ ├────────────────┤
└────────────────┘ └────────────────┘
▲ ▲
│ │
git push dvc push
git pull dvc pull
│ │
▼ ▼
┌────────────────┐ ┌────────────────┐
│ Code and │ │ Data │
│ metafiles │ │ (cached) │ Local project
└────────────────┘ └────────────────┘
dvc exp push
和 dvc exp pull
会根据需要处理 Git 和 DVC 远程仓库之间的同步:
┌────────────────┐ ┌────────────────┐
├────────────────┤ │ DVC remote │ Remote locations
│ Git remote │ │ storage │
│ │ ├────────────────┤
└────────────────┘ └────────────────┘
▲ ▲
│ dvc exp push │
│ dvc exp pull │
▼ ▼
┌─────────────────┐ ┌────────────────┐
│ Code and │ │ Data │
│ metafiles │ │ (cached) │ Local project
└─────────────────┘ └────────────────┘
DVC 实验 与你的 Git 仓库相关联,但会被常规的 Git 操作如 git push
、git pull
和 git clone
忽略。你可以使用 dvc exp push
上传已完成的实验。这不仅会推送指标和图表,还会推送代码以及 DVC-缓存 文件(数据和模型),以便你可以 拉取 实验,将其变为 持久化 状态,并从 Git 仓库中复现实验。例如,在最简单的情况下,将实验推送到名为 origin
的 Git 远程仓库:
$ dvc exp push origin
如果你不知道 Git 远程仓库,请使用 git remote -v
检查,或参阅 故障排查 以解决相关问题。
默认情况下,DVC 还会共享由 DVC 跟踪的缓存数据,这需要远程存储(例如 Amazon S3 或 SSH)。添加 --no-cache
标志可排除共享缓存数据。
默认情况下,dvc exp push origin
将推送所有基于当前 Git 提交的实验,但你可以将特定实验作为参数指定,或使用标志来选择要推送的不同实验集合。
要在 dvc exp run
或 dvc exp save
结束时自动推送实验,请将配置选项 exp.auto_push
设置为 true
:
$ dvc config exp.auto_push true
或使用 环境变量 DVC_EXP_AUTO_PUSH
。
默认情况下,实验将被推送到名为 origin
的远程仓库。要更改默认值,请设置配置选项 exp.git_remote
或 环境变量 DVC_EXP_GIT_REMOTE
。
查找已推送的实验
你可以在 DVC Studio 中查看已推送的实验。在那里,你可以通过创建 Git 分支使某个实验变为持久化,或者从你的 Git 远程仓库中删除它:
在你的工作区中,若要查看已推送的实验,可在 dvc exp list
命令中提供 Git 远程仓库名称。
$ dvc exp list origin
refs/tags/baseline-experiment:
cnn-32
cnn-64
dvc exp list origin
会基于你当前的提交列出远程实验。你可以使用 --all-commits
(-A
) 列出所有实验,或添加其他任何受支持的选项。
拉取实验
要下载已推送的实验,请使用 dvc exp pull
(需指定 Git 远程仓库和实验名称)。
$ dvc exp pull origin
这会将所有必要的文件和数据(来自 Git 和 DVC 远程仓库)下载到你的项目中。
添加 --no-cache
标志可排除从 DVC 远程仓库拉取数据。
默认情况下,dvc exp pull origin
将拉取所有基于当前 Git 提交的实验,但你可以将特定实验作为参数指定,或使用标志来选择要拉取的不同实验集合。
保留实验
DVC 实验在常规 Git 工作流之外运行,以便更快迭代并避免污染你的仓库历史记录,但你可以轻松地将最有前景的实验重新引入常规 Git 工作流。你可以将 DVC Studio 中的任意已推送实验转换为持久化的 Git 分支,并创建拉取请求将其合并到主分支中:
或者,在你的工作区中,若要像共享其他 Git 提交一样共享单个实验,可使用 dvc exp branch
从实验创建一个 Git 分支,然后像任何 Git 分支一样共享它。
$ dvc exp branch quare-zips
Git branch 'quare-zips-branch' has been created from experiment 'quare-zips'.
$ git checkout quare-zips-branch
Switched to branch 'quare-zips-branch'
$ git push origin quare-zips-branch
如果仅需共享代码和元数据(如参数和指标),则推送到 Git 即可满足需求。
你可能还有由 DVC 跟踪的缓存数据、模型等。要共享这些内容,请使用 dvc push
将它们推送到远程存储(例如 Google Drive 或 NAS)。
$ dvc push
如果你不想创建新的 Git 分支,而是希望直接在当前 Git 分支上提交实验,可以将实验结果带回工作区。
删除已推送的实验
当你分享越来越多的实验时,DVC Studio 和 Git 远程仓库可能会因实验引用过多而变得杂乱。
你可以在 DVC Studio 中删除实验:
若要通过命令行删除已推送的实验,请使用 dvc exp remove -g
:
$ dvc exp remove -g origin unwet-jinn
Removed experiments: unwet-jinn