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
が必要です。
この関数では、モデルとハイパーパラメータの両方の検索スペースを定義し、チューニングの目的とアルゴリズムを選択します。Tuner コンポーネントをこのモジュールコードを入力として取り、ハイパーパラメータをチューニングして最善の結果を出力します。
Trainer は Tuner の出力ハイパーパラメータを入力として取り、ユーザーモジュールコードに使用します。パイプライン定義は次のようになります。
モデルを取得するたびにハイパーパラメータをチューニングしないようにする場合は、Tuner を使用して、良い結果を出すハイパーパラメータを特定したら、パイプラインから Tuner を削除して、ImporterNode
を使って前回のトレーニングランの Tuner アーティファクトをインポートし、Trainer にフィードすることができます。
Google Cloud プラットフォーム(GCP)でのチューニング
Google Cloud プラットフォーム(GCP)で実行している場合、Tuner コンポーネントは以下の 2 つのサービスを利用できます。
AI Platform Vizier(CloudTuner 実装を介して)
AI Platform Training(分散型チューニングのフロックマネージャーとして)
ハイパーパラメータチューニングのバックエンドとしての AI Platform Vizier
AI Platform Vizier は Google Vizier テクノロジーに基づいてブラックボックス最適化を実施するマネージドサービスです。
CloudTuner は AI Platform Vizer サービスに調査バックエンドとして話しかける KerasTuner の実装です。CloudTuner は kerastuner.Tuner
のサブクラスであるため、tuner_fn
モジュールにドロップインできる代替として使用し、TFX Tuner コンポーネントの一部として実行できます。
以下は、CloudTuner
の使用方法を示すコードスニペットです。CloudTuner
への構成には、project_id
や region
といった GCP 固有の項目が必要であることに注意してください。
Cloud AI Platformトレーニングの分散ワーカーフロックの並行チューニング
Tuner コンポーネントの基盤の実装としての KerasTuner フレームワークには、ハイパーパラメータ検索を並行して行える機能があります。ストック Tuner コンポーネントには 2 つ以上の検索ワーカーを並行して実行する機能はありませんが、Google Cloud AI Platform 拡張機能の Tuner コンポーネントを使用すると、AI Platform トレーニングジョブを分散型ワーカーのフロックマネージャとして使用し、チューニングを並行して行えるようになります。TuneArgs がこのコンポーネントに与えられた構成です。これはストック Tuner コンポーネントのドロップイン代替コンポーネントです。
拡張機能 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 の例をご覧ください。
リンク
より詳細な情報は、Tuner API リファレンスをご覧ください。