【发布时间】:2018-06-07 18:11:39
【问题描述】:
上下文:
我的文本输入管道目前由两个主要部分组成:
我。 tf.SequenceExamples 的复杂文本预处理和导出到 tfrecords(自定义标记化、词汇创建、统计计算、规范化以及整个数据集以及每个单独示例的更多)。对每个数据配置执行一次。
二。一个 tf.Dataset (TFRecords) 管道,在训练期间也进行了大量处理(string_split 到字符、表查找、分桶、条件过滤等)。
原始数据集存在于多个位置(BigQuery、GCS、RDS...)。
问题:
问题在于,随着生产数据集迅速增加(数 TB),为每个可能的数据配置(第 1 部分有很多超参数)重新创建一个 tfrecords 文件是不可行的,因为每个文件都有数百个巨大的大小兆兆字节。更不用说,当tf.SequenceExamples 或 tfrecord 的大小增加时,tf.Dataset 的读取速度会惊人地变慢。
有很多可能的解决方案:
- Apache Beam + Cloud DataFlow + feed_dict;
- tf.Transform;
- Apache Beam + Cloud DataFlow + tf.Dataset.from_generator;
- 张量流/生态系统 + Hadoop 或 Spark
- tf.contrib.cloud.BigQueryReader
,但以下似乎都不能完全满足我的要求:
- 从 BigQuery、GCS、RDS 等动态流式传输和处理数据,如第一部分所述。
- 以一种或另一种方式将数据(protos?)直接发送到
tf.Dataset,以便在第二部分中使用。 - 训练和推理都快速可靠。
(可选)能够预先计算所选部分数据的一些完整统计数据。
编辑:对 Python 3 的支持非常棒。
tf.data.Dataset 管道最合适的选择是什么?在这种情况下,最佳做法是什么?
提前致谢!
【问题讨论】:
-
Beam 现在支持 Py3,并与 tf.Transform 集成。
标签: tensorflow google-bigquery google-cloud-dataflow tensorflow-datasets tensorflow-transform