开始使用 DVC
能够像跟踪代码一样跟踪大型数据集和机器学习模型,同时避开将其存储在 Git 中的所有限制,这将是多么酷啊?想象一下克隆一个仓库并立即在工作区看到数据集、检查点和模型。想象一下用 git checkout 在不到一秒钟的时间内切换到 100GB 文件的不同版本。
💫 DVC 就是你的"数据的 Git"!
初始化项目
开始之前,选择一个目录用于本指南。我们将在此处完成的所有操作都将包含在该目录中。
假设我们要从头开始构建一个 ML 项目。让我们首先创建一个 Git 仓库:
$ mkdir example-get-started
$ cd example-get-started
$ git init此目录名在我们的 example-get-started 仓库中使用。
在选定的目录内,我们将使用当前工作目录作为 DVC 项目。让我们通过在 Git 项目内运行 dvc init 来初始化它:
$ dvc init将创建一些 内部文件,这些文件应添加到 Git 中:
$ git status
Changes to be committed:
        new file:   .dvc/.gitignore
        new file:   .dvc/config
        ...
$ git commit -m "Initialize DVC"现在你已经准备好使用 DVC!
跟踪数据
在 已初始化的项目 目录内工作,让我们选择要处理的数据。我们将使用示例 data.xml 文件,尽管任何文本或二进制文件(或目录)都可以。首先运行:
$ dvc get https://github.com/iterative/dataset-registry \
          get-started/data.xml -o data/data.xml使用 dvc add 开始跟踪数据集文件:
$ dvc add data/data.xmlDVC 将有关添加文件的信息存储在名为 data/data.xml.dvc 的特殊 .dvc 文件中。这个小的、人类可读的元数据文件作为原始数据的占位符,用于 Git 跟踪。
接下来,运行以下命令来跟踪 Git 中的更改:
$ git add data/data.xml.dvc data/.gitignore
$ git commit -m "Add raw data"现在,关于数据的元数据 与源代码一起进行版本控制,而原始数据文件已添加到 .gitignore 中。
dvc add 将数据移动到项目 缓存,并将其 链接 回 工作区。.dvc/cache 将如下所示:
.dvc/cache/files/md5
└── 22
    └── a1a2931c8370d3aeedd7183606fd7f刚刚添加的 data.xml 文件的哈希值(22a1a29...)决定了上面显示的缓存路径。如果你检查 data/data.xml.dvc,也会在那里找到它:
outs:
  - md5: 22a1a2931c8370d3aeedd7183606fd7f
    path: data.xml存储和共享
你可以将 DVC 跟踪的数据上传到各种存储系统(远程或本地),这些系统被称为 "远程存储"。为了简单起见,本指南我们将使用"本地远程存储",它只是本地文件系统中的一个目录。
配置远程存储
在将数据推送到远程存储之前,我们需要使用 dvc remote add 命令进行设置:
$ mkdir /tmp/dvcstore
$ dvc remote add -d myremote /tmp/dvcstore$ mkdir %TEMP%/dvcstore
$ dvc remote add -d myremote %TEMP%\dvcstore上传数据
现在已配置了存储远程,运行 dvc push 来上传数据:
$ dvc pushdvc push 将本地缓存的数据复制到我们之前设置的远程存储中。远程存储目录应该如下所示:
.../dvcstore/files/md5
└── 22
    └── a1a2931c8370d3aeedd7183606fd7f通常,我们还希望使用 Git 跟踪导致数据更改的任何代码更改(git add、git commit 和 git push)。
检索数据
一旦 DVC 跟踪的数据和模型存储在远程,就可以在需要时使用 dvc pull 下载(例如在该项目的其他副本中)。通常,我们在 git pull 或 git clone 之后运行它。
现在让我们尝试一下:
$ dvc pull进行本地更改
接下来,假设我们从某些外部源获取了更多数据。我们将通过将数据集内容翻倍来模拟这一点:
$ cp data/data.xml /tmp/data.xml
$ cat /tmp/data.xml >> data/data.xml$ copy data\data.xml %TEMP%\data.xml
$ type %TEMP%\data.xml >> data\data.xml修改数据后,再次运行 dvc add 来跟踪最新版本:
$ dvc add data/data.xml现在我们可以运行 dvc push 将更改上传到远程存储,然后使用 git commit 来跟踪它们:
$ dvc push
$ git commit data/data.xml.dvc -m "Dataset updates"切换版本
一个常用的 工作流程是使用 git checkout 切换到一个分支或检出特定的 .dvc 文件修订版本,然后使用 dvc checkout 将数据同步到您的工作区:
$ git checkout <...>
$ dvc checkout返回数据集的先前版本
让我们回到数据的原始版本:
$ git checkout HEAD~1 data/data.xml.dvc
$ dvc checkout让我们提交它(这次无需执行 dvc push,因为数据集的这个原始版本已经保存):
$ git commit data/data.xml.dvc -m "Revert dataset updates"如您所见,DVC 从技术上讲本身并不是一个版本控制系统!它操作 .dvc 文件,其内容定义了数据文件版本。Git 已经用于版本控制您的代码,现在它还可以与您的数据一起进行版本控制。
遵循本指南
为了帮助您更好地理解和使用 DVC,我们提供了以下三个使用场景:数据管道、实验跟踪 和 模型管理。您可以任选其一,开始学习 DVC 如何帮助您“解决”该场景!
选择一条路径,进入它的第一章:
- 
数据管道 - 将 DVC 用作可复现的、以数据驱动的管道的构建系统。 
- 
实验管理 - 只需对代码进行简单插桩,即可轻松跟踪您的实验及其进展,并像软件工程师管理代码一样协作开展机器学习实验。 
- 
模型注册表 - 使用 DVC 模型注册表以可审计的方式管理模型的生命周期。轻松访问您的模型,并将模型注册表操作集成到 CI/CD 管道中,遵循 GitOps 最佳实践。