Vertex AI Pipelines 用の Google Cloud プロジェクトの構成

Vertex AI Pipelines を使用して ML パイプラインをオーケストレートする前に、Google Cloud プロジェクトを設定する必要があります。一部のリソース(Vertex ML Metadata で使用されるメタデータ ストアなど)は、パイプラインの初回実行時に Google Cloud プロジェクトに作成されます。

以下の手順で Vertex AI Pipelines 用のプロジェクトを構成します。

  1. Google Cloud プロジェクトを作成して、Vertex AI Pipelines で使用できるように構成します

  2. サービス アカウントを指定しないと、Vertex AI Pipelines は Compute Engine のデフォルトのサービス アカウントを使用してパイプラインを実行します。Compute Engine のデフォルトのサービス アカウントの詳細については、Compute Engine のデフォルトのサービス アカウントの使用をご覧ください。

    パイプラインを実行するサービス アカウントを作成し、パイプラインの実行に必要な Google Cloud リソースに対するきめ細かな権限をアカウントに付与することをおすすめします。

  3. Vertex AI Pipelines は Cloud Storage を使用して、パイプライン実行のアーティファクトを保存します。Cloud Storage バケットを作成し、このバケットへのアクセス権をサービス アカウントに付与します

  4. Vertex AI Pipelines は、Vertex ML Metadata を使用して、パイプライン実行によって作成されたメタデータを保存します。パイプラインを初めて実行するときに、プロジェクトのメタデータ ストアが存在しない場合、Vertex AI はプロジェクトのメタデータ ストアを作成します。

    顧客管理の暗号鍵(CMEK)でデータを暗号化する場合は、パイプラインを実行する前に CMEK 鍵を使用してメタデータ ストアを手動で作成できます。プロジェクトに既存のデフォルト メタデータ ストアが存在しない場合は、Vertex AI はパイプラインの初回実行時に使用された CMEK 鍵を使用してプロジェクトのメタデータ ストアを作成します。メタデータ ストアが作成されると、パイプラインの実行で使用される CMEK 鍵とは異なる CMEK 鍵が使用されます。

Google Cloud プロジェクトを設定する

次の手順で Google Cloud プロジェクトを作成し、Vertex AI Pipelines で使用できるように構成します。

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI, Compute Engine, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. Update and install gcloud components:

    gcloud components update
    gcloud components install beta
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the Vertex AI, Compute Engine, and Cloud Storage APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.
  12. To initialize the gcloud CLI, run the following command:

    gcloud init
  13. Update and install gcloud components:

    gcloud components update
    gcloud components install beta

きめ細かい権限を持つサービス アカウントを構成する

パイプラインを実行するときに、サービス アカウントを指定できます。パイプライン実行は、このサービス アカウントの権限で機能します。

サービス アカウントを指定しないと、パイプライン実行で Compute Engine のデフォルトのサービス アカウントが使用されます。Compute Engine のデフォルトのサービス アカウントの詳細については、Compute Engine のデフォルトのサービス アカウントの使用をご覧ください。

  • 以下の手順でサービス アカウントを作成して、Google Cloud リソースに対するきめ細かい権限を付与します。

    1. 次のコマンドを実行して、サービス アカウントを作成します。

      gcloud iam service-accounts create SERVICE_ACCOUNT_ID \
          --description="DESCRIPTION" \
          --display-name="DISPLAY_NAME" \
          --project=PROJECT_ID
      

      次の値を置き換えます。

      • SERVICE_ACCOUNT_ID: サービス アカウントの ID。
      • DESCRIPTION: (省略可)サービス アカウントの説明。
      • DISPLAY_NAME: このサービス アカウントの表示名。
      • PROJECT_ID: サービス アカウントを作成するプロジェクト。

      詳しくは、サービス アカウントの作成をご覧ください。

    2. Vertex AI へのアクセス権をサービス アカウントに付与します。アクセス権の変更が反映されるまでに時間がかかることがあります。詳細については、アクセス権の変更の伝播をご覧ください。

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com" \
          --role="roles/aiplatform.user"
      

      次の値を置き換えます。

      • PROJECT_ID: サービス アカウントが作成されたプロジェクト。
      • SERVICE_ACCOUNT_ID: サービス アカウントの ID。
    3. Artifact Registry を使用して、コンテナ イメージと Kubeflow Pipelines テンプレートをホストできます。

      Artifact Registry の詳細については、Artifact Registry のドキュメントをご覧ください。

    4. パイプラインで使用する Google Cloud リソースへのアクセス権をサービス アカウントに付与します。

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com" \
          --role="ROLE_NAME"
      

      次の値を置き換えます。

      • PROJECT_ID: サービス アカウントが作成されたプロジェクト。
      • SERVICE_ACCOUNT_ID: サービス アカウントの ID。
      • ROLE_NAME: このサービス アカウントに付与する Identity and Access Management のロール。
    5. このサービス アカウントを使用して Vertex AI Pipelines でパイプラインを実行するには、次のコマンドを実行して、サービス アカウントの roles/iam.serviceAccountUser ロールをユーザー アカウントに付与します。

      gcloud iam service-accounts add-iam-policy-binding \
          SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
          --member="user:USER_EMAIL" \
          --role="roles/iam.serviceAccountUser"
      

      次の値を置き換えます。

      • SERVICE_ACCOUNT_ID: サービス アカウントの ID。
      • PROJECT_ID: サービス アカウントが作成されたプロジェクト。
      • USER_EMAIL: このサービス アカウントとしてパイプラインを実行するユーザーのメールアドレス。
  • Compute Engine のデフォルトのサービス アカウントを使用してパイプラインを実行する場合は、Compute Engine API を有効にして、デフォルトのサービス アカウントに Vertex AI へのアクセス権を付与します。アクセス権の変更が反映されるまでに時間がかかることがあります。詳細については、アクセス権の変更の伝播をご覧ください。

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/aiplatform.user"
    

    次の値を置き換えます。

    • PROJECT_ID: デフォルトのサービス アカウントが作成されたプロジェクト。
    • PROJECT_NUMBER: デフォルトのサービス アカウントが作成されたプロジェクト番号。

    Enable the API

パイプライン アーティファクト用の Cloud Storage バケットを構成する

Vertex AI Pipelines は、Cloud Storage を使用してパイプライン実行のアーティファクトを保存します。次の手順で Cloud Storage バケットを作成し、そのバケット内のオブジェクトに対する読み取り / 書き込みアクセス権をサービス アカウント(または Compute Engine のデフォルトのサービス アカウント)に付与します。

  1. 次のコマンドを実行して、パイプラインを実行するリージョンに Cloud Storage バケットを作成します。

    gcloud storage buckets create gs://BUCKET_NAME --location=BUCKET_LOCATION --project=PROJECT_ID
    

    次の値を置き換えます。

    • PROJECT_ID: バケットが関連付けられているプロジェクトを指定します。
    • BUCKET_LOCATION: バケットのロケーションを指定します(例: US-CENTRAL1)。
    • BUCKET_NAME: バケットに付ける名前。命名の要件に従う必要があります。例: my-bucket

    詳しくは、Cloud Storage バケットの作成をご覧ください。

  2. 前の手順で作成したバケット内のパイプライン アーティファクトに対する読み取り / 書き込み権限をサービス アカウントに付与するには、次のコマンドを実行します。

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
    --member=serviceAccount:SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/storage.objectUser
    

    次の値を置き換えます。

    • SERVICE_ACCOUNT_ID: サービス アカウントの ID。
    • PROJECT_ID: サービス アカウントが作成されたプロジェクト。
    • BUCKET_NAME: サービス アカウントにアクセス権を付与するバケットの名前。

    Compute Engine のデフォルトのサービス アカウントを使用してパイプラインを実行する場合は、gcloud iam service-accounts list コマンドを実行して、アカウントのプロジェクト番号を確認します。

    gcloud iam service-accounts list
    

    Compute Engine のデフォルトのサービス アカウントの名前は PROJECT_NUMBER-compute@developer.gserviceaccount.com です。

    次のコマンドを実行して、前の手順で作成したバケット内のパイプライン アーティファクトに対する読み取り / 書き込み権限を Compute Engine のデフォルト サービス アカウントに付与します。

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
    --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
    --role=roles/storage.objectUser
    

    次の値を置き換えます。

    • PROJECT_NUMBER: Compute Engine のデフォルトのサービス アカウントのプロジェクト番号。
    • BUCKET_NAME: サービス アカウントにアクセス権を付与するバケットの名前。

    詳しくは、Cloud Storage バケットへのアクセスの制御をご覧ください。

CMEK を使用するメタデータ ストアの作成(省略可)

次の手順で CMEK を作成し、この CMEK を使用する Vertex ML Metadata メタデータ ストアを設定します。

  1. Cloud Key Management Service を使用して顧客管理の暗号鍵を構成します。

  2. 次の REST 呼び出しを行うと、CMEK を使用してプロジェクトのデフォルトのメタデータ ストアを作成できます。

    リクエストのデータを使用する前に、次のように置き換えます。

    • LOCATION_ID: 使用するリージョン。
    • PROJECT_ID: 実際のプロジェクト ID
    • KEY_RING: 暗号鍵が存在する Cloud Key Management Service のキーリングの名前。
    • KEY_NAME: このメタデータ ストアに使用する暗号鍵の名前。

    HTTP メソッドと URL:

    POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/metadataStores?metadata_store_id=default

    リクエストの本文(JSON):

    {
      "encryption_spec": {
        "kms_key_name": "projects/PROJECT_ID/locations/LOCATION_ID/keyRings/KEY_RING/cryptoKeys/KEY_NAME"
      },
    }
    

    リクエストを送信するには、次のいずれかのオプションを開きます。

    次のような JSON レスポンスが返されます。

    {
      "name": "projects/PROJECT_ID/locations/LOCATION_ID/operations/OPERATIONS_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateMetadataStoreOperationMetadata",
        "genericMetadata": {
          "createTime": "2021-05-18T18:47:14.494997Z",
          "updateTime": "2021-05-18T18:47:14.494997Z"
        }
      }
    }