5

语境:

我的文本输入管道目前由两个主要部分组成:

。复杂的文本预处理和导出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

,但以下似乎都不能完全满足我的要求:

  1. 流式传输和处理来自 BigQuery、GCS、RDS 等的动态数据,如第一部分所述。
  2. 以一种或另一种方式直接发送数据(原型?)以tf.Dataset在第二部分中使用。
  3. 快速可靠的训练和推理。
  4. (可选)能够预先计算选定部分数据的一些完整统计数据。

  5. 编辑: Python 3 支持会很棒。

tf.data.Dataset管道最合适的选择是什么?在这种情况下,最佳实践是什么?

提前致谢!

4

1 回答 1

0

我建议使用Cloud Composer(Airflow 的 GCP 集成)来编排整个用例。

Airflow 提供了运算符,可让您使用脚本编排管道。

在您的情况下,当您有足够的数据要处理时,您可以使用dataflow_operator来启动数据流作业。

要从 BigQuery 获取数据,您可以使用bigquery_operator

此外,您可以使用 python 运算符或 bash 运算符来监视和预先计算统计信息。

于 2020-02-05T20:15:26.833 回答