DVC 使用指南:如何共享 DVC 缓存?

简介: 具体场景如下:多个用户在一台机器上拥有同一个项目的副本。不同的项目使用相同的数据,因此集中在本地存储是有意义的。有一个共享的 NAS 驱动或存储服务器安装在网络上。您需要在工作的机器和共享的 GPU 服务器之间无缝共享数据(用于训练 ML 模型)

在其他项目可以共享的位置配置项目的缓存,有助于避免文件重复,并可以减少不同数据位置之间的数据传输。

具体场景如下:

  • 多个用户在一台机器上拥有同一个项目的副本。
  • 不同的项目使用相同的数据,因此集中在本地存储是有意义的。
  • 有一个共享的 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"


相关文章
|
消息中间件 存储 缓存
ZMQ之共享键值缓存(克隆模式)
ZMQ之共享键值缓存(克隆模式)
ZMQ之共享键值缓存(克隆模式)
|
缓存 数据安全/隐私保护 Windows
windows 技巧篇-清除共享地址访问缓存信息,共享路径临时访问用户切换方法
windows 技巧篇-清除共享地址访问缓存信息,共享路径临时访问用户切换方法
623 0
windows 技巧篇-清除共享地址访问缓存信息,共享路径临时访问用户切换方法
|
缓存 Java
【Java 并发编程】线程共享变量可见性 ( volatile 关键字使用场景分析 | MESI 缓存一致性协议 | 总线嗅探机制 )
【Java 并发编程】线程共享变量可见性 ( volatile 关键字使用场景分析 | MESI 缓存一致性协议 | 总线嗅探机制 )
373 0
|
缓存 NoSQL Java
聊聊从web session的共享到可扩展缓存设计
先从web session的共享说起   许多系统需要提供7*24小时服务,这类系统肯定需要考虑灾备问题,单台服务器如果宕机可能无法立马恢复使用,这必定影响到服务。这个问题对于系统规模来说,从小到大可能面临的难度会相差很大。
922 0
|
缓存 Windows SQL
|
1月前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
|
1月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
74 6
|
6天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
7天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构

热门文章

最新文章