写点什么

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

  • 2023-04-27
    北京
  • 本文字数:1512 字

    阅读完需:约 5 分钟

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

零拷贝和内存数据管理器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 客户端接口IPCClientRPCClient,分别用于操作本地和远程对象。两个客户端 API 都允许基于对象 ID 的统一数据插入和检索模式。然而,v6d不会在集群节点之间自动移动数据,除非被指示这样做,因为这种操作的高网络成本很高。

 

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

 

python -m vineyard --socket /tmp/vineyard.sock --size 16733650944
复制代码

 

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

 

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 执行相同的操作:

 

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 APIHelm图表在 Kubernetes 集群上部署 vineyard 操作。官方文档中还提供了更详细的架构概述。


原文链接:

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


相关阅读:

2023-04-27 08:002735

评论

发布
暂无评论
发现更多内容

高速路二维码报警定位系统开发,二维码报警定位功能

13530558032

大数据下单集群如何做到2万+规模?

华为云开发者联盟

大数据 集群

不想搞Java了,4年经验去面试10分钟结束,现在Java面试为何这么难

Java架构师迁哥

Python基础知识(二)

Python基础

架构师训练营结业作业

superman

关于手机里的IP地址,你不得不知道的“秘密”

脑极体

活着

GongTeng95

2020年7月云主机性能评测报告

博睿数据

云计算 测试 公有云 评测 排行榜

2020年8月北京BGP机房网络质量评测报告

博睿数据

测试 机房 评测 排行榜 IDC

一次压缩引发堆外内存过高的教训

AI乔治

Java kafka JVM

Spring Cloud 微服务实践(2) - Gateway重试机制

xiaoboey

maven Spring Cloud Gateway modules 重试

算法大赛评委亲授通关秘籍,报名倒计时!

易观大数据

UML练习1-食堂就餐卡系统设计

博古通今小虾米

UML

危与机并存 保险业如何走好线上线下业务并举转型之路?

博睿数据

运维 监控 保险 AIOPS 系统

Java 基础语法

InfoQ_34a83d636158

Spring Cloud 微服务实践(0) - 开篇闲话

xiaoboey

微服务 Spring Cloud Spring Boot Spring Framework

LeetCode题解:622. 设计循环队列,使用数组,JavaScript,详细注释

Lee Chen

大前端 LeetCode

血的教训!千万别在生产使用这些 redis 指令

redis 学习 编程 程序员

Electronjs

Neil

Java 大前端 Electron 客户端开发

架构师训练营大作业

叮叮董董

网上赌博输了怎么办?上岸戒赌是唯一的选择

jdxj

网上赌博输了怎么办 网上赌博玩快三输了怎办 网上玩快三输了怎么回血 网赌输了怎么戒赌

实践案例丨云连接CC实现跨区域多VPC与线下IDC Server互联

华为云开发者联盟

云服务 IDC

python——自定义序列类

菜鸟小sailor 🐕

一次旅途

GongTeng95

CentOS 7 安装 Python 3.7

wong

Python

Spring Cloud 微服务实践(1) - 用Initializr初始化

xiaoboey

Spring Cloud Eureka Gateway Hoxton

USDT支付系统开发技术方案,数字货币承兑商支付

13530558032

在线游戏,如何把握住1个亿以上的DAU?

博睿数据

运维 监控 AIOPS 系统 用户体验

如何进步神速

Sean

学习 个人成长

数字货币量化交易,量化对冲搬砖系统开发

13530558032

直播倒计时|30分钟带你解锁“技术写作”新技能

有只小耳朵

技术 写作 直播 技术创作 RTC征文大赛

零拷贝技术升级,V6D让数据传输更高效_大数据_Sabri Bolkar_InfoQ精选文章