Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/ja/tfx/guide/tuner.md
25118 views

Tuner TFX パイプラインコンポーネント

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

Tuner コンポーネントと KerasTuner ライブラリ

Tuner コンポーネントは、ハイパーパラメータのチューニングに Python KerasTuner API を多大に使用しています。

注意: KerasTuner ライブラリは Keras モデルだけではなく、モデリング API に関係なくハイパーパラメータのチューニングに使用できます。

コンポーネント

Tuner は次を取り込みます。

  • training と eval に使用される tf.Examples

  • モデルの定義、ハイパーパラメータの検索スペース、目的など、チューニングロジックを定義するユーザー指定モジュールファイル(または module_fn)

  • train args と eval args の Protobuf 定義

  • (オプション)tuning args の Protobuf 定義

  • (オプション)上流の Transform コンポーネントが生成する transform グラフ

  • (オプション)SchemaGen パイプラインコンポーネントが作成し、開発者がオプションとして変更できるデータスキーマ

特定のデータ、モデル、および目的を使用して、Tuner はハイパーパラメータをチューニング氏、最善の結果を出力します。

手順

Tuner には次のシグネチャーによるユーザーモジュール関数 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 コンポーネントをこのモジュールコードを入力として取り、ハイパーパラメータをチューニングして最善の結果を出力します。

Trainer は Tuner の出力ハイパーパラメータを入力として取り、ユーザーモジュールコードに使用します。パイプライン定義は次のようになります。

... 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)) ...

モデルを取得するたびにハイパーパラメータをチューニングしないようにする場合は、Tuner を使用して、良い結果を出すハイパーパラメータを特定したら、パイプラインから Tuner を削除して、ImporterNode を使って前回のトレーニングランの Tuner アーティファクトをインポートし、Trainer にフィードすることができます。

hparams_importer = Importer( # 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, ).with_id('import_hparams') 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 プラットフォーム(GCP)でのチューニング

Google Cloud プラットフォーム(GCP)で実行している場合、Tuner コンポーネントは以下の 2 つのサービスを利用できます。

ハイパーパラメータチューニングのバックエンドとしての AI Platform Vizier

AI Platform VizierGoogle Vizier テクノロジーに基づいてブラックボックス最適化を実施するマネージドサービスです。

CloudTuner は AI Platform Vizer サービスに調査バックエンドとして話しかける KerasTuner の実装です。CloudTuner は kerastuner.Tuner のサブクラスであるため、tuner_fn モジュールにドロップインできる代替として使用し、TFX Tuner コンポーネントの一部として実行できます。

以下は、CloudTuner の使用方法を示すコードスニペットです。CloudTuner への構成には、project_idregion といった GCP 固有の項目が必要であることに注意してください。

... 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={...} )

Cloud AI Platformトレーニングの分散ワーカーフロックの並行チューニング

Tuner コンポーネントの基盤の実装としての KerasTuner フレームワークには、ハイパーパラメータ検索を並行して行える機能があります。ストック Tuner コンポーネントには 2 つ以上の検索ワーカーを並行して実行する機能はありませんが、Google Cloud AI Platform 拡張機能の Tuner コンポーネントを使用すると、AI Platform トレーニングジョブを分散型ワーカーのフロックマネージャとして使用し、チューニングを並行して行えるようになります。TuneArgs がこのコンポーネントに与えられた構成です。これはストック Tuner コンポーネントのドロップイン代替コンポーネントです。

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': ..., ... } }) ...

拡張機能 Tuner コンポーネントの動作と出力は、ストック Tuner コンポーネントと変わりませんが、複数のハイパーパラメータ検索を異なるワーカーマシンで並行して行える点で異なります。このため、num_trials がより速く完了します。これは、検索アルゴリズムが RandomSearch のようにに驚異的に並列化可能である場合に特に効果的ですが、AI Platform Vizier に実装された Google Vizier アルゴリズムのように、検索アルゴリズムが前回のトライアルの結果の情報を使用する場合、過剰に並列化された検索によって検索の効率性に悪影響を及ぼしてしまいます。

注意: 並列検索の各トライアルは、ワーカーフロックの 1 つのマシンで実行されるため、各トライアルはマルチワーカーの分散型トレーニングを利用しません。マルチワーカー分散を各トライアルで実施する場合は、DistributingCloudTuner を参照してください(CloudTuner は使用しません)。

注意: CloudTuner と Google Cloud AI Platform 拡張機能 Tuner コンポーネントを合わせて使用することができます。この場合、AI Platform Vizier のハイパーパラメータ検索アルゴリズムのサポートで、分散型並列検索が可能です。ただし、これを行うには Cloud AI Platform ジョブが AI Platform Vizier サービスにアクセスする必要があります。カスタムサービスアカウントをセットアップするには、こちらのガイドをご覧ください。その後で、パイプラインコードにトレーニングジョブのカスタムサービスアカウントを指定する必要があります。詳細は、GCP における E2E CloudTuner の例をご覧ください。

リンク

E2E の例

GCP Example の E2E CloudTuner

KerasTuner チュートリアル

CloudTuner チュートリアル

提案

より詳細な情報は、Tuner API リファレンスをご覧ください。