在 GitHub 上编辑

get

将由 DVC 或 Git 跟踪的文件或目录下载到当前工作目录。

另请参阅我们的 dvc.api.open() Python API 函数。

概要

usage: dvc get [-h] [-q | -v] [-o <path>] [--rev <commit>]
               [--show-url] [-j <number>] [-f]
               [--config <path>] [--remote <name>]
               [--remote-config [<name>=<value> ...]]
               url path

positional arguments:
  url              Location of DVC or Git repository to download from
  path             Path to a file or directory within the repository

描述

提供一种简便方式,用于从任意 DVC 仓库(例如数据集、中间结果、机器学习模型)或 Git 仓库(例如源代码、小型图像/其他文件)中下载文件或目录。dvc get 会将位于 urlpath 处的目标文件或目录复制到当前工作目录。(类似于 wget,但针对的是代码仓库。)

参见 dvc list,了解如何浏览仓库内容以查找可下载的文件或目录。

请注意,与 dvc import 不同,此命令不会跟踪已下载的文件(不会创建 .dvc 文件)。因此,它无需在现有的 DVC 项目中运行。

url 参数指定包含数据源的 DVC 或 Git 仓库地址,支持 HTTP 和 SSH 协议(例如 [user@]server:project.git)。url 也可以是本地文件系统路径(包括当前项目,例如 .)。

path 参数指定要下载的文件或目录(支持被追踪目录内的路径)。该路径应相对于仓库根目录(当 url 为本地路径时支持绝对路径)。请注意,被 DVC 追踪的目标必须存在于仓库的 dvc.yaml.dvc 文件中。

DVC 仓库应配置一个包含目标数据的 dvc remote default 才能正常工作。唯一的例外是本地仓库,DVC 将首先尝试从其 缓存 中复制数据。

参见 dvc get-url,了解如何从 S3、SSH、HTTP 等其他支持的位置下载数据。

成功运行此命令后,位于 urlpath 组合所指定位置的数据将被创建于当前工作目录,并保留其原始文件名。

选项

  • -o <path>, --out <path> - 指定工作区中希望放置下载文件或目录的目标路径(替代使用当前工作目录)。该命令会自动创建路径中指定的所有目录。

  • --rev <提交版本> - 仓库的提交哈希、分支或标签名称等(任何Git 版本),用于指定从中下载文件或目录的版本。若未指定此选项,默认使用默认分支中的最新提交。

  • -j <数字>--jobs <数字> - DVC 从远程下载数据时使用的并行任务数量。默认值为 4 * cpu_count()。使用更多任务可能会加快操作速度。注意:可通过 dvc remote modifyjobs 配置选项在源仓库中设置默认值。

  • -f, --force - 当使用 --out 指定本地目标文件或目录时,如果这些路径已存在,操作将失败。使用此标志会强制执行操作,导致命令覆盖现有的本地文件/目录。

  • --show-url - 不下载文件或目录,仅打印目标数据的存储位置(URL)。如果 path 是 Git 跟踪的文件,则忽略此选项。

  • --config <path> - 指向 配置文件 的路径,该文件将与目标仓库中的配置合并。

  • --remote <name> - 在目标仓库中设置为默认的 dvc remote 名称。

  • --remote-config [<name>=<value> ...] - 要与远程存储配置(默认或通过 --remote 指定的远程)合并的 dvc remote 配置选项。

  • -h, --help - 打印使用说明/帮助信息,然后退出。

  • -q, --quiet - 不向标准输出写入任何内容。如果没有问题则以 0 退出,否则以 1 退出。

  • -v, --verbose - 显示详细的跟踪信息。

示例:获取一个由 DVC 跟踪的模型

请注意,只要安装了 DVC,dvc get 可以在文件系统的任意位置使用。

我们可以使用 dvc get 从托管在 GitHub 上的 入门示例仓库(一个 DVC 项目)下载最终生成的模型文件:

$ dvc get https://github.com/iterative/example-get-started model.pkl
$ ls
model.pkl

请注意,model.pkl 文件实际上并不存在于源 Git 仓库的 根目录中。相反,它在 dvc.yaml 文件中作为 train 阶段的 输出(在 outs 字段中)被导出。随后,DVC 将从源 DVC 项目的 dvc pull 从源 DVC 项目的 dvc remote default(位于 其配置文件中)拉取该文件。

像本示例这样从 DVC 仓库下载二进制文件的一个推荐用途是:将机器学习模型放入一个封装应用中,该应用作为 ETL 流水线,或作为 HTTP/RESTful API(网络服务),按需提供预测。通过结合 DVC 与 CI/CD 工具,这一过程可以实现自动化。

同样的示例也适用于原始数据或中间产物。

示例:获取一个普通的 Git 跟踪文件

我们也可以使用 dvc get 来获取存在于任何 Git 仓库中的任意文件或目录。

$ dvc get https://github.com/schacon/cowsay install.sh
$ ls
install.sh

示例:获取由 DVC 跟踪的文件的存储 URL

我们可以使用 dvc get --show-url 来获取我们的快速入门示例仓库中最终模型文件实际存储位置的地址:

$ dvc get --show-url \
          https://github.com/iterative/example-get-started model.pkl
https://remote.dvc.org/get-started/c8/d307aa005d6974a8525550956d5fb3

remote.dvc.org/get-started 是一个 HTTP dvc remote,而 c8d307... 是该文件的哈希值。

示例:比较不同版本的数据或模型

dvc get 提供了 --rev 选项,用于指定从仓库的哪一个Git 提交中下载文件或目录。它还提供了 --out 选项,用于指定在工作区中放置目标数据的位置。结合这两个选项,我们可以实现一些通过常规的 git checkout + dvc checkout 流程无法完成的操作——例如,请参见我们《快速入门》中的在不同版本间切换章节。

让我们再次使用快速入门示例仓库,就像上一个示例一样。但这一次,先克隆该仓库,以便在 DVC 项目内部查看 dvc get 的实际运行效果。

$ git clone https://github.com/iterative/example-get-started
$ cd example-get-started

如果你熟悉我们在快速入门(本示例所使用的项目)中的项目,你可能会记得,我们训练第一个模型版本的章节对应于仓库中的 baseline-experiment 标签。类似地,bigrams-experiment 指向一个改进后的模型(使用二元语法训练)。如果我们想同时“检出”这两个版本的模型怎么办?dvc get 提供了一种简单的方法来实现这一点:

$ dvc get . model.pkl --rev baseline-experiment \
                      --out model.monograms.pkl

请注意,上面提供给 dvc geturl.dvc get 在特殊情况下接受文件系统路径作为源仓库的“URL”。

现在,model.monograms.pkl 文件包含旧版本的模型。要获取最新版本,我们使用类似的命令,但加上 -o model.bigrams.pkl--rev bigrams-experiment(甚至可以不加 --rev,因为该标签本身就指向最新的模型版本)。实际上,在这种情况下,使用 dvc pull 并指定相应的阶段为目标就足够了,这样会将文件下载为 model.pkl。然后我们可以重命名它以明确其变体:

$ dvc pull train
$ mv model.pkl model.bigrams.pkl

就这样!现在我们在工作区中有两个模型文件,名称不同,并且当前未被 Git 跟踪:

$ git status
...
Untracked files:
  (use "git add <file> ..." to include in what will be committed)

	model.bigrams.pkl
	model.monograms.pkl

示例:为默认远程设置 AWS 配置文件

$ dvc get https://github.com/iterative/example-get-started-s3 data/prepared --remote-config profile=myprofile

示例:设置默认远程

$ dvc get https://github.com/iterative/example-get-started-s3 data/prepared --remote myremote