前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零拷贝技术升级,V6D 让数据传输更高效

零拷贝技术升级,V6D 让数据传输更高效

作者头像
深度学习与Python
发布2023-04-30 18:12:58
2430
发布2023-04-30 18:12:58
举报
文章被收录于专栏:深度学习与python

作者 | Sabri Bolkar

译者 | 刘雅梦

策划 | 丁晓昀

零拷贝和内存数据管理器 Vineyard(v6d) 最近发布了 0.13.2 版本,为 Python/C++ 开发和 Kubernetes 部署带来了改进的功能。它是作为 CNCF 沙箱项目 来进行维护的,并提供了分布式操作符,可用于在集群节点内或跨集群节点共享不可变数据。V6d 特别适用于大型(分片)数据集上(例如大语言和图模型)的深度网络训练。它的开发目前由阿里巴巴的一个工程团队领导。

零拷贝 和 内存 数据分布是许多实时应用程序的核心问题。从图像处理管道到深度学习模型,如 LLM 和图挖掘算法等,许多数据处理应用程序都需要从许多独立的进程中获取大量数据。在机器学习工程中,随着深度网络变得越来越大,模型参数的分布要求访问共享状态和数据,这一瓶颈变得越来越明显了。作为一个早期项目,V6d 旨在为此类用例提供一个高级 API。

实时应用程序的架构通常利用内存中的键 - 值存储 / 缓存(例如 etcd、Memcached、Redis)来存储和交换频繁访问的数据。根据服务类型,工程团队必须考虑这些工具带来的相关权衡。V6d 由两个主要组件组成:Apache Arrow Plasma 派生共享内存数据管理器(在一个节点内)和由 etcd 支持的元数据服务器(在不同节点之间)。虽然 Plasma 派生服务允许零拷贝数据传输,但 etcd 服务处理数据属性的全局分布(可能是分区的)。

V6d 将自己置于 Python 社区中。在某种程度上,可以考虑将 Python 原生的多进程 shared_memory 扩展到多台机器,以实现不可变的 blob。V6d 提供了两个不同的 Python 客户端接口 IPCClient 和 RPCClient,分别用于操作本地和远程对象。两个客户端 API 都允许基于对象 ID 的统一数据插入和检索模式。然而,v6d 不会在集群节点之间自动移动数据,除非被指示这样做,因为这种操作的高网络成本很高。

我们可以提供了一个可以在本地机器上运行的简单示例,让我们先从创建本地 v6d 实例开始:

代码语言:javascript
复制
python -m vineyard --socket /tmp/vineyard.sock --size 16733650944

作为第一步,让我们展示如何利用 Python 的原生 API。为此,我们将使用 NumPy 创建一个 10k 分辨率的虚拟 RGB 图像,并使用 shared_memory() 接口来快速共享它:

代码语言:javascript
复制
import numpy as npfrom multiprocessing import shared_memoryshape_, dtype_ = (3, 10000, 10000), np.uint8array_to_share = np.random.randint(0, high=255, size=shape_, dtype=dtype_)# 创建共享内存shm = shared_memory.SharedMemory(create=True, size=array_to_share.nbytes)array_shm = np.ndarray(shape_, dtype=array_to_share.dtype, buffer=shm.buf)array_shm[:] = array_to_share[:] # Here we need to copy as we use existing array# 在另一个过程中使用共享内存名称、大小和类型信息来检索数据existing_shm = shared_memory.SharedMemory(name=shm.name)array_retrieved = np.ndarray(shape=shape_, dtype=dtype_, buffer=existing_shm.buf)

在这里,我们可以使用 v6d 执行相同的操作:

代码语言:javascript
复制
import vineyardclient = vineyard.connect('/tmp/vineyard.sock')array_id = client.put(array_to_share)# 在另一个进程中检索之前的 array_to_sharearray_retrieved = client.get(array_id)

如上所示,该 API 非常易于使用,并将数据类型和数组形状传播到检索到的对象中。由于是通用 数组协议(又名缓冲协议),NumPy 接口还接受对 PyTorch、TensorFlow 和 MxNet 张量的零拷贝操作。除此之外,v6d 在 Pandas/Arrow 数据框架上进行了相同的操作。有关该库集成的更多详细信息,请访问 相关的文档页面。也可以在 网页中 找到机器学习培训教程的示例。

对于多节点设置,V6d 允许通过 Python API 和 Helm 图表在 Kubernetes 集群上部署 vineyard 操作。官方文档中还提供了更详细的架构概述。

原文链接:

https://www.infoq.com/news/2023/03/zero-copy-v6d/

声明:本文为 InfoQ 翻译,未经许可禁止转载。

点击底部阅读原文访问 InfoQ 官网,获取更多精彩内容!

今日好文推荐

十年“屎山”终重构,但 QQ选用了微软 Teams 放弃的 Electron

开源巨星红帽裁员、瞄准“昂贵”老员工,CEO:最艰难的决定,被裁员工将获得超高额遣散费

ChatGPT写21个程序,16个有漏洞:离取代程序员还远着呢!

华为投入数千人实现自主可控ERP;SpaceX星舰爆炸了,马斯克:祝贺!谷歌合并两大人工智能部门,加速力战ChatGPT|Q资讯

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 InfoQ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档