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