我正在尝试使用tensorflow-transform v0.11.0和beam仅在本地预处理更大量的数据(一个tfrecord文件~1Go)。
我的代码在很大程度上受到https://github.com/tensorflow/transform/blob/master/examples/census_example.py的启发
我有一个波束管道,可以处理较小的数据集(<100Mo),但随着我添加更多的数据,处理时间会急剧增加。作为tf-transform和apache Beam的新手,我很难找到问题的原因和解决方案……而且我想避免使用谷歌DataFlow。
如果我理解正确的话,我的管道使用beam directRunner在本地运行,但它只使用一个内核。使用多核可能是改善预处理时间的一种方法,但我不知道使用beam directRunner是否可能做到这一点。有没有办法让tensorflow-transform管道在我的机器上的多个内核上运行?
我查看了beam管道和directRunner的选项,但我找不到任何有关允许一个runner访问多个核心或为一个管道创建多个directRunners的指示。
非常感谢你对我的帮助!
发布于 2019-01-08 04:01:51
为了补充Anton的评论,您可以利用Apache Flink来并行运行管道。有关更多详细信息,请参阅Tensorflow transform on beams with flink runner
您还必须根据内核的总数设置并行度,并启动那些多个Flink TaskManagers。我的建议是将并行度设置为(核总数/2)
发布于 2019-01-05 03:20:18
我不相信这是被支持的。Direct runner的主要目的是确保管道正确地实现波束模型。它没有针对生产使用进行优化,实际上可能会引入低效:https://beam.apache.org/documentation/runners/direct/
作为一种解决办法,您可以手动启动多个直接流水线管道来处理不同部分的数据。
更好的选择是使用实际的并行运行器来运行这些类型的作业,例如,您可以启动一个Flink集群:https://beam.apache.org/documentation/runners/flink/
发布于 2019-01-14 19:06:33
@Ankur @Anton感谢你的回答,我同意这种方法对生产不友好……我们将尝试其他两种解决方案:
进行整体变换,并使用presto获取分类输入的词汇文件、计算均值和标准差以缩放数值输入等
https://stackoverflow.com/questions/54041538
复制相似问题