在 GitHub 上编辑

共享实验

请观看下方视频,了解如何使用 VS Code 的 DVC 扩展共享实验,或继续阅读以深入了解。

点击播放即表示您同意 YouTube 的 隐私政策服务条款

自动共享

默认情况下,你的实验仅存储在运行它们的位置。要自动共享所有实验信息,你需要具备以下条件:

  • Git 远程仓库(例如 GitHub)
  • DVC 远程存储,用于存储你希望 DVC 跟踪的大型产物文件
  • 连接到该 Git 远程仓库的 DVC Studio 项目

要自动共享你的实验,请运行:

$ dvc studio login

配置完成后,DVC 将会:

  • 实时指标和图表 发送到 DVC Studio
  • 将实验代码和元数据推送到你的 Git 仓库
  • 将数据、模型及其他产物文件推送到你的 DVC 远程存储

继续阅读,了解如何精细控制共享的信息内容及共享时机。

实时指标和图表

执行 dvc studio login 将设置你的 访问令牌,以自动发送实时指标和图表。

你可以将实时实验结果发送到 DVC Studio,这样就能在任何正在运行的实验中查看指标和图表的中间结果。要开始向 DVC Studio 共享实时指标,请设置你的 访问令牌

在实验运行期间,你将在 DVC Studio 中看到如下所示的实时更新(任何有项目访问权限的人都能看到):

Live metrics in DVC Studio

Live plots in 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 pushdvc 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 pushgit pullgit 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 rundvc 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 Studio Shared Experiments

在你的工作区中,若要查看已推送的实验,可在 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 分支,并创建拉取请求将其合并到主分支中:

DVC Studio Create a New Branch

或者,在你的工作区中,若要像共享其他 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 Studio Remove selected rows

若要通过命令行删除已推送的实验,请使用 dvc exp remove -g

$ dvc exp remove -g origin unwet-jinn
Removed experiments: unwet-jinn
内容

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

在 GitHub 上编辑

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

Discord 聊天