控制外部依赖的跟踪版本

Control tracked version of external dependency

我正在尝试为具有不同标记版本的数据集的机器学习数据设置 DVC 存储库。我用类似的东西来做到这一点:

$ cd /raid/ml_data  # folder on a data drive
$ git init
$ dvc init
$ [add data]
$ [commit to dvc, git]
$ git tag -a 1.0.0
$ [add or change data]
$ [commit to dvc, git]
$ git tag -a 1.1.0

我有多个项目,每个项目都需要引用此数据集的某个版本。问题是我不知道如何设置这些项目来引用特定版本。我可以通过以下方式跟踪回购的 HEAD

$ cd ~/my_proj  # different drive than the remote
$ mkdir data
$ git init
$ dvc init
$ dvc remote add -d local /raid/ml_data  # add the remote on my data drive
$ dvc cache dir /raid/ml_data/.dvc/cache  # tell DVC to use the remote cache
$ dvc checkout
$ dvc run --external -d /raid/ml_data -o data/ cp -r /raid/ml_data data

这让我获得了最新版本的数据集,符号链接到我的 data 文件夹中,但是如果我想让一些项目使用 1.0.0 版本而一些项目使用 1.1.0 版本,还是其他版本?或者就此而言,如果我将数据集更新为 2.0.0 但不希望我现有的项目必须跟踪 HEAD 而是保留它们设置时使用的版本?

对我来说重要的是不要创建我的数据集的大量本地副本,因为 /home 驱动器比 /raid 驱动器小得多,而且其中一些数据集很大。

我认为您正在寻找 data access 命令集。

在您的特定情况下,dvc import 有意义:

$ dvc import /raid/ml_data data

如果您想获取最新版本 (HEAD)。然后您将能够使用 dvc update 命令更新它(例如,如果 2.0.0 已发布)。

$ dvc import /raid/ml_data data --rev 1.0.0

如果您想将其“修复”到特定版本。

避免复制

还要确保为第二个项目设置 symlinks,如 Large Dataset Optimization:

中所述
$ dvc config cache.type reflink,hardlink,symlink,copy

(有配置修饰符 --global--local--system 一次为所有人设置此设置,或仅为一个项目设置,等等)

查看详细说明here.


总的来说,这是一个很棒的设置,看起来你几乎一切都正确。请不要犹豫,跟进 and/or 在此处创建其他问题 - 我们会帮助您。