From 44159ab0ad4fbeca0e6cfa3b1a6e2340af79a38b Mon Sep 17 00:00:00 2001
From: Jiayi Zhao <46733165+1025KB@users.noreply.github.com>
Date: Fri, 24 Apr 2020 12:33:41 -0700
Subject: [PATCH 1/8] Add files via upload
---
rfcs/20200420-tfx-tuner-component.md | 386 +++++++++++++++++++++++++++
rfcs/cloud.png | Bin 0 -> 81941 bytes
rfcs/parallel_tuning.png | Bin 0 -> 56317 bytes
rfcs/workflow.png | Bin 0 -> 22701 bytes
4 files changed, 386 insertions(+)
create mode 100644 rfcs/20200420-tfx-tuner-component.md
create mode 100644 rfcs/cloud.png
create mode 100644 rfcs/parallel_tuning.png
create mode 100644 rfcs/workflow.png
diff --git a/rfcs/20200420-tfx-tuner-component.md b/rfcs/20200420-tfx-tuner-component.md
new file mode 100644
index 000000000..f83ef405c
--- /dev/null
+++ b/rfcs/20200420-tfx-tuner-component.md
@@ -0,0 +1,386 @@
+# TFX Tuner Component
+
+| Status | Proposed |
+| :------------ | :-------------------------------------------------------- |
+| **Author(s)** | Jiayi Zhao (jyzhao@google.com), Amy Wu (wuamy@google.com) |
+| **Sponsor** | Zhitao Li (zhitaoli@google.com), Tom O'Malley |
+: : (omalleyt@google.com), Matthieu Monsch (mtth@google.com) :
+: : Makoto Uchida (muchida@google.com), Goutham Bhat :
+: : (goutham@google.com) :
+| **Updated** | 2020-04-20 |
+
+## Objective
+
+### Goal
+
+* A new Tuner component in TFX for automated hyper-parameter tuning, which is
+ based on abstractions from
+ [KerasTuner library](https://github.com/keras-team/keras-tuner), in order to
+ reuse abstractions and algorithms from latter.
+
+### Non Goal
+
+* Natively support multi-worker tuning by the system. As TFX doesn't have
+ ability to manage multi-worker clusters, running multiple trials in parallel
+ (parallel tuning) and running each trial in distributed env (distributed
+ training) are not supported natively. Parallel tuning may instead be
+ realized by a particular implementation of TFX Tuner (custom Executor),
+ e.g., in Google Cloud environment.
+* Implementation of custom tuner for
+ [KerasTuner library](https://github.com/keras-team/keras-tuner) is out of
+ scope of this design discussion, e.g., a built-in EstimatorTuner support.
+ However, user project can still implement a tuner that inherits from
+ [`kerastuner.BaseTuner`](https://github.com/keras-team/keras-tuner/blob/1.0.0/kerastuner/engine/base_tuner.py)
+ and provide it to the proposed TFX Tuner component.
+
+## Background and Motivation
+
+A hyperparameter is a parameter whose value is used to control the learning
+process of a model or the model itself (e.g., layers and number of nodes). By
+contrast, the values of other parameters (typically node weights) are learned.
+
+Hyperparameter optimization is a critical part of many machine learning
+pipelines. Thus we propose a new TFX component, with the given search space
+which specifies the hyperparameter configuration (name, type, range etc.). TFX
+will optimize the hyperparameters based on the tuning algorithm.
+
+## User Benefit
+
+This document proposes a built-in TFX Tuner component, which works seamlessly
+with Trainer and other TFX components. As the Tuner component will utilize the
+[KerasTuner library](https://github.com/keras-team/keras-tuner), all supported
+tuning methods will be available to TFX, including custom implementation of
+KerasTuner.
+
+## Design Proposal
+
+TFX Tuner component will be built with the
+[KerasTuner library](https://github.com/keras-team/keras-tuner). In the
+following sections, we will first briefly go over the KerasTuner library and
+several concepts in hyperparameter optimization. Then we will focus on our Tuner
+component interface and how we utilize the KerasTuner library. After that, we
+will discuss parallel tuning and our plan on Google Cloud integration.
+
+### KerasTuner Library
+
+The following graph shows a typical workflow of hyperparameter tuning under the
+KerasTuner framework:
+
+

+
+Given the user provided model which accepts a hyperparameter container, tuner
+can search optimization through trials created by the tuning algortihm. For each
+trial, values within search spaces will be assigned to hyperparameter
+containers, and the user model will be trained with these hyperparameter values
+and evaluated based on the objective provided to the tuner. The evaluation
+results will be reported back to tuner and the tuning algorithm will decide the
+hyperparameter values for the next trial. After reaching certain conditions,
+e.g., max trials, the tuner will stop iteration and return the optimal
+hyperparameters.
+
+KerasTuner library provides above tuning functionality, here are some
+abstractions in KerasTuner:
+
+* [`HyperParameters`](https://github.com/keras-team/keras-tuner/blob/1.0.0/kerastuner/engine/hyperparameters.py):
+ Hyperparameter container for both search space, and current values.
+* [`Oracle`](https://github.com/keras-team/keras-tuner/blob/1.0.0/kerastuner/engine/oracle.py):
+ Implementation of a hyperparameter tuning algorithm, e.g., random search,
+ including state management of the algorithm’s progress.
+* [`Trial`](https://github.com/keras-team/keras-tuner/blob/1.0.0/kerastuner/engine/trial.py):
+ Provided by the Oracle, contains information about Hyperparameter values for
+ the current iteration.
+* [`BaseTuner`](https://github.com/keras-team/keras-tuner/blob/1.0.0/kerastuner/engine/base_tuner.py):
+ a base tuner interface for above tuning workflow, responsible for the
+ iteration of trial execution:
+ * Generates Trial using Oracle.
+ * Trains user model with the HyperParameters in the current Trial.
+ * Evaluates metrics and reports back to Oracle for next Trial.
+* [`Tuner`](https://github.com/keras-team/keras-tuner/blob/1.0.0/kerastuner/engine/tuner.py):
+ An implementation of BaseTuner, for Keras model tuning.
+
+Note: Other than the Tuner, abstractions defined by `HyperParameters`, `Oracle`,
+`Trial` and `BaseTuner` are not restricted to Keras models, although the library
+is called KerasTuner.
+
+For more details and code examples, please refer to
+[here](https://github.com/keras-team/keras-tuner).
+
+### Component Interface
+
+Tuner component takes raw or transformed examples as input, along with schema or
+transform_graph for the feature specification, and outputs the hyperparameter
+tuning results, below shows the specification of Tuner component:
+
+```python
+class TunerSpec(ComponentSpec):
+ """ComponentSpec for TFX Tuner Component."""
+
+ PARAMETERS = {
+ # Specify a python module file which contains a UDF `tuner_fn`.
+ 'module_file': ExecutionParameter(type=(str, Text), optional=True),
+ # Specify the steps for the training stage of each trial’s execution.
+ 'train_args': ExecutionParameter(type=trainer_pb2.TrainArgs),
+ 'eval_args': ExecutionParameter(type=trainer_pb2.EvalArgs),
+ }
+
+ INPUTS = {
+ 'examples': ChannelParameter(type=standard_artifacts.Examples),
+ 'schema': ChannelParameter(
+ type=standard_artifacts.Schema, optional=True),
+ 'transform_graph':
+ ChannelParameter(
+ type=standard_artifacts.TransformGraph, optional=True),
+ }
+
+ OUTPUTS = {
+ 'best_hyperparameters':
+ ChannelParameter(type=standard_artifacts.HyperParameters),
+ }
+```
+
+Trainer has an optional hyperparameters input; tuning result can be fed into it
+so that Trainer can utilize best hyperparameters to construct the model. Below
+shows an example about how tuner and trainer are chained in the pipeline:
+
+```python
+# TrainerSpec:
+ INPUTS = {
+ ...
+ 'hyperparameters':
+ ChannelParameter(
+ type=standard_artifacts.HyperParameters, optional=True),
+ }
+
+# Pipeline DSL Example:
+ tuner = Tuner(
+ examples=example_gen.outputs['examples'],
+ schema=schema_gen.outputs['schema'],
+ module_file=module_file,
+ train_args=trainer_pb2.TrainArgs(num_steps=1000),
+ eval_args=trainer_pb2.EvalArgs(num_steps=500))
+
+ trainer = Trainer(
+ module_file=module_file,
+ examples=example_gen.outputs['examples'],
+ schema=schema_gen.outputs['schema'],
+ hyperparameters=tuner.outputs['best_hyperparameters'],
+ train_args=trainer_pb2.TrainArgs(num_steps=10000),
+ eval_args=trainer_pb2.EvalArgs(num_steps=5000))
+```
+
+For Trainer, users need to define model code and training logic
+([Generic Trainer](https://github.com/tensorflow/tfx/blob/r0.21.2/docs/guide/trainer.md#generic-trainer))
+in the module_file. For Tuner, in addition to model code, users also need to
+define hyperparameters, search space and a tuning algorithm in the module_file.
+A `tuner_fn` with the following signature is required for Tuner:
+
+```python
+from kerastuner.engine import base_tuner
+import tensorflow as tf
+from tfx.components.trainer.executor import TrainerFnArgs
+
+# Current TrainerFnArgs will be renamed to FnArgs as a util class.
+FnArgs = TrainerFnArgs
+TunerFnResult = NamedTuple('TunerFnResult',
+ [('tuner', base_tuner.BaseTuner),
+ ('fit_kwargs', Dict[Text, Any])])
+
+def tuner_fn(fn_args: FnArgs) -> TunerFnResult:
+ """Build the tuner using the KerasTuner API.
+
+ Args:
+ fn_args: Holds args as name/value pairs.
+ working_dir: working dir for tuning. Automatically set by Executor.
+ train_files: List of file paths containing training tf.Example data.
+ eval_files: List of file paths containing eval tf.Example data.
+ train_steps: number of train steps.
+ eval_steps: number of eval steps.
+ schema: optional schema file of the input data.
+ transform_graph: optional transform graph produced by TFT.
+
+ Returns:
+ A namedtuple contains the following:
+ - tuner: A BaseTuner that will be used for tuning.
+ - fit_kwargs: Args to pass to tuner’s run_trial function for fitting the
+ model , e.g., the training and validation dataset. Required
+ args depend on the above tuner’s implementation.
+ """
+```
+
+The TunerFnResult returned by the above tuner_fn contains an instance that
+implements the
+[`BaseTuner`](https://github.com/keras-team/keras-tuner/blob/1.0.0/kerastuner/engine/base_tuner.py)
+interface, that’s the contract required by Tuner for tuning. The model code,
+hyperparameters, search space and tuning algorithm are hidden under the
+BaseTuner abstraction so the Tuner itself is generic and agnostic to the model
+framework and tuning logic. Below shows an example module file with Keras model:
+
+```python
+import kerastuner
+import tensorflow as tf
+...
+
+def _input_fn(file_pattern: Text, ...) -> tf.data.Dataset:
+ ...
+
+# Model code for Trainer and Tuner.
+def _build_keras_model(hp: kerastuner.HyperParameters) -> tf.keras.Model:
+ ...
+ for _ in range(hp.get('num_layers')):
+ ...
+ ...
+ model = tf.keras.Model(...)
+ model.compile(
+ optimizer=tf.keras.optimizers.Adam(hp.get('learning_rate')),
+ loss='sparse_categorical_crossentropy',
+ metrics=[tf.keras.metrics.Accuracy()])
+ return model
+
+# This will be called by TFX Tuner.
+def tuner_fn(fn_args: FnArgs) -> TunerFnResult:
+ hp = kerastuner.HyperParameters()
+ # Defines search space.
+ hp.Choice('learning_rate', [1e-1, 1e-3])
+ hp.Int('num_layers', 1, 5)
+
+ # RandomSearch is a subclass of Keras model Tuner.
+ tuner = kerastuner.RandomSearch(
+ _build_keras_model,
+ max_trials=5,
+ hyperparameters=hp,
+ allow_new_entries=False,
+ objective='val_accuracy',
+ directory=fn_args.working_dir,
+ project_name='test')
+
+ train_dataset=_input_fn(fn_args.train_files, ...)
+ eval_dataset=_input_fn(fn_args.eval_files, ...)
+
+ return TunerFnResult(
+ tuner=tuner,
+ fit_kwargs={'x': train_dataset,
+ 'validation_data': eval_dataset,
+ 'steps_per_epoch': fn_args.train_steps,
+ 'validation_steps': fn_args.eval_steps})
+
+# This will be called by TFX Generic Trainer.
+def run_fn(fn_args: FnArgs) -> None:
+ hp = kerastuner.HyperParameters.from_config(fn_args.hyperparameters)
+ model = _build_keras_model(hp)
+ model.fit(...)
+ model.save(...)
+```
+
+In Tuner’s executor, `tuner_fn` will be called with information resolved from
+component inputs, then we call the `search` function of the returned tuner with
+`fit_kwargs` to launch trials for tuning, and finally emit the best trial’s
+hyperparameters:
+
+```python
+# Executor of Tuner Component:
+class Executor(base_executor.BaseExecutor):
+
+ def Do(self,
+ input_dict: Dict[Text, List[types.Artifact]],
+ output_dict: Dict[Text, List[types.Artifact]],
+ exec_properties: Dict[Text, Any]) -> None:
+ ...
+ tuner_spec = tuner_fn(self._create_fn_args(input_dict, exec_properties))
+ tuner_spec.tuner.search(**tuner_spec.fit_kwargs)
+ # Output file contains json format string of hyperparameters.get_config().
+ self._emit_best_hyperparameters(
+ output_dict, tuner_spec.tuner.get_best_hyperparameters()[0])
+```
+
+### Parallel Tuning
+
+In parallel tuning, multiple trials are executed in parallel. In this section,
+we will discuss how distribution works for KerasTuner library and the status of
+TFX.
+
+In the `search` function of tuner, trials will be run in sequence instead of in
+parallel. To support parallel tuning, we need to launch multiple tuners (the
+tuner here refers to the one in KerasTuner library, not TFX Tuner component),
+and have an optimization service for managing the state of the tuning algorithm,
+with which oracle of each tuner communicates, and retrieves the trials for each
+tuner.
+
+
+
+The above graph shows a parallel tuning of three tuners. Each tuner runs as a
+different worker, and it retrieves trials from its own oracle, which talks to
+optimization service. Trials of different tuners can run in parallel but trials
+within the same tuner will still execute in sequence. When launching tuners, the
+same identifier will be assigned to each oracle, thus the optimization service
+knows they are in the same tuning job group and will assign hyperparameter
+values for their trials based on the algorithm.
+
+The number of parallel tuners can be passed to component by the `TuneArgs` as
+shown below:
+
+```python
+# Args specific to tuning.
+message TuneArgs {
+ # Number of trials to run in parallel.
+ # Each trial will be trained and evaluated by separate worker jobs.
+ int32 num_parallel_trials = 1;
+}
+
+class TunerSpec(ComponentSpec):
+
+ PARAMETERS = {
+ ...
+ 'tune_args': ExecutionParameter(type=tuner_pb2.TuneArgs),
+ }
+```
+
+The KerasTuner library allows users to config
+[`tf.distribute.Strategy`](https://www.tensorflow.org/tutorials/distribute/kerass)
+if they are using
+[`kerastuner.Tuner`](https://github.com/keras-team/keras-tuner/blob/1.0.0/kerastuner/engine/tuner.py)
+class (or subclasses of it). In above parallel tuning, each trial (each model
+training) is executed in a single worker, as such only single machine strategy
+is allowed. To support multi-worker distributed training, we need to be able to
+execute the trial (training) on different workers.
+
+At the time of writing, KerasTuner library can be used for parallel tuning with
+single machine `tf.distribute.Strategy`, e.g.,
+[`MirroredStrategy`](https://www.tensorflow.org/api_docs/python/tf/distribute/MirroredStrategy)
+, multi-worker strategy (distributed training for trial) support is on the
+roadmap (note that cluster managing is not part of the library).
+
+At the time of writing, TFX doesn’t have the ability to manage the multi-worker
+cluster and the centralized optimization service, so parallel tuning or
+distributed training is not supported natively in TFX (local or on-prem), but in
+the next section, we will discuss the integration for Google Cloud. Similar
+parallel tuning support can be built for other execution environments.
+
+### Google Cloud Integration
+
+In this section, we discuss the Tuner component with
+[Google Cloud AI Platform](https://cloud.google.com/ai-platform) (CAIP),
+specifically, an implementation of KerasTuner Oracle that talks to the
+[AI Platform Optimizer](https://cloud.google.com/ai-platform/optimizer/docs/overview)
+as the centralized optimization service, and a custom Tuner executor
+implementation that makes use of the Cloud Optimizer-based Oracle (symbol names
+are subject to change).
+
+As mentioned above in the parallel tuning section, KerasTuner uses a centralized
+optimization service that manages states of a tuning study and trials. In
+addition to that, we will create a `CloudOracle` as a client to the AI Platform
+Optimizer service, and a `CloudTuner` which inherits from Keras
+[Tuner](https://github.com/keras-team/keras-tuner/blob/1.0.0/kerastuner/engine/tuner.py).
+In the module file, users create the `tuner_fn` with `CloudTuner`, and then
+users configure the TFX Tuner component to use the a custom Tuner executor
+(`CloudExecutor`), which launches multiple `CloudTuner`s on a Google Cloud AI
+Platform Training job with possibly multiple worker machines running various
+trials concurrently. Below shows the workflow for in process tuning and Cloud
+tuning.
+
+
+
+## Future work
+
+* Native support for multi-worker parallel tuning.
+* Custom Tuner (inherits from BaseTuner) examples, e.g., for Estimator support
+ or Keras custom training loop support.
\ No newline at end of file
diff --git a/rfcs/cloud.png b/rfcs/cloud.png
new file mode 100644
index 0000000000000000000000000000000000000000..09559da712cb41e2ddc60dc7c521e1add6864b13
GIT binary patch
literal 81941
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