写点什么

零拷贝技术升级,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:002623

评论

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

怎么分辨企业转型是“真数字化”还是 “伪数字化”?

雨果

数字化转型

数据工程师越做越有成就感的7点经验分享

雨果

数据工程师

Solana上的结算协议龙头,Zebec潜力颇受看好

小哈区块

开源一夏 | 在 STM32L051 上使用 RT-Thread (二、无线温湿度传感器 之 CubeMX配置)

矜辰所致

开源 RT-Thread 8月月更 STM32L051

微服务、网关、服务发现/注册的正确打开方式

Java全栈架构师

Java 程序员 架构 微服务 程序人生

开源的价值观与文化的传递

开源社

#开源

AntDB基于WAL日志的DML数据闪回实现

亚信AntDB数据库

AntDB 国产数据库 AISWare AIDB

泄露了,Alibaba697页的MySQL应用实战与性能调优手册,太强了

Java编程日记

Java 编程 程序员 面试 架构师

C#/VB.NET 替换 PDF 文件上的现有图像

在下毛毛雨

C# .net PDF 替换图像

QCA9880 wallys 2×2 MIMO 802.11ac Mini PCIe 2,4GHz / 5GHz Designed for E

wallys-wifi6

乔布斯之后,下一代触控交互由一家中国公司重新定义

硬科技星球

从入门到高手,数据从业者成长一般经过哪些阶段?

雨果

数据工程师必备技能

量化交易合约机器人系统开发策略分析

薇電13242772558

量化策略

TiFlash 源码阅读(六)DeltaTree Index 的设计和实现分析

PingCAP

TiDB TiDB 源码解读

国产系统的不足或许可以靠小程序弥补

Geek_99967b

小程序

阿里最新的Spring Boot项目开发实战手册,掀起了项目实战变革狂潮

Java面试那些事儿

Java 编程 程序员 面试 架构师

Node 之父着急宣布Deno 将迎来重大变革,疑为针对最近大火的“Bun”

雨果

node.js

区块链带你避“坑”,电信诈骗退!退!退!

旺链科技

区块链 产业区块链 电信诈骗

Linux 6.0 第一个候选版本发布

雨果

Liunx

QCA9882 wallys 802.11AC 802.11AN wifi QCA9882 Module Wireless AC/AN MiniPCIE Standard Card

wallys-wifi6

QCA9882

数据结构——二叉树

工程师日月

8月月更

开源一夏 | 使用 JavaScript 将文本转换为文件

海拥(haiyong.site)

JavaScript GitHub 开源 前端 8月月更

OpenHarmony轻量设备Hi3861芯片开发板启动流程分析

OpenHarmony开发者

OpenHarmony

融会贯通,并行不悖 | 2022年8月《中国数据库行业分析报告》精彩抢先看

墨天轮

数据库 greenplum MPP 国产数据库 HTAP

少儿编程是智商税吗?不花钱让孩子赢在起跑线!

博文视点Broadview

美国商务部宣布:EDA等四项技术实施新的出口管制,8月15日生效!

雨果

芯片技术

JSON 之父:JavaScript 已经成为了进步的障碍

雨果

JavaScript

如何在企业数字化团队内部实现分析建模过程全要素的可获得与成果可复现

ModelWhale

团队协作 数字化转型 全要素场景 代码复现 金融场景

一文搞定架构思维,DFD 的结构化分析,只需明白这3点

老崔说架构

10种有用的Linux Bash_Completion 命令示例

华为云开发者联盟

Linux 后端 开发

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