1

我们正在 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(...)

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

  • A)在PipelineOptions派生类型中,将选项类型更改为ValueProvider(python 方式:类型推断或类型提示???)
  • B) 将 runner 更改为TemplatingDataflowPipelineRunner
  • C) mvn archetype:generate to store template in GCS (python way: a yaml file like TF Hypertune ???)
  • D) gcloud beta 数据流作业运行 --gcs-location --parameters

问题是:你能告诉我我们如何使用tf.Transform来利用TemplatingDataflowPipelineRunner吗?

4

2 回答 2

6

Python 模板自 2017 年 4 月起可用(请参阅文档)。操作它们的方法如下:

  • 定义从 PipelineOptions 子类化的 UserOptions。
  • 使用 add_value_provider_argument API 添加要参数化的特定参数。
  • 常规的不可参数化选项将继续使用 argparse 的 add_argument 定义。
类用户选项(管道选项):
     @classmethod
     def _add_argparse_args(cls, 解析器):
         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 中发生的情况不同)。

于 2017-03-21T23:55:31.657 回答
1

不幸的是,Python 管道不能用作模板。它今天仅适用于 Java 。由于您需要使用python库,因此这样做是不可行的。

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

于 2017-03-21T22:17:56.413 回答