问题标签 [petastorm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
machine-learning - 从 C++ 导出到 Unischema/Petastorm
我的情况:
- 对大数据来说相当陌生。请温柔一点,期待天真。
- 在许多(1000 多个)单独的云作业中生成训练数据。
- 每个作业都会生成少量数据点;一个数据点是一组匹配的 Nd 张量。
- 张量本身必须由 C++ 代码生成。
我想以一种可以在训练时快速加载到 numpy 数组中的格式序列化这些数据点。我目前最好的猜测是在 C++ 端使用自定义 parquet 适配器将这些张量序列化为 parquet 表。这种方法的优点:
- 列式存储对填充数据(我有很多)产生了很好的压缩。
- 似乎是一种很常见的格式。
- Pyarrow在某些条件下提供无复制拼花 -> numpy 转换,所以我可以做类似的事情
pyarrow.parquet.read_table("my/tensor/1.parquet").reshape(...)
- 由于每个块(每个云作业中的一个)都独立于所有其他块而存在,因此应该在训练中直接流式传输我的数据集。我不必通过将它们全部放在一起并以其他格式重新组合来进行预处理。
缺点
- 我不能直接将张量序列化为 C++ 中的张量对象;我必须编写自己的 C++ 张量序列化镶木地板适配器并在训练加载后重塑。
Petastorm/Unischema 似乎是一种直接将张量序列化为 Parquet 的潜在吸引人的工具/格式,但它似乎不支持 C++。你认为这样做会更好吗
- 直接为我的张量创建我自己的基于 parquet 的序列化格式
- 尝试想办法用 C++ 写入 Unischema(这似乎是一项潜在的重大任务,特别是如果我想尝试将我的工作分享回 Petastorm)。
- 为 C++ 张量生成代码编写 Python 绑定;在我的云作业中运行后处理 python 脚本,该脚本使用 Petastorm 的 Python API 进行序列化。
#3 似乎是最明显的选择,但我讨厌 python 绑定。
或者:我应该为这项任务考虑其他工具吗?
metadata - Pyarrow parquet 无法读取具有大量元数据的数据集
我使用 Petastormrow_group_indexer
为 petastorm 数据集中的列构建索引。之后,元数据文件的大小显着增加,由于此错误,Pyarrow 无法再加载数据集:
这是我用来加载数据集的代码:
用于索引物化 petastorm 数据集的代码:
tensorflow - 将训练数据从 parquet 文件馈送到 Tensorflow/Keras 模型的最佳方法是什么?
我有一个以镶木地板格式存储在 S3 上的训练数据集。我希望将此数据加载到笔记本中(在 databricks 集群上)并在其上训练 Keras 模型。在这个数据集上训练 Keras 模型的方法有几种:
- 分批从 S3 读取 parquet 文件(可能使用 Pandas)并将这些批次提供给模型
- 使用 Tensorflow IO API(这可能需要将 parquet 从 S3 复制到笔记本上的本地环境)
- 使用 Petastorm 包(来自 Uber)——这也可能需要将 parquet 从 S3 复制到本地笔记本的环境
在这种情况下训练模型的最佳方法是什么,以便更容易将训练扩展到更大的训练数据集?
python - TensorSpec 上的 tf.data.Dataset.group_by_window()
我正在尝试tf.data.Dataset.group_by_window()
在我拥有的数据集上运行petastorm
make_tf_dataset
并不断收到错误
编码:
行生成器是
和 test_converter 是
任何人都知道如何解决它?键或映射应该有不同的值吗?
databricks - 带有 Databricks Connect 的 Petastorm 失败
使用 Azure Databricks。我有 petastorm==0.11.2 和 databricks-connect==9.1.0
我的数据块连接会话似乎正在工作我能够将数据读入我的远程工作区。但是当我使用 petastorm 创建一个 spark 转换器对象时,它说无法推断模式,即使我传递它的对象并检查它的 .schema 属性,它也会向我显示一个模式就好了。
完全相同的代码在笔记本的 databricks 工作区中工作。但是当我在使用 DBConnect 读取数据的单独 VM 上时不起作用。
我认为问题在于设置此配置:SparkDatasetConverter.PARENT_CACHE_DIR_URL_CONF。在本地数据块工作区中使用值“file:///tmp/petastorm/cache/”可以正常工作。当使用 databricks-connect 时,它应该构建一个链接到集群的 spark 上下文,否则读取和写入路径的行为很好。
有任何想法吗?
tensorflow - Tensorflow pentastrom , training stuck
I have 2 very large (in tb) datasets (using pentastorm to train tf model)
what I am doing is loading the datasets using pentastorm and then creating a single feature and labels dataset, as I cant pass two separate datasets
using pentastorm :
model function:
Traning loop :
Error:
Any help would be great.
python - 如何打印到 keras model.fit 的数据,特别是在使用 petastorm 数据集的情况下
更新
虽然我很欣赏 AloneTogether 的回答,但我不喜欢我使用 take() 并且它与 model.fit 是分开的。
如果你想看的话,我在这里放了另一个答案。它涉及子类化模型。这还不错。
更新结束
我有一个简单的例子,一个有 8 列名为 feature_# 的镶木地板文件,每列填充 1 到 100
我的模型:
我像这样使用 petastorm:
对于这个简单的示例,我将相同的数据用于训练作为验证。我想确认整个数据集都进入了 model.fit() 所以我写了一个自定义回调
不会打印所有值... 1 到 100。如果我在没有 model.fit 的情况下迭代数据集(简单的 for 循环),那么我确实得到了 1 到 100,所以我认为 take() 正在与model.fit,只是一个理论。
我也试过:
但这并没有给我任何真正的价值,并且 get_weights() 打印出空数组
这是打印输入打印出来的内容:
我也尝试在图层的输入和输出上使用 K.eval() ,结果是一个 numpy 问题,任何急切的设置都不能解决这个问题。
我真的不认为这应该这么难。我只想在数据集进入训练之前达到峰值。
我玩弄了 repeat()、cache(),并在 model.fit 之前简单地迭代数据集,但我不喜欢这种情况发生在 model.fit 之前,除非它被缓存,否则它会重新洗牌, ETC...
但我也希望能够在任何时候任意查看模型,任何值,任何重量。我不觉得我可以访问这些东西,但觉得我应该可以。
任何帮助表示赞赏。
哦,使用 tensorflow 2.6.2 atm 和 tf.keras