エンドツーエンドの AutoML でモデルをトレーニングする

このページでは、エンドツーエンドの AutoML 表形式ワークフローを使用して、表形式データセットから分類モデルまたは回帰モデルをトレーニングする方法を説明します。

始める前に

モデルをトレーニングするには、次の作業を完了しておく必要があります。

エンドツーエンドの AutoML の表形式ワークフローの実行中に割り当てに関するエラーが発生した場合は、割り当ての増加をリクエストする必要があります。詳細については、Tabular Workflows の割り当てを管理するをご覧ください。

以前のハイパーパラメータ チューニング結果の URI を取得する

以前にエンドツーエンドの AutoML ワークフローの実行を完了している場合は、以前の実行のハイパーパラメータ チューニング結果を使用すると、トレーニング時間とリソースを節約できます。以前のハイパーパラメータ チューニングの結果を確認するには、Google Cloud コンソールを使用するか、API を使用してプログラムで結果を読み込みます。

Google Cloud コンソール

Google Cloud コンソールを使用してハイパーパラメータ チューニング結果の URI を確認するには、次の手順を行います。

  1. Google Cloud コンソールの [Vertex AI] セクションで、[パイプライン] ページに移動します。

    [パイプライン] ページに移動

  2. [実行] タブを選択します。

  3. 使用するパイプライン実行を選択します。

  4. [Expand Artifacts] を選択します。

  5. コンポーネント exit-handler-1 をクリックします。

  6. コンポーネント stage_1_tuning_result_artifact_uri_empty をクリックします。

  7. コンポーネント automl-tabular-cv-trainer-2 を見つけます。

  8. 関連付けられているアーティファクト tuning_result_output をクリックします。

  9. [ノード情報] タブを選択します。

  10. モデルのトレーニング手順で使用する URI をコピーします。

アーキテクチャの検索結果

API: Python

次のサンプルコードは、API を使用してハイパーパラメータ チューニングの結果を読み込む方法を示しています。変数 job は、前のモデル トレーニング パイプラインの実行を指しています。


def get_task_detail(
  task_details: List[Dict[str, Any]], task_name: str
) -> List[Dict[str, Any]]:
  for task_detail in task_details:
      if task_detail.task_name == task_name:
          return task_detail

pipeline_task_details = job.gca_resource.job_detail.task_details

stage_1_tuner_task = get_task_detail(
    pipeline_task_details, "automl-tabular-stage-1-tuner"
)
stage_1_tuning_result_artifact_uri = (
    stage_1_tuner_task.outputs["tuning_result_output"].artifacts[0].uri
)

モデルのトレーニング

Google Cloud コンソール

Google Cloud コンソールを使用してモデルをトレーニングするには、次の手順を行います。

  1. Google Cloud コンソールの [Vertex AI] セクションで、[パイプライン] ページに移動します。

    [パイプライン] ページに移動

  2. [テンプレート ギャラリー] タブを選択します。

  3. [表形式分類 / 回帰の AutoML] カードで、[実行を作成] をクリックします。

  4. [モデルの詳細] ページで、次のように構成します。

    1. パイプライン実行の名前を入力します。
    2. 省略可: Vertex AI Pipelines サービス アカウントまたは Dataflow ワーカー サービス アカウントを設定する場合は、[詳細オプション] を開きます。サービス アカウントの詳細をご確認ください。
    3. [続行] をクリックします。

  5. [ランタイムの構成] ページで、次のように構成します。

    1. ルート出力ディレクトリとして使用する Cloud Storage バケットまたはバケット内のフォルダを入力します。このディレクトリは、実体化データセットやモデルなどの中間ファイルを保存するために使用されます。トレーニングの完了後、モデルとその他の重要なアーティファクトを別の Cloud Storage バケットにコピーした後に、ディレクトリをクリーンアップしてください。または、Cloud Storage バケットに有効期間(TTL)を設定します。

      プロジェクトのバケットは Google Cloud コンソールの Cloud Storage セクションに表示されます。

      [バケット] ページに移動

    2. [続行] をクリックします。

  6. [トレーニング方法] ページで、次のように構成します。

    1. モデルのトレーニングに使用するデータセットの名前を選択します。
    2. ターゲット列を選択します。ターゲット列の値が、モデルによって予測されます。ターゲット列の要件をご覧ください。
    3. 新しいモデルの表示名を入力します。
    4. 省略可: データをトレーニング セット、テストセット、検証セットに分割する方法を選択するには、[詳細オプション] を開きます。次のデータ分割オプションから選択できます。
      • ランダム(デフォルト): Vertex AI は各データセットに関連付けられた行をランダムに選択します。デフォルトでは、Vertex AI はトレーニング データの 80% をトレーニング セット、10% を検証セット、10% をテストセットに選択します。各データセットに関連付けるデータ行の割合を設定します。
      • 手動: Vertex AI は、データ分割列の値に基づいて各データセットのデータ行を選択します。データ分割列の名前を指定します。
      • 時系列: Vertex AI は、時間列のタイムスタンプに基づいてデータを分割します。時間列の名前を指定します。トレーニング セット、検証セット、テストセットに関連付けるデータ行の割合を設定することもできます。
      • 層化: Vertex AI は、各データセットに関連付けられた行をランダムに選択しますが、ターゲット列の値の分布は保持します。ターゲット列の名前を指定します。トレーニング セット、検証セット、テストセットに関連付けるデータ行の割合を設定することもできます。
      データ分割の詳細をご確認ください。
    5. 省略可: アーキテクチャ検索なしでパイプラインを実行できます。[アーキテクチャ検索をスキップする] を選択すると、[トレーニング オプション] ページで、以前のパイプライン実行のハイパーパラメータのセットを指定するように求められます。
    6. [続行] をクリックします。

  7. [トレーニング オプション] ページで、次のように構成します。

    1. 省略可: [統計情報を生成] をクリックします。統計情報の生成が [変換] プルダウン メニューに表示されます。
    2. 列のリストを確認して、モデルのトレーニングに使用すべきではない列を除外します。
    3. 含まれている特徴に対して選択された変換と、無効なデータが許可されているかどうかを確認して、必要な更新を行います。詳細については、変換無効なデータをご覧ください。
    4. [トレーニング方法] ページでアーキテクチャ検索をスキップする場合は、前回のパイプライン実行のハイパーパラメータ チューニング結果のパスを指定します。
    5. 省略可: 重み列を指定する場合は、[詳細オプション] を開いて選択します。詳しくは、重み列をご覧ください。
    6. 省略可: 最適化の目標をデフォルトから変更する場合は、[詳細オプション] を開いて選択します。最適化の目標の詳細をご確認ください。
    7. 省略可: [トレーニング方法] ページでアーキテクチャ検索を行う場合は、並列トライアルの数を指定できます。[詳細オプション] を開き、値を入力します。
    8. 省略可: ハイパーパラメータのサブセットに固定値を指定できます。Vertex AI は、残りの未修正のハイパーパラメータの最適値を検索します。このオプションは、モデルタイプを重視する場合に適しています。モデルタイプには、ニューラル ネットワークとブーストツリーを選択できます。[詳細オプション] を開き、JSON 形式のスタディ仕様のオーバーライドを指定します。

      たとえば、モデルタイプをニューラル ネットワーク(NN)に設定する場合は、次のように入力します。

      [
        {
          "parameter_id": "model_type",
          "categorical_value_spec": {
            "values": ["nn"]
          }
        }
      ]
      

    9. [続行] をクリックします。

  8. [コンピューティングと料金] ページで、次のように構成します。

    1. モデルのトレーニングの最大時間数を入力します。料金の詳細をご確認ください。
    2. 省略可: [コンピューティング設定] セクションで、ワークフローの各ステージのマシンタイプとマシン数を構成できます。このオプションは、大規模なデータセットがあり、それに応じてマシンのハードウェアを最適化したい場合に適しています。

  9. [送信] をクリックします。

API: Python

次のサンプルコードは、モデル トレーニング パイプラインの実行方法を示しています。

job = aiplatform.PipelineJob(
    ...
    template_path=template_path,
    parameter_values=parameter_values,
    ...
)
job.run(service_account=SERVICE_ACCOUNT)

job.run() でオプションの service_account パラメータを使用すると、Vertex AI Pipelines サービス アカウントを任意のアカウントに設定できます。

パイプラインとパラメータ値は、次の関数で定義されます。トレーニング データは、Cloud Storage の CSV ファイルか、BigQuery のテーブルのいずれかです。

template_path, parameter_values = automl_tabular_utils.get_automl_tabular_pipeline_and_parameters(...)

get_automl_tabular_pipeline_and_parameters パラメータのサブセットは次のとおりです。

パラメータ名 定義
data_source_csv_filenames 文字列 Cloud Storage に保存されている CSV の URI。
data_source_bigquery_table_path 文字列 BigQuery テーブルの URI。
dataflow_service_account 文字列 (省略可)Dataflow ジョブを実行するカスタム サービス アカウント。プライベート IP と特定の VPC サブネットを使用するように Dataflow ジョブを構成できます。このパラメータは、デフォルトの Dataflow ワーカー サービス アカウントのオーバーライドとして機能します。
prediction_type 文字列 分類モデルをトレーニングするには classification、回帰モデルをトレーニングするには regression を選択します。
optimization_objective 文字列 バイナリ分類モデルをトレーニングする場合、デフォルトの目標は AUC ROC です。回帰モデルをトレーニングする場合、デフォルトの目標は RMSE です。モデルに別の最適化目標が必要な場合は、分類モデルまたは回帰モデルの最適化目標のオプションのいずれかを選択します。
enable_probabilistic_inference ブール値 回帰モデルをトレーニングする場合にこの値を true に設定すると、Vertex AI は予測の確率分布をモデル化します。確率的推論により、ノイズの多いデータを処理し、不確実性を定量化することで、モデルの品質を改善できます。quantiles を指定すると、Vertex AI により分布の分位数も返されます。
quantiles List[float] 確率的推論に使用する分位数。分位数は、ターゲットが特定の値より小さい可能性を示します。最大 5 つの一意の数字を 01 の範囲(両端を除く)で指定します。

ワークフローのカスタマイズ オプション

エンドツーエンドの AutoML ワークフローは、パイプライン定義で渡される引数値を定義することによってカスタマイズできます。ワークフローは次の方法でカスタマイズできます。

  • 検索スペースをオーバーライドする
  • ハードウェアを構成する
  • モデルを抽出する
  • アーキテクチャ検索をスキップする

検索スペースをオーバーライドする

次の get_automl_tabular_pipeline_and_parameters パラメータを使用すると、ハイパーパラメータのサブセットに固定値を指定できます。Vertex AI は、残りの未修正のハイパーパラメータの最適値を検索します。このパラメータは、モデルタイプに応じてニューラル ネットワークとブーストツリーを切り替える場合に使用します。

パラメータ名 定義
study_spec_parameters_override List[Dict[String, Any]] (省略可)ハイパーパラメータのカスタム サブセット。このパラメータは、パイプラインの automl-tabular-stage-1-tuner コンポーネントを構成します。

次のコードは、モデルタイプをニューラル ネットワーク(NN)に設定する方法を示しています。

study_spec_parameters_override = [
  {
    "parameter_id": "model_type",
    "categorical_value_spec": {
      "values": ["nn"] # The default value is ["nn", "boosted_trees"], this reduces the search space
    }
  }
]

ハードウェアを構成する

次の get_automl_tabular_pipeline_and_parameters パラメータを使用すると、トレーニング用のマシンタイプとマシン数を構成できます。このオプションは、大規模なデータセットがあり、それに応じてマシンのハードウェアを最適化したい場合に適しています。

パラメータ名 定義
stage_1_tuner_worker_pool_specs_override Dict[String, Any] (省略可)トレーニング用のマシンタイプとマシン数のカスタム構成。このパラメータは、パイプラインの automl-tabular-stage-1-tuner コンポーネントを構成します。
cv_trainer_worker_pool_specs_override Dict[String, Any] (省略可)トレーニング用のマシンタイプとマシン数のカスタム構成。このパラメータは、パイプラインの automl-tabular-stage-1-tuner コンポーネントを構成します。

次のコードは、TensorFlow チーフノードに n1-standard-8 マシンタイプを設定し、TensorFlow エバリュエータ ノードに n1-standard-4 マシンタイプを設定する方法を示しています。

worker_pool_specs_override = [
  {"machine_spec": {"machine_type": "n1-standard-8"}}, # override for TF chief node
  {},  # override for TF worker node, since it's not used, leave it empty
  {},  # override for TF ps node, since it's not used, leave it empty
  {
    "machine_spec": {
        "machine_type": "n1-standard-4" # override for TF evaluator node
    }
  }
]

モデルを抽出する

次の get_automl_tabular_pipeline_and_parameters パラメータを使用すると、アンサンブル モデルの縮小バージョンを作成できます。モデルが小さいほど、予測のレイテンシと費用が削減されます。

パラメータ名 定義
run_distillation ブール値 TRUE の場合、アンサンブル モデルの小さいバージョンが作成されます。

アーキテクチャ検索をスキップする

次の get_automl_tabular_pipeline_and_parameters パラメータを使用すると、アーキテクチャ検索なしでパイプラインを実行し、前回のパイプライン実行からのハイパーパラメータのセットを指定できます。

パラメータ名 定義
stage_1_tuning_result_artifact_uri 文字列 (省略可)前回のパイプライン実行のハイパーパラメータ チューニング結果の URI。

分類モデルまたは回帰モデルの最適化目標

モデルをトレーニングするときに、Vertex AI はモデルタイプとターゲット列に使用されるデータタイプに基づいて、デフォルトの最適化目標を選択します。

分類モデルは、次の場合に最適です。
最適化の目標 API 値 この目標が適している問題
AUC ROC maximize-au-roc 受信者操作特性(ROC)曲線の下の面積を最大化する。クラスを区別する。バイナリ分類のデフォルト値。
ログ損失 minimize-log-loss 予測確率をできるだけ正確に維持する。マルチクラス分類でサポートされている目標のみ。
AUC PR maximize-au-prc PR(適合率 / 再現率)曲線の下の面積を最大化する。あまり一般的でないクラスの予測結果を最適化する。
再現率での適合率 maximize-precision-at-recall 特定の再現率の値で適合率を最適化する。
適合率での再現率 maximize-recall-at-precision 特定の適合率の値で再現率を最適化する。
回帰モデルは、次の場合に最適です。
最適化の目標 API 値 この目標が適している問題
RMSE minimize-rmse 二乗平均平方根誤差(RMSE)を最小化する。より極端な値を正確に取り込む。デフォルト値。
MAE minimize-mae 平均絶対誤差(MAE)を最小化する。モデルへの影響を抑えて、極端な値を外れ値として表示する。
RMSLE minimize-rmsle 二乗平均平方根対数誤差(RMSLE)を最小化する。絶対値ではなく、相対サイズに基づいてエラーにペナルティを適用する。予測値と実際の値の両方が非常に大きくなる可能性がある場合に有用。

次のステップ