【问题标题】:Is it possible to parallelize preprocessings with tensorflow-transform on my machine?是否可以在我的机器上使用 tensorflow-transform 并行化预处理?
【发布时间】:2019-01-04 15:09:41
【问题描述】:

我正在尝试使用 tensorflow-transform v0.11.0 预处理大量数据(一个 tfrecord 文件 ~1Go)并仅在本地传输。

我的代码很大程度上来自https://github.com/tensorflow/transform/blob/master/examples/census_example.py

我有一个适用于较小数据集 (

如果我理解正确的话,我的管道使用 beam directRunner 在本地运行,但它只使用一个核心。使用多核可能是缩短预处理时间的一种方法,但我不知道使用 beam directRunner 是否可行。有没有办法让张量流转换管道在我的机器上的多个核心上运行?

我查看了光束管道和 directRunner 的选项,但找不到任何关于让运行器访问多个核心或为管道创建多个 directRunner 的迹象。

非常感谢您为我提供的任何帮助!

【问题讨论】:

    标签: python-2.7 apache-beam tensorflow-transform


    【解决方案1】:

    要添加到 Anton 的评论中, 您可以利用 Apache Flink 并行运行管道。更多细节总结在Tensorflow transform on beams with flink runner

    您还必须根据内核总数设置并行度并启动许多 Flink TaskManager。我的建议是将并行度设置为 (total number of cores/2)

    【讨论】:

      【解决方案2】:

      我不认为这是支持的。 Direct runner 的主要目的是确保流水线正确实现 Beam 模型。它没有针对生产使用进行优化,实际上可能会导致效率低下:https://beam.apache.org/documentation/runners/direct/

      作为一种解决方法,您可以手动启动多个直接运行器管道来处理不同部分的数据。

      更好的选择是使用实际的并行运行器来运行这些类型的作业,例如你可以启动一个 Flink 集群:https://beam.apache.org/documentation/runners/flink/

      【讨论】:

        【解决方案3】:

        @Ankur @Anton 感谢您的回答,我同意这种方法对生产不友好......我们将尝试其他两种解决方案:

        • DataFlow 上的张量流转换
        • 完全移除 tensorflow-transform 并使用 presto 获取分类输入的词汇文件、计算均值和标准差以缩放整个数据集上的数值输入等

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-07
          • 2010-09-23
          • 1970-01-01
          • 2020-03-16
          • 2018-09-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多