午前9時PSTでMLシンポジウム、この10月19日(火曜日)の最初の女性の中にチューン今すぐ登録

チューナーTFXパイプラインコンポーネント

チューナーコンポーネントは、モデルのハイパーパラメーターを調整します。

チューナーコンポーネントとKerasTunerライブラリ

チューナーコンポーネントは、Pythonの広範な使用可能KerasTunerのチューニングハイパーためのAPIを。

成分

チューナーは:

  • tf。トレーニングと評価に使用される例。
  • モデル定義、ハイパーパラメータ検索スペース、目的などを含むチューニングロジックを定義するユーザー提供のモジュールファイル(またはモジュールfn)。
  • いるProtobuf列車の引数とevalの引数の定義。
  • (オプション)いるProtobufチューニング引数の定義。
  • (オプション)アップストリームのTransformコンポーネントによって生成された変換グラフ。
  • (オプション)SchemaGenパイプラインコンポーネントによって作成され、オプションで開発者によって変更されたデータスキーマ。

与えられたデータ、モデル、および目的を使用して、チューナーはハイパーパラメーターを調整し、最良の結果を出力します。

手順

ユーザ・モジュール機能tuner_fn次のシグネチャとは、チューナーのために必要とされます。

...
from keras_tuner.engine import base_tuner

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.
      - 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_path: optional schema of the input data.
      - transform_graph_path: 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.
  """
  ...

この関数では、モデルとハイパーパラメータの両方の検索スペースを定義し、調整の目的とアルゴリズムを選択します。チューナーコンポーネントは、このモジュールコードを入力として受け取り、ハイパーパラメーターを調整して、最良の結果を出力します。

トレーナーは、チューナーの出力ハイパーパラメーターを入力として受け取り、ユーザーモジュールコードでそれらを利用できます。パイプラインの定義は次のようになります。

...
tuner = Tuner(
    module_file=module_file,  # Contains `tuner_fn`.
    examples=transform.outputs['transformed_examples'],
    transform_graph=transform.outputs['transform_graph'],
    train_args=trainer_pb2.TrainArgs(num_steps=20),
    eval_args=trainer_pb2.EvalArgs(num_steps=5))

trainer = Trainer(
    module_file=module_file,  # Contains `run_fn`.
    examples=transform.outputs['transformed_examples'],
    transform_graph=transform.outputs['transform_graph'],
    schema=schema_gen.outputs['schema'],
    # This will be passed to `run_fn`.
    hyperparameters=tuner.outputs['best_hyperparameters'],
    train_args=trainer_pb2.TrainArgs(num_steps=100),
    eval_args=trainer_pb2.EvalArgs(num_steps=5))
...

モデルを再トレーニングするたびにハイパーパラメータを調整したくない場合があります。あなたはハイパーパラメータの良いセットを決定するためにチューナーを使用したら、パイプラインや使用からチューナーを削除することができImporterNodeトレーナーへの供給に前のトレーニングランからチューナーアーティファクトをインポートします。

hparams_importer = ImporterNode(
    instance_name='import_hparams',
    # This can be Tuner's output file or manually edited file. The file contains
    # text format of hyperparameters (keras_tuner.HyperParameters.get_config())
    source_uri='path/to/best_hyperparameters.txt',
    artifact_type=HyperParameters)

trainer = Trainer(
    ...
    # An alternative is directly use the tuned hyperparameters in Trainer's user
    # module code and set hyperparameters to None here.
    hyperparameters = hparams_importer.outputs['result'])

Google Cloud Platform(GCP)でのチューニング

Google Cloud Platform(GCP)で実行している場合、Tunerコンポーネントは次の2つのサービスを利用できます。

ハイパーパラメータ調整のバックエンドとしてのAIPlatform Vizier

AIプラットフォーム宰相はに基づいて、ブラックボックスの最適化を行い、マネージドサービスであるGoogleの宰相の技術。

CloudTunerはの実装ですKerasTuner研究バックエンドとしてAIプラットフォーム宰相サービスに語っています。 CloudTunerでのサブクラスであるためkeras_tuner.Tuner 、それはドロップイン置換のように使用することができるtuner_fnモジュール、及びTFXチューナー成分の一部として実行されます。

以下は、使用する方法を示したコードスニペットですCloudTuner 。設定することを通知CloudTuner等GCPに固有の項目、必要project_id及びregion

...
from tensorflow_cloud import CloudTuner

...
def tuner_fn(fn_args: FnArgs) -> TunerFnResult:
  """An implementation of tuner_fn that instantiates CloudTuner."""

  ...
  tuner = CloudTuner(
      _build_model,
      hyperparameters=...,
      ...
      project_id=...,       # GCP Project ID
      region=...,           # GCP Region where Vizier service is run.
  )

  ...
  return TuneFnResult(
      tuner=tuner,
      fit_kwargs={...}
  )

クラウドAIプラットフォームトレーニングの並列チューニング分散ワーカーの群れ

チューナーコンポーネントの基盤となる実装としてのKerasTunerフレームワークには、ハイパーパラメーター検索を並行して実行する機能があります。在庫チューナーコンポーネントは、並列に複数の検索ワーカーを実行する能力を持っていませんが、使用してGoogleクラウドAIプラットフォーム拡張チューナーコンポーネントを、それが分散労働者の群れとしてAIプラットフォームトレーニングジョブを使用して、並列チューニングを実行する機能を提供しますマネジャー。 TuneArgsは、このコンポーネントに与えられた構成です。これは、ストックのチューナーコンポーネントのドロップイン交換品です。

tuner = google_cloud_ai_platform.Tuner(
    ...   # Same kwargs as the above stock Tuner component.
    tune_args=proto.TuneArgs(num_parallel_trials=3),  # 3-worker parallel
    custom_config={
        # Configures Cloud AI Platform-specific configs . For for details, see
        # https://cloud.google.com/ai-platform/training/docs/reference/rest/v1/projects.jobs#traininginput.
        TUNING_ARGS_KEY:
            {
                'project': ...,
                'region': ...,
                # Configuration of machines for each master/worker in the flock.
                'masterConfig': ...,
                'workerConfig': ...,
                ...
            }
    })
...

挙動と拡張チューナー・コンポーネントの出力は、複数のハイパー検索は異なるワーカーマシン上で並列に実行されることを除いて、ストックチューナー成分と同じであり、結果として、 num_trialsより速く完了します。検索アルゴリズムのような、あきれるほど並列化である場合に特に効果的であるRandomSearch 。ただし、AIプラットフォームVizierに実装されているGoogle Vizierアルゴリズムのように、検索アルゴリズムが以前の試行の結果からの情報を使用する場合、過度に並列な検索は検索の有効性に悪影響を及ぼします。

E2Eの例

GCPの例でのE2ECloudTuner

KerasTunerチュートリアル

CloudTunerチュートリアル

提案

詳細はで利用可能なチューナーのAPIリファレンス