如何用DVC推送外部数据到远程并直接拉取更新至原外部目录?
实现步骤与配置方案
1. 配置SSH远程存储
先在你的DVC项目中添加并配置目标SSH远程:
# 添加SSH远程(命名为ssh_remote,可自定义) dvc remote add ssh_remote ssh://example.com/path/to/storage # 按需配置SSH认证信息(比如指定用户名或密钥文件) dvc remote modify ssh_remote user your_ssh_username dvc remote modify ssh_remote keyfile ~/.ssh/id_rsa # 可选:设为默认远程,后续命令无需重复指定远程名称 dvc remote default ssh_remote
2. 跟踪外部数据集(仅生成.dvc文件)
使用dvc add --external跟踪工作区外的目录,此操作仅在当前工作区生成.dvc文件,不会复制数据到工作区:
dvc add --external /external-to-workspace/dataset
执行后,工作区会生成dataset.dvc文件,其中outs字段指向绝对路径/external-to-workspace/dataset——这是确保拉取时直接更新原外部目录的核心配置。
3. 推送数据集版本到远程
将外部数据集的当前版本上传到SSH远程:
# 若未设默认远程,需添加参数:dvc push -r ssh_remote dvc push
DVC会将/external-to-workspace/dataset的内容同步到ssh://example.com/path/to/storage,并通过本地.dvc文件记录版本元数据。
4. 拉取更新到原外部目录
当需要同步远程的最新版本时,直接执行:
# 若未设默认远程,需添加参数:dvc pull -r ssh_remote dvc pull
由于.dvc文件已指定外部目录的绝对路径,DVC会直接将远程数据更新到/external-to-workspace/dataset,不会在工作区创建副本。
关键注意事项
- 避免使用
dvc import-url --to-remote:该命令设计用于导入外部URL数据到工作区,拉取时默认生成本地副本,不符合你的需求。 - 确认
.dvc文件的outs路径:如果生成的.dvc文件中outs是相对路径,手动修改为绝对路径/external-to-workspace/dataset即可。 - 权限要求:执行命令的用户需对
/external-to-workspace/dataset有读写权限,同时拥有SSH远程存储的读写权限。
内容的提问来源于stack exchange,提问作者Md Hasan Shahriar
相关产品推荐
相关产品推荐

