如何在 tf.Transform 中使用 Google DataFlow Runner 和模板?
How to use Google DataFlow Runner and Templates in tf.Transform?
我们正在 Google 云上建立机器学习管道,利用 GC ML-Engine 进行分布式 TensorFlow 训练和模型服务,并利用 DataFlow 进行分布式预处理作业。
我们希望 运行 我们的 Apache Beam 应用程序作为 Google 云上的 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 provides the ability to separate our preprocessing development from parameterized operations - see here: https://cloud.google.com/dataflow/docs/templates/overview - 基本上:
- A) 在PipelineOptions派生类型中,将选项类型改为ValueProvider(python方式:类型推断或类型提示???)
- B) 将 运行ner 更改为 TemplatingDataflowPipelineRunner
- C) mvn archetype:generate 将模板存储在 GCS 中(python 方式:像 TF Hypertune 这样的 yaml 文件???)
- D) gcloud beta 数据流作业 运行 --gcs-location —参数
问题是:你能告诉我我们如何使用 tf.Transform 来利用 TemplatingDataflowPipelineRunner 吗?
遗憾的是,Python 管道不能用作模板。它仅适用于 Java today。由于需要使用python库,所以这样做是不可行的。
tensorflow_transform 还需要支持 ValueProvider 以便您可以将选项作为值提供程序类型通过它传递。
Python 模板于 2017 年 4 月可用(参见 documentation)。操作方法如下:
- 定义从 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 中发生的情况不同)。
我们正在 Google 云上建立机器学习管道,利用 GC ML-Engine 进行分布式 TensorFlow 训练和模型服务,并利用 DataFlow 进行分布式预处理作业。
我们希望 运行 我们的 Apache Beam 应用程序作为 Google 云上的 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 provides the ability to separate our preprocessing development from parameterized operations - see here: https://cloud.google.com/dataflow/docs/templates/overview - 基本上:
- A) 在PipelineOptions派生类型中,将选项类型改为ValueProvider(python方式:类型推断或类型提示???)
- B) 将 运行ner 更改为 TemplatingDataflowPipelineRunner
- C) mvn archetype:generate 将模板存储在 GCS 中(python 方式:像 TF Hypertune 这样的 yaml 文件???)
- D) gcloud beta 数据流作业 运行 --gcs-location —参数
问题是:你能告诉我我们如何使用 tf.Transform 来利用 TemplatingDataflowPipelineRunner 吗?
遗憾的是,Python 管道不能用作模板。它仅适用于 Java today。由于需要使用python库,所以这样做是不可行的。
tensorflow_transform 还需要支持 ValueProvider 以便您可以将选项作为值提供程序类型通过它传递。
Python 模板于 2017 年 4 月可用(参见 documentation)。操作方法如下:
- 定义从 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 中发生的情况不同)。