0

我的情况:

  • 对大数据来说相当陌生。请温柔一点,期待天真。
  • 在许多(1000 多个)单独的云作业中生成训练数据。
  • 每个作业都会生成少量数据点;一个数据点是一组匹配的 Nd 张量。
  • 张量本身必须由 C++ 代码生成。

我想以一种可以在训练时快速加载到 numpy 数组中的格式序列化这些数据点。我目前最好的猜测是在 C++ 端使用自定义 parquet 适配器将这些张量序列化为 parquet 表。这种方法的优点:

  • 列式存储对填充数据(我有很多)产生了很好的压缩。
  • 似乎是一种很常见的格式。
  • Pyarrow在某些条件下提供无复制拼花 -> numpy 转换,所以我可以做类似的事情pyarrow.parquet.read_table("my/tensor/1.parquet").reshape(...)
  • 由于每个块(每个云作业中的一个)都独立于所有其他块而存在,因此应该在训练中直接流式传输我的数据集。我不必通过将它们全部放在一起并以其他格式重新组合来进行预处理。

缺点

  • 我不能直接将张量序列化为 C++ 中的张量对象;我必须编写自己的 C++ 张量序列化镶木地板适配器并在训练加载后重塑。

Petastorm/Unischema 似乎是一种直接将张量序列化为 Parquet 的潜在吸引人的工具/格式,但它似乎不支持 C++。你认为这样做会更好吗

  1. 直接为我的张量创建我自己的基于 parquet 的序列化格式
  2. 尝试想办法用 C++ 写入 Unischema(这似乎是一项潜在的重大任务,特别是如果我想尝试将我的工作分享回 Petastorm)。
  3. 为 C++ 张量生成代码编写 Python 绑定;在我的云作业中运行后处理 python 脚本,该脚本使用 Petastorm 的 Python API 进行序列化。

#3 似乎是最明显的选择,但我讨厌 python 绑定。

或者:我应该为这项任务考虑其他工具吗?

4

0 回答 0