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
会将位于 url
中 path
处的目标文件或目录复制到当前工作目录。(类似于 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 等其他支持的位置下载数据。
成功运行此命令后,位于 url
和 path
组合所指定位置的数据将被创建于当前工作目录,并保留其原始文件名。
选项
-
-o <path>
,--out <path>
- 指定工作区中希望放置下载文件或目录的目标路径(替代使用当前工作目录)。该命令会自动创建路径中指定的所有目录。 -
--rev <提交版本>
- 仓库的提交哈希、分支或标签名称等(任何Git 版本),用于指定从中下载文件或目录的版本。若未指定此选项,默认使用默认分支中的最新提交。 -
-j <数字>
,--jobs <数字>
- DVC 从远程下载数据时使用的并行任务数量。默认值为4 * cpu_count()
。使用更多任务可能会加快操作速度。注意:可通过dvc remote modify
的jobs
配置选项在源仓库中设置默认值。 -
-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
(位于 其配置文件中)拉取该文件。
同样的示例也适用于原始数据或中间产物。
示例:获取一个普通的 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 get
的url
是.
。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