【问题标题】:Optimal data streaming and processing solution for enormous datasets into tf.data.Datasettf.data.Dataset 中大量数据集的最佳数据流和处理解决方案
【发布时间】: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

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

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

  5. 编辑:对 Python 3 的支持非常棒。

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

提前致谢!

【问题讨论】:

  • Beam 现在支持 Py3,并与 tf.Transform 集成。

标签: tensorflow google-bigquery google-cloud-dataflow tensorflow-datasets tensorflow-transform


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 2014-09-04
    • 1970-01-01
    • 2023-03-21
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多