零拷贝技术升级,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 客户端接口 IPCClient 和 RPCClient,分别用于操作本地和远程对象。两个客户端 API 都允许基于对象 ID 的统一数据插入和检索模式。然而,v6d 不会在集群节点之间自动移动数据,除非被指示这样做,因为这种操作的高网络成本很高。
我们可以提供了一个可以在本地机器上运行的简单示例,让我们先从创建本地 v6d 实例开始:
python -m vineyard --socket /tmp/vineyard.sock --size 16733650944
作为第一步,让我们展示如何利用 Python 的原生 API。为此,我们将使用 NumPy 创建一个 10k 分辨率的虚拟 RGB 图像,并使用 shared_memory() 接口来快速共享它:
import numpy as np
from multiprocessing import shared_memory
shape_, dtype_ = (3, 10000, 10000), np.uint8
array_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 vineyard
client = vineyard.connect('/tmp/vineyard.sock')
array_id = client.put(array_to_share)
# 在另一个进程中检索之前的 array_to_share
array_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资讯
微信扫码关注该文公众号作者