Vertex AI Vizier スタディを作成する

このページでは、Python を使用して Vertex AI Vizier に API リクエストを行う方法について説明します。Vertex AI Vizier の仕組みについては、Vertex AI Vizier の概要をご覧ください。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Vertex AI API を有効にします。

    API を有効にする

  4. サービス アカウントを作成します。

    1. Google Cloud コンソールで [サービス アカウントの作成] ページに移動します。

      [サービス アカウントの作成] に移動
    2. プロジェクトを選択します。
    3. [サービス アカウント名] フィールドに名前を入力します。Google Cloud コンソールでは、この名前に基づいて [サービス アカウント ID] フィールドに値が設定されます。

      [サービス アカウントの説明] フィールドに説明を入力します。例: Service account for quickstart

    4. [作成して続行] をクリックします。
    5. サービス アカウントに Project > Owner ロールを付与します。

      ロールを付与するには、[ロールを選択] リストで [Project > Owner] を選択します。

    6. [続行] をクリックします。
    7. [完了] をクリックして、サービス アカウントの作成を完了します。

      ブラウザ ウィンドウは閉じないでください。次のステップでこれを使用します。

  5. サービス アカウント キーを作成します。

    1. Google Cloud コンソールで、作成したサービス アカウントのメールアドレスをクリックします。
    2. [キー] をクリックします。
    3. [鍵を追加]、[新しい鍵を作成] の順にクリックします。
    4. [作成] をクリックします。JSON キーファイルがパソコンにダウンロードされます。
    5. [閉じる] をクリックします。
  6. 環境変数 GOOGLE_APPLICATION_CREDENTIALS を、認証情報を含む JSON ファイルのパスに設定します。この変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定する必要があります。

  7. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  8. Vertex AI API を有効にします。

    API を有効にする

  9. サービス アカウントを作成します。

    1. Google Cloud コンソールで [サービス アカウントの作成] ページに移動します。

      [サービス アカウントの作成] に移動
    2. プロジェクトを選択します。
    3. [サービス アカウント名] フィールドに名前を入力します。Google Cloud コンソールでは、この名前に基づいて [サービス アカウント ID] フィールドに値が設定されます。

      [サービス アカウントの説明] フィールドに説明を入力します。例: Service account for quickstart

    4. [作成して続行] をクリックします。
    5. サービス アカウントに Project > Owner ロールを付与します。

      ロールを付与するには、[ロールを選択] リストで [Project > Owner] を選択します。

    6. [続行] をクリックします。
    7. [完了] をクリックして、サービス アカウントの作成を完了します。

      ブラウザ ウィンドウは閉じないでください。次のステップでこれを使用します。

  10. サービス アカウント キーを作成します。

    1. Google Cloud コンソールで、作成したサービス アカウントのメールアドレスをクリックします。
    2. [キー] をクリックします。
    3. [鍵を追加]、[新しい鍵を作成] の順にクリックします。
    4. [作成] をクリックします。JSON キーファイルがパソコンにダウンロードされます。
    5. [閉じる] をクリックします。
  11. 環境変数 GOOGLE_APPLICATION_CREDENTIALS を、認証情報を含む JSON ファイルのパスに設定します。この変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定する必要があります。

  12. Vertex AI SDK for Python をインストールします。

定数を定義する

定数を定義するには、次のコマンドを実行します。REGIONPROJECT_ID は、リージョンとプロジェクト ID で置き換えます。独自のスタディ名を作成するか、提案された値を使用します。

import json
import datetime
from google.cloud import aiplatform

REGION = "REGION"
PROJECT_ID = "PROJECT_ID"

# The following placeholder variables are automatically filled in.
STUDY_DISPLAY_NAME = '{}_study_{}'.format(PROJECT_ID.replace('-', ''), datetime.datetime.now().strftime('%Y%m%d_%H%M%S')) #@param {type: 'string'}
ENDPOINT = REGION + '-aiplatform.googleapis.com'
PARENT = 'projects/{}/locations/{}'.format(PROJECT_ID, REGION)

API リクエストを作成する

以下のコマンドライン API リクエストは Python で記述されています。

スタディを作成する

スタディは、ハイパーパラメータまたはパラメータを最適化するための一連のテストまたはトライアルです。

次の例では、x が [-10. 10] の範囲内で y = x^2 を最大化することが目標です。Vertex AI Vizier の使用方法を説明するために、この例ではパラメータを 1 つのみ設定し、簡単に計算できる関数を使用しています。

param_x = {
    'parameter_id': 'x',
    'double_value_spec': {
        'min_value': -10.0,
        'max_value': 10.0
    }
}

metric_y = {
    'metric_id': 'y',
    'goal': 'MAXIMIZE'
}

study = {
    'display_name': STUDY_DISPLAY_NAME,
    'study_spec': {
      'algorithm': 'RANDOM_SEARCH',
      'parameters': [param_x],
      'metrics': [metric_y],
    }
}

スタディ構成を使用してスタディを作成するには、VizierServiceClient から次のリクエストを送信します。返された STUDY_NAME を使用して、スタディをクエリします。

vizier_client = aiplatform.gapic.VizierServiceClient(client_options=dict(api_endpoint=ENDPOINT))
study = vizier_client.create_study(parent=PARENT, study=study)
STUDY_NAME = study.name

スタディを表示する

スタディが作成されると、Google Cloud Console の [Vertex AI] セクションの [テスト] ページでスタディを確認できます。

[テスト] ページに移動

スタディを取得する

スタディを取得するには、次のリクエストを送信します。

vizier_client.get_study({'name': STUDY_NAME})

スタディを一覧表示する

特定のプロジェクトとリージョンのスタディを一覧表示するには、次のリクエストを送信します。

vizier_client.list_studies({'parent': PARENT})

提案されたトライアルを取得する

Vertex AI Vizier からトライアルの提案を取得するには、SUGGEST_COUNTCLIENT_ID を含むリクエストを作成します。リクエストを送信して、この情報を Vertex AI Vizier に渡します。

次のコマンドを使用してリクエストを作成します。SUGGEST_COUNT は、各リクエストから取得する必要がある提案数に変更します。

suggest_response = vizier_client.suggest_trials({
    'parent': STUDY_NAME,
    'suggestion_count': SUGGEST_COUNT,
    'client_id': CLIENT_ID
    })

suggest_trials は、トライアルを生成する長時間実行オペレーションを開始します。レスポンスから、Vertex AI Vizier がトライアルの提案に取り掛かっていることがわかります。

結果が返されるのを待つには、result() 関数を使用します。

suggest_response.result().trials

次の形式は、トライアルの例です。このトライアルは、パラメータ x に値 0.1 を使用することを提案しています。

name: "TRIAL_ID"
state: ACTIVE
parameters {
  parameter_id: "x"
  value {
    number_value: 0.1
  }
}
start_time {
  seconds: 1618011215
}

前のレスポンスの TRIAL_ID を使用してトライアルを取得します。

vizier_client.get_trial({
        'name': TRIAL_ID
      })

結果を評価する

トライアルの提案を受け取ったら、各トライアルを評価し、各結果を測定値として記録します。

たとえば、最適化しようとしている関数が y = x^2 の場合は、トライアルの推奨値 x を使用して関数を評価します。推奨値の 0.1 が使用され、関数の評価は y = 0.1 * 0.1 となり、結果は 0.01 になります。

測定値を追加する

トライアルの提案を評価して測定値を取得したら、この測定値をトライアルに追加します。

次のコマンドを使用して、測定値を保存し、リクエストを送信します。この例では、RESULT を測定値に置き換えます。最適化する関数が y = x^2 で、x の推奨値が 0.1 の場合、結果は 0.01 になります。

vizier_client.add_trial_measurement({
        'trial_name': TRIAL_ID,
        'measurement': {
            'metrics': [{'metric_id': 'y', 'value':RESULT }]
        }
    })

トライアルを完了する

トライアルの測定値をすべて追加したら、コマンドを送信してトライアルを完了する必要があります。

トライアルが完了したら、トライアルのみを完了するコマンドを送信するコマンドか、最終的な測定値を追加してトライアルを完了するコマンドを送信できます。

最終的な測定値なし

最終的な測定値を追加せずにトライアルを完了するには、次のリクエストを送信します。

vizier_client.complete_trial({
      'name': TRIAL_ID
  })

最終的な測定値あり

トライアルを完了して最終的な測定値を含めるには、次のコマンドを使用します。RESULT は最終的な測定値に置き換えます。

vizier_client.complete_trial({
      'name': TRIAL_ID
      'final_measurement': {
        'metrics': [{'metric_id': 'y', 'value': RESULT}]
      }
  })

トライアルを一覧表示する

特定のスタディのトライアルを一覧表示するには、次のリクエストを送信します。

vizier_client.list_trials({
    'parent': STUDY_NAME
})

保留中のトライアルをすべて完了したら、suggestTrials を呼び出してトライアルの提案をさらに取得し、評価プロセスを繰り返すことができるようになります。

最適なトライアルを一覧表示する

次の例は list_optimal_trials を示しています。これは、複数目標スタディに対してパレート最適なトライアルを返すか、単一目標スタディに対して最適なトライアルを返します。

vizier_client.list_optimal_trials({
    'parent': STUDY_NAME
})

次のステップ

  • studies の REST リファレンスを確認する。