Python 大规模数据格式,用于在 AWS 上分布式写入、读取和存储

问题描述 投票:0回答:1

我正在尝试找出使用传统 Python 数据格式在 AWS 上写入、读取和存储数据的最佳方法。从我的各种谷歌搜索中,我无法找到用于添加操作的 Big O 表示法运行时的最终列表。我能找到的最好的东西是流行文件格式的文本概述,作者得出的结论是没有一种格式涵盖所有用例。

我的用例如下:

  • 我正在多个 GPU 上生成一堆固定长度的嵌入(NumPy 或 PyTorch 数组),因此在多线程上下文中,我想快速将这些嵌入插入到单个(或分片)大文件中
    [理想情况下 O( 1)插入时间]
  • 我想使用键读出特定的嵌入
    [所以理想情况下是 O(1) 读取时间]
  • 如果这意味着改善读/写时间,我愿意放弃空间效率
  • 最终,我想将数据存储在 AWS 上,因此如果文件可以轻松地分片为 1GB 块,那就太好了

我正在处理的数据集可能有 200 万到 800 万行(这意味着将有 2M 到 8M 个键)。我现在正在考虑的文件格式是:

  • .npy
  • .hd5
  • .镶木地板
  • .csv

在我当前的工作流程中,我保存了单独的 NPY 文件,这绝对是解决我的问题的分布式问题的解决方法。但是,当我必须进行递归上传/下载时,将所有数据传入和传出 AWS 就变得很麻烦。

如果您有关于最佳方法的建议,我们将不胜感激!与上面类似,我也很好奇如果我想保存的数据是 JSON 对象,最好的格式是什么。

python numpy csv parquet hdf5
1个回答
0
投票

目前还不清楚您的应用程序到底是什么,以及为什么您想要一次访问这些嵌入内容。大多数嵌入应用(例如 RAG 类型工作流程)都涉及将嵌入存储在称为向量数据库的专用数据库中,该数据库针对执行近似最近邻搜索进行了优化,通常会返回多个结果。

如果您的目标是尽快从远程磁盘访问数据,我强烈建议直接使用某种形式的数据库。这些文件格式当然有其用途,但您很可能最终会花费更多时间在 S3 之上滚动您自己的数据库(听起来您正在使用),而不是解决您的实际问题。

此外,值得一提的是,当涉及到如何表达性能问题时,您的请求也有点令人困惑。 O(1) 很好,并且与存储/数据库实现本身相关,但网络开销可能很大,特别是如果您确实一次访问这些嵌入向量的话。如果您想要任何类型的性能,您将需要非常低的延迟或批量访问记录。

进一步明确您的需求可能会对您有所帮助。如果您有其他信息或疑虑,请随时回复我的评论或编辑您的原始问题。

© www.soinside.com 2019 - 2024. All rights reserved.