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

Jos*_*ben 1 google-cloud-dataflow tensorflow apache-beam google-cloud-ml google-cloud-ml-engine

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

我们希望在Google Cloud上运行我们的Apache Beam应用程序作为DataFlow作业.看看ML-Engine样本 ,似乎可以得到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(...)
Run Code Online (Sandbox Code Playgroud)

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

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

现在的问题是:你能告诉我,我们怎能用tf.Transform利用TemplatingDataflowPipelineRunner

Mar*_*ero 6

Python模板于2017年4月开始提供(参见文档).操作它们的方法如下:

  • 定义从PipelineOptions子类化的UserOptions.
  • 使用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中发生的那样).