在其他项目可以共享的位置配置项目的缓存,有助于避免文件重复,并可以减少不同数据位置之间的数据传输。
具体场景如下:
- 多个用户在一台机器上拥有同一个项目的副本。
- 不同的项目使用相同的数据,因此集中在本地存储是有意义的。
- 有一个共享的 NAS 驱动或存储服务器安装在网络上。
- 您需要在工作的机器和共享的 GPU 服务器之间无缝共享数据(用于训练 ML 模型)。
准备工作
在 DVC 项目外部创建一个目录,作为每个人的项目的共享缓存位置:
$ mkdir -p /home/shared/dvc-cache 复制代码
确保该目录具有适当的权限,以便您的所有同事都可以对其进行写入,并且可以读取其他人写入的缓存文件。 最直接的方法就是让所有用户成为同一个组的成员,并拥有该组拥有的共享缓存目录。
传输现有的缓存(可选)
如果您正在设置一个未使用本地缓存目录(默认为.dvc/cache
)的新的 DVC 项目,则可以跳过此部分。
如果您之前处理过 DVC 项目并希望将其现有缓存转移到共享缓存目录,您只需将其内容从旧位置移动到新位置:
$ mv .dvc/cache/* /home/shared/dvc-cache 复制代码
现在,确保缓存的目录和文件具有适当的权限,以便您的同事可以访问它们(假设他们的用户是同一个组的成员):
# 更改目录的访问权限 $ sudo find /home/shared/dvc-cache -type d -exec chmod 0775 {} ; # 更改文件的访问权限 $ sudo find /home/shared/dvc-cache -type f -exec chmod 0444 {} ; # 更改DVC缓存目录的用户名和用户组 $ sudo chown -R myuser:ourgroup /home/shared/dvc-cache/ 复制代码
配置共享缓存
工作空间外的缓存目录称为外部缓存。 使用 dvc cache dir
将共享缓存设置为我们之前创建的目录,并使用 dvc config cache
对其进行配置:
$ dvc cache dir /home/shared/dvc-cache 复制代码
$ dvc config cache.shared group $ dvc config cache.type symlink 复制代码
通过dvc config
命令,首先,告诉 DVC 为新的缓存文件设置组权限,用户组下的用户都可以共享 DVC 缓存。然后,我们启用符号链接(symlinks
)以避免将副本从外部缓存复制到工作空间。
注意: 启用软/硬链接会导致 DVC 保护链接数据(跟踪数据文件成为只读链接),因为就地编辑它们会损坏缓存数据。详情请查看
dvc unprotect
。运行dvc unprotect
保证工作空间中的目标文件或目录在物理上与缓存文件“取消链接”,并且可以安全地更新。
提交缓存配置
如果您使用的是 Git,请将项目的配置文件的更改进行提交(通常是.dvc/config
):
$ git add .dvc/config $ git commit -m "config external/shared DVC cache"