如何在tf.Transform中使用Google DataFlow Runner和模板?

时间:2017-03-21 10:13:19

标签: tensorflow google-cloud-dataflow google-cloud-ml apache-beam google-cloud-ml-engine

我们正在Google Cloud上建立机器学习管道,利用GC ML-Engine进行分布式TensorFlow培训和模型服务,并利用DataFlow进行分布式预处理工作。

我们希望在Google Cloud上运行我们的Apache Beam应用程序作为DataFlow作业。看着ML-Engine samples  似乎可以通过 tensorflow_transform.beam.impl AnalyzeAndTransformDataset 指定要使用的 PipelineRunner ,如下所示:

from tensorflow_transform.beam import impl as tft
pipeline_name = "DirectRunner"
p = beam.Pipeline(pipeline_name) 
p | "xxx" >> xxx | "yyy" >> yyy | tft.AnalyzeAndTransformDataset(...)

TemplatingDataflowPipelineRunner提供了将预处理开发与参数化操作分开的功能 - 请参阅此处:https://cloud.google.com/dataflow/docs/templates/overview - 基本上:

  • A)在 PipelineOptions 派生类型中,将选项类型更改为 ValueProvider (python方式:类型推断或类型提示???)
  • B)将跑步者更改为 TemplatingDataflowPipelineRunner
  • C) mvn archetype:generate 以GCS格式存储模板(python方式:像TF Hypertune一样的yaml文件???)
  • D)运行 gcloud beta数据流作业--gcs-location -parameters

问题是:您能否告诉我们如何使用 tf.Transform 来利用 TemplatingDataflowPipelineRunner

2 个答案:

答案 0 :(得分:6)

Python模板于2017年4月开始提供(请参阅documentation)。操作它们的方法如下:

  • 从PipelineOptions定义子类别。
  • 使用add_value_provider_argument API添加要参数化的特定参数。
  • 将继续使用argparse的add_argument定义常规的非参数化选项。
class UserOptions(PipelineOptions):
     @classmethod
     def _add_argparse_args(cls, parser):
         parser.add_value_provider_argument('--value_provider_arg', default='some_value')
         parser.add_argument('--non_value_provider_arg', default='some_other_value')

请注意,Python没有TemplatingDataflowPipelineRunner,Java 2.X也没有(与Java 1.X不同)。

答案 1 :(得分:1)

不幸的是,Python管道不能用作模板。它仅适用于Java today。由于你需要使用python库,所以不可行。

tensorflow_transform还需要支持ValueProvider,以便您可以通过它传递选项作为值提供者类型。