我们正在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)将跑步者改为TemplatingDataflowPipelineRunner
C) mvn原型:生成以GCS存储模板(python方式:像TF Hypertune一样的yaml文件???)
D)运行gcloud beta数据流作业--gcs-location -parameters
现在的问题是:你能告诉我,我们怎能用tf.Transform利用TemplatingDataflowPipelineRunner?
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中发生的那样).