Private Service Connect を使用してオンプレミスから Vertex AI Online Prediction にアクセスする


オンプレミス ホストは、公共のインターネットから、あるいは限定公開で Cloud VPN や Cloud Interconnect で Private Service Connect(PSC)を使用するハイブリッド ネットワーク アーキテクチャから、Vertex AI Online Prediction エンドポイントにアクセスできます。どちらのオプションも SSL / TLS 暗号化に対応しています。ただし、プライベート オプションはパフォーマンスが大幅に向上するため、クリティカルなアプリケーションに適しています。

このチュートリアルでは、高可用性 VPN(HA VPN)を使用して、Cloud NAT からのオンライン予測エンドポイントへの公開アクセス、および、マルチクラウドとオンプレミスのプライベート接続の基盤として機能する 2 つの Virtual Private Cloud ネットワーク間の限定公開アクセスの両方でオンライン予測エンドポイントにアクセスします。

このチュートリアルは、Vertex AI、Virtual Private Cloud(VPC)、Google Cloud コンソール、Cloud Shell に精通している企業のネットワーク管理者、データ サイエンティスト、研究者を対象としています。Vertex AI Workbench の使用経験があると役立ちますが、必須ではありません。

Private Service Connect からオンライン予測エンドポイントにアクセスするアーキテクチャ図。

目標

  • 上の図のように、2 つの Virtual Private Cloud(VPC)ネットワークを作成します。
    • 一つ(on-prem-vpc)は、オンプレミス ネットワークを表します。
    • もう一つ(aiml-vpc)は、Vertex AI Online Prediction の作成とデプロイに使用します。
  • HA VPN ゲートウェイ、Cloud VPN トンネル、Cloud Router をデプロイして、aiml-vpcon-prem-vpc に接続します。
  • Vertex AI Online Prediction を作成してデプロイします。
  • Private Service Connect(PSC)エンドポイントを作成して、限定公開のオンライン予測リクエストをデプロイ済みモデルに転送します。
  • Private Service Connect エンドポイントのルートを on-prem-vpc に通知するために、aiml-vpc に Cloud Router のカスタムルート アドバタイズを構成します。
  • クライアント アプリケーションを表す 2 つの Compute Engine VM インスタンスを on-prem-vpc に作成します。
    • 一つ(nat-client)は、公共のインターネットで(Cloud NAT から)オンライン予測リクエストを送信します。図では、このアクセス方法が赤い矢印と番号 1 で示されています。
    • もう一つ(private-client)は、HA VPN で限定公開で予測リクエストを送信します。このアクセス方法は、緑色の矢印と数字 2 で示しています。

料金

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. Google Cloud コンソールでプロジェクトの選択ページに移動します。

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

  2. Google Cloud プロジェクトを選択または作成します。

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. このチュートリアルで説明するコマンドを実行するために、Cloud Shell を開きます。Cloud Shell は Google Cloud のインタラクティブなシェル環境であり、ウェブブラウザからプロジェクトやリソースを管理できます。
  5. Cloud Shell で現在のプロジェクトを Google Cloud プロジェクト ID に設定してから、同じプロジェクト ID を projectid シェル変数に保存します。
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    PROJECT_ID は実際のプロジェクト ID に置き換えます。プロジェクト ID は Google Cloud コンソールでも確認できます。詳細については、プロジェクト ID を確認するをご覧ください。
  6. Google アカウントにロールを付与します。次の IAM ロールごとに次のコマンドを 1 回実行します。 roles/appengine.appViewer, roles/artifactregistry.admin, roles/compute.instanceAdmin.v1, roles/compute.networkAdmin, roles/compute.securityAdmin, roles/dns.admin, roles/iap.admin, roles/iap.tunnelResourceAccessor, roles/notebooks.admin, roles/oauthconfig.editor, roles/resourcemanager.projectIamAdmin, roles/servicemanagement.quotaAdmin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/servicedirectory.editor, roles/storage.admin, roles/aiplatform.user

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • PROJECT_ID は、実際のプロジェクト ID に置き換えます。
    • EMAIL_ADDRESS は実際のメールアドレスに置き換えます。
    • ROLE は、個々のロールに置き換えます。
  7. DNS、Artifact Registry、IAM、Compute Engine、Notebooks、Vertex AI API を有効にします。

    gcloud services enable dns.googleapis.comartifactregistry.googleapis.comiam.googleapis.comcompute.googleapis.comnotebooks.googleapis.comaiplatform.googleapis.com

VPC ネットワークを作成する

このセクションでは、2 つの VPC ネットワークを作成します。一つはオンライン予測モデルの作成とエンドポイントへのデプロイ用、もう一つはそのエンドポイントへの限定公開アクセス用です。2 つの VPC ネットワークに、それぞれ Cloud Router と Cloud NAT ゲートウェイを作成します。Cloud NAT ゲートウェイは、外部 IP アドレスを持たない Compute Engine 仮想マシン(VM)インスタンスの送信接続を提供します。

オンライン予測エンドポイント(aiml-vpc)用の VPC ネットワークを作成する

  1. VPC ネットワークを作成します。

    gcloud compute networks create aiml-vpc --project=$projectid --subnet-mode=custom
    
  2. プライマリ IPv4 範囲が 172.16.10.0/28workbench-subnet という名前のサブネットを作成します。

    gcloud compute networks subnets create workbench-subnet --project=$projectid --range=172.16.10.0/28 --network=aiml-vpc --region=us-central1 --enable-private-ip-google-access
    
  3. cloud-router-us-central1-aiml-nat という名前のリージョン Cloud Router を作成します。

    gcloud compute routers create cloud-router-us-central1-aiml-nat --network aiml-vpc --region us-central1
    
  4. Cloud Router に Cloud NAT ゲートウェイを追加します。

    gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
    

「オンプレミス」VPC ネットワーク(on-prem-vpc)を作成します。

  1. VPC ネットワークを作成します。

    gcloud compute networks create on-prem-vpc --project=$projectid --subnet-mode=custom
    
  2. プライマリ IPv4 範囲が 192.168.10.0/28nat-subnet という名前のサブネットを作成します。

    gcloud compute networks subnets create nat-subnet --project=$projectid --range=192.168.10.0/28 --network=on-prem-vpc --region=us-central1
    
  3. プライマリ IPv4 範囲が 192.168.20.0/28private-ip-subnet という名前のサブネットを作成します。

    gcloud compute networks subnets create private-ip-subnet --project=$projectid --range=192.168.20.0/28 --network=on-prem-vpc --region=us-central1
    
  4. cloud-router-us-central1-on-prem-nat という名前のリージョン Cloud Router を作成します。

    gcloud compute routers create cloud-router-us-central1-on-prem-nat --network on-prem-vpc --region us-central1
    
  5. Cloud Router に Cloud NAT ゲートウェイを追加します。

    gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-on-prem-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
    

Private Service Connect(PSC)エンドポイントを作成する

このセクションでは、on-prem-vpc ネットワーク内の VM インスタンスが Vertex AI API を介してオンライン予測エンドポイントにアクセスするために使用する Private Service Connect(PSC)エンドポイントを作成します。Private Service Connect(PSC)エンドポイントは、on-prem-vpc ネットワーク内のクライアントが直接アクセスできる内部 IP アドレスです。このエンドポイントは、PSC エンドポイントの IP アドレスに一致するネットワーク トラフィックを Google API のバンドルに転送する転送ルールをデプロイすることで作成されます。PSC エンドポイントの IP アドレス(100.100.10.10)は、後のステップでオンプレミス ネットワークへのカスタム ルーター アドバタイズとして aiml-vpc-cloud-router-vpn からアドバタイズされます。

  1. PSC エンドポイントの IP アドレスを予約します。

    gcloud compute addresses create psc-ip \
       --global \
       --purpose=PRIVATE_SERVICE_CONNECT \
       --addresses=100.100.10.10 \
       --network=aiml-vpc
    
  2. PSC エンドポイントを作成します。

    gcloud compute forwarding-rules create pscvertex \
     --global \
     --network=aiml-vpc \
     --address=psc-ip \
     --target-google-apis-bundle=all-apis
    
  3. 構成した PSC エンドポイントを一覧表示し、pscvertex エンドポイントが作成されたことを確認します。

    gcloud compute forwarding-rules list  \
     --filter target="(all-apis OR vpc-sc)" --global
    
  4. 構成された PSC エンドポイントの詳細を取得し、IP アドレスが 100.100.10.10 であることを確認します。

    gcloud compute forwarding-rules describe \
     pscvertex --global
    

ハイブリッド接続を構成する

このセクションでは、相互に接続する 2 つの(HA VPN)ゲートウェイを作成します。各ゲートウェイには、Cloud Router と VPN トンネルのペアが含まれます。

  1. aiml-vpc VPC ネットワークに HA VPN ゲートウェイを作成します。

    gcloud compute vpn-gateways create aiml-vpn-gw \
       --network=aiml-vpc\
       --region=us-central1
    
  2. on-prem-vpc VPC ネットワークに HA VPN ゲートウェイを作成します。

    gcloud compute vpn-gateways create on-prem-vpn-gw \
       --network=on-prem-vpc\
       --region=us-central1
    
  3. Google Cloud コンソールで、[VPN] ページに移動します。

    [VPN] に移動

  4. [VPN] ページで、[Cloud VPN ゲートウェイ] タブをクリックします。

  5. VPN ゲートウェイのリストに 2 つのゲートウェイがあり、それぞれに 2 つの IP アドレスがあることを確認します。

  6. Cloud Shell で、aiml-vpc Virtual Private Cloud ネットワーク用の Cloud Router を作成します。

    gcloud compute routers create aiml-cr-us-central1 \
       --region=us-central1 \
       --network=aiml-vpc\
       --asn=65001
    
  7. on-prem-vpc Virtual Private Cloud ネットワーク用の Cloud Router を作成します。

    gcloud compute routers create on-prem-cr-us-central1 \
       --region=us-central1 \
       --network=on-prem-vpc \
       --asn=65002
    

aiml-vpc 用の VPN トンネルを作成する

  1. aiml-vpc-tunnel0 という名前の VPN トンネルを作成します。

    gcloud compute vpn-tunnels create aiml-vpc-tunnel0 \
       --peer-gcp-gateway on-prem-vpn-gw \
       --region us-central1 \
       --ike-version 2 \
       --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
       --router aiml-cr-us-central1 \
       --vpn-gateway aiml-vpn-gw \
       --interface 0
    
  2. aiml-vpc-tunnel1 という名前の VPN トンネルを作成します。

    gcloud compute vpn-tunnels create aiml-vpc-tunnel1 \
       --peer-gcp-gateway on-prem-vpn-gw \
       --region us-central1 \
       --ike-version 2 \
       --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
       --router aiml-cr-us-central1 \
       --vpn-gateway aiml-vpn-gw \
       --interface 1
    

on-prem-vpc 用の VPN トンネルを作成する

  1. on-prem-vpc-tunnel0 という名前の VPN トンネルを作成します。

    gcloud compute vpn-tunnels create on-prem-tunnel0 \
       --peer-gcp-gateway aiml-vpn-gw \
       --region us-central1 \
       --ike-version 2 \
       --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
       --router on-prem-cr-us-central1 \
       --vpn-gateway on-prem-vpn-gw \
       --interface 0
    
  2. on-prem-vpc-tunnel1 という名前の VPN トンネルを作成します。

    gcloud compute vpn-tunnels create on-prem-tunnel1 \
       --peer-gcp-gateway aiml-vpn-gw \
       --region us-central1 \
       --ike-version 2 \
       --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
       --router on-prem-cr-us-central1 \
       --vpn-gateway on-prem-vpn-gw \
       --interface 1
    
  3. Google Cloud コンソールで、[VPN] ページに移動します。

    [VPN] に移動

  4. [VPN] ページで、[Cloud VPN トンネル] タブをクリックします。

  5. VPN トンネルのリストで、4 つの VPN トンネルが確立されていることを確認します。

BGP セッションを確立する

Cloud Router は、Border Gateway Protocol(BGP)を使用して、VPC ネットワーク(この場合は aiml-vpc)とオンプレミス ネットワーク(on-prem-vpc で表される)間のルートを交換します。Cloud Router で、オンプレミス ルーターのインターフェースと BGP ピアを構成します。インターフェースと BGP ピア構成は、BGP セッションを形成します。このセクションでは、aiml-vpc に 2 つ、on-prem-vpc に 2 つの BGP セッションを作成します。

aiml-vpc の BGP セッションを確立する

  1. Cloud Shell で、最初の BGP インターフェースを作成します。

    gcloud compute routers add-interface aiml-cr-us-central1 \
       --interface-name if-tunnel0-to-onprem \
       --ip-address 169.254.1.1 \
       --mask-length 30 \
       --vpn-tunnel aiml-vpc-tunnel0 \
       --region us-central1
    
  2. 最初の BGP ピアを作成します。

    gcloud compute routers add-bgp-peer aiml-cr-us-central1 \
       --peer-name bgp-on-premises-tunnel0 \
       --interface if-tunnel1-to-onprem \
       --peer-ip-address 169.254.1.2 \
       --peer-asn 65002 \
       --region us-central1
    
  3. 2 つ目の BGP インターフェースを作成します。

    gcloud compute routers add-interface aiml-cr-us-central1 \
       --interface-name if-tunnel1-to-onprem \
       --ip-address 169.254.2.1 \
       --mask-length 30 \
       --vpn-tunnel aiml-vpc-tunnel1 \
       --region us-central1
    
  4. 2 つ目の BGP ピアを作成します。

    gcloud compute routers add-bgp-peer aiml-cr-us-central1 \
       --peer-name bgp-on-premises-tunnel1 \
       --interface if-tunnel2-to-onprem \
       --peer-ip-address 169.254.2.2 \
       --peer-asn 65002 \
       --region us-central1
    

on-prem-vpc の BGP セッションを確立する

  1. 最初の BGP インターフェースを作成します。

    gcloud compute routers add-interface on-prem-cr-us-central1 \
       --interface-name if-tunnel0-to-aiml-vpc\
       --ip-address 169.254.1.2 \
       --mask-length 30 \
       --vpn-tunnel on-prem-tunnel0 \
       --region us-central1
    
  2. 最初の BGP ピアを作成します。

    gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
       --peer-name bgp-aiml-vpc-tunnel0 \
       --interface if-tunnel1-to-aiml-vpc\
       --peer-ip-address 169.254.1.1 \
       --peer-asn 65001 \
       --region us-central1
    
  3. 2 つ目の BGP インターフェースを作成します。

    gcloud compute routers add-interface on-prem-cr-us-central1 \
       --interface-name if-tunnel1-to-aiml-vpc\
       --ip-address 169.254.2.2 \
       --mask-length 30 \
       --vpn-tunnel on-prem-tunnel1 \
       --region us-central1
    
  4. 2 つ目の BGP ピアを作成します。

    gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
       --peer-name bgp-aiml-vpc-tunnel1\
       --interface if-tunnel2-to-aiml-vpc\
       --peer-ip-address 169.254.2.1 \
       --peer-asn 65001 \
       --region us-central1
    

BGP セッションの作成を確認する

  1. Google Cloud コンソールで、[VPN] ページに移動します。

    [VPN] に移動

  2. [VPN] ページで、[Cloud VPN トンネル] タブをクリックします。

  3. VPN トンネルのリストで、4 つのトンネルのそれぞれの [BGP セッションのステータス] 列の値が、[BGP セッションの構成] から [BGP 確立済み] に変更されたことが確認できるはずです。新しい値を表示するには、Google Cloud コンソールのブラウザタブを更新する必要があります。

aiml-vpc が HA VPN 経由でサブネット ルートを学習したことを確認する

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. VPC ネットワークのリストで、aiml-vpc をクリックします。

  3. [ルート] タブをクリックします。

  4. [リージョン] リストで [us-central1(アイオワ)] を選択し、[表示] をクリックします。

  5. [宛先 IP 範囲] 列で、aiml-vpc VPC ネットワークが on-prem-vpc VPC ネットワークの nat-subnet サブネット(192.168.10.0/28)と private-ip-subnet192.168.20.0/28)サブネットからルートを学習したことを確認します。

on-prem-vpc が HA VPN 経由でサブネット ルートを学習したことを確認する

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. VPC ネットワークのリストで、on-prem-vpc をクリックします。

  3. [ルート] タブをクリックします。

  4. [リージョン] リストで [us-central1(アイオワ)] を選択し、[表示] をクリックします。

  5. [宛先 IP 範囲] 列で、on-prem-vpc VPC ネットワークが aiml-vpc VPC ネットワークの workbench-subnet サブネット(172.16.10.0/28)からルートを学習したことを確認します。

aiml-vpc のカスタムルート アドバタイズを作成する

サブネットが VPC ネットワークで構成されていないため、Private Service Connect エンドポイントの IP アドレスは aiml-cr-us-central1 Cloud Router によって自動的にアドバタイズされません。

したがって、エンドポイント IP アドレス 100.100.10.10 の aiml-cr-us-central Cloud Router から、BGP から on-prem-vpc 経由でオンプレミス環境にアドバタイズされるカスタムルート アドバタイズを作成する必要があります。

  1. Google Cloud コンソールで [Cloud Router] ページに移動します。

    [Cloud Router] に移動

  2. [Cloud Router] リストで aiml-cr-us-central1 をクリックします。

  3. [ルーターの詳細] ページで、[ 編集] をクリックします。

  4. [アドバタイズされたルート] セクションの [ルート] で、[カスタムルートの作成] を選択します。

  5. [カスタムルートの追加] をクリックします。

  6. [ソース] で [カスタム IP 範囲] を選択します。

  7. [IP アドレス範囲] に「100.100.10.10」と入力します。

  8. [説明] に「Private Service Connect Endpoint IP」と入力します。

  9. [完了] をクリックし、[保存] をクリックします。

on-prem-vpc が HA VPN 経由で PSC エンドポイント IP アドレスを学習したことを確認する

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. VPC ネットワークのリストで、on-prem-vpc をクリックします。

  3. [ルート] タブをクリックします。

  4. [リージョン] リストで [us-central1(アイオワ)] を選択し、[表示] をクリックします。

  5. [宛先 IP 範囲] 列で、on-prem-vpc VPC ネットワークが PSC エンドポイントの IP アドレス(100.100.10.10)を学習していることを確認します。

on-prem-vpc のカスタムルート アドバタイズを作成する

on-prem-vpc Cloud Router はデフォルトですべてのサブネットをアドバタイズしますが、必要なのは private-ip-subnet サブネットのみです。

次のセクションでは、on-prem-cr-us-central1 Cloud Router からのルート アドバタイズを更新します。

  1. Google Cloud コンソールで [Cloud Router] ページに移動します。

    [Cloud Router] に移動

  2. [Cloud Router] リストで on-prem-cr-us-central1 をクリックします。

  3. [ルーターの詳細] ページで、[ 編集] をクリックします。

  4. [アドバタイズされたルート] セクションの [ルート] で、[カスタムルートの作成] を選択します。

  5. [Cloud Router に表示されるすべてのサブネットにアドバタイズする] チェックボックスがオンになっている場合は、チェックボックスをクリアします。

  6. [カスタムルートの追加] をクリックします。

  7. [ソース] で [カスタム IP 範囲] を選択します。

  8. [IP アドレス範囲] に「192.168.20.0/28」と入力します。

  9. [説明] に「Private Service Connect Endpoint IP subnet (private-ip-subnet)」と入力します。

  10. [完了] をクリックし、[保存] をクリックします。

aiml-vpcon-prem-vpc から private-ip-subnet ルートを学習したことを確認する

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. VPC ネットワークのリストで、aiml-vpc をクリックします。

  3. [ルート] タブをクリックします。

  4. [リージョン] リストで [us-central1(アイオワ)] を選択し、[表示] をクリックします。

  5. [送信先 IP 範囲] 列で、aiml-vpc VPC ネットワークが private-ip-subnet ルート(192.168.20.0/28)を学習していることを確認します。

テスト用の VM インスタンスを作成する

ユーザーが管理するサービス アカウントを作成する

Google Cloud APIs を呼び出す必要があるアプリケーションがある場合、Google はアプリケーションまたはワークロードが実行されている VM にユーザー管理のサービス アカウントを接続することをおすすめします。したがって、このセクションでは、このチュートリアルの後半で作成する VM インスタンスに適用するためのユーザー管理のサービス アカウントを作成します。

  1. Cloud Shell で、サービス アカウントを作成します。

    gcloud iam service-accounts create gce-vertex-sa \
       --description="service account for vertex" \
       --display-name="gce-vertex-sa"
    
  2. サービス アカウントに Compute インスタンス管理者(v1)(roles/compute.instanceAdmin.v1の IAM ロールを割り当てます。

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:gce-vertex-sa@$projectid.iam.gserviceaccount.com" --role="roles/compute.instanceAdmin.v1"
    
  3. サービス アカウントに Vertex AI ユーザー(roles/aiplatform.userの IAM ロールを割り当てます。

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:gce-vertex-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
    

テスト用の VM インスタンスを作成する

この手順では、Vertex AI API に到達するためのさまざまなメソッドを検証するテスト VM インスタンスを作成します。具体的には次のとおりです。

  • nat-client インスタンスは、Cloud NAT を使用して Vertex AI を解決し、公共のインターネット経由でオンライン予測エンドポイントにアクセスします。
  • private-client インスタンスは、Private Service Connect IP アドレス 100.100.10.10 を使用して、HA VPN 経由でオンライン予測エンドポイントにアクセスします。

Identity-Aware Proxy(IAP)に VM インスタンスへの接続を許可するには、次のファイアウォール ルールを作成します。

  • IAP からアクセスできるようにするすべての VM インスタンスに適用されます。
  • IP 範囲 35.235.240.0/20 からポート 22 を経由する TCP トラフィックを許可します。この範囲には、IAP が TCP 転送に使用するすべての IP アドレスが含まれています。
  1. nat-client VM インスタンスを作成します。

    gcloud compute instances create nat-client \
       --zone=us-central1-a \
       --image-family=debian-11 \
       --image-project=debian-cloud \
       --subnet=nat-subnet \
       --service-account=gce-vertex-sa@$projectid.iam.gserviceaccount.com \
       --scopes=http://www.googleapis.com/auth/cloud-platform \
       --no-address \
       --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install tcpdump dnsutils -y"
    
  2. private-client VM インスタンスを作成します。

    gcloud compute instances create private-client \
       --zone=us-central1-a \
       --image-family=debian-11 \
       --image-project=debian-cloud \
       --subnet=private-ip-subnet \
       --service-account=gce-vertex-sa@$projectid.iam.gserviceaccount.com \
       --scopes=http://www.googleapis.com/auth/cloud-platform \
       --no-address \
       --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install tcpdump dnsutils -y"
    
  3. IAP ファイアウォール ルールを作成します。

    gcloud compute firewall-rules create ssh-iap-on-prem-vpc \
       --network on-prem-vpc \
       --allow tcp:22 \
       --source-ranges=35.235.240.0/20
    

ユーザー管理ノートブック インスタンスを作成する

ユーザー管理のサービス アカウントを作成する

Vertex AI Workbench のユーザー管理ノートブック インスタンスを作成する場合は、Compute Engine のデフォルトのサービス アカウントを使用する代わりに、ユーザー管理のサービス アカウントを指定することを強くおすすめします。Compute Engine のデフォルトのサービス アカウント(インスタンス ユーザーとして指定するすべてのユーザー)には、Google Cloud プロジェクトの編集者のロール(roles/editor)が付与されます。この動作を無効にするには、デフォルトのサービス アカウントに対するロールの自動付与を無効にします

  1. Cloud Shell で、user-managed-notebook-sa という名前のサービス アカウントを作成します。

    gcloud iam service-accounts create user-managed-notebook-sa \
       --display-name="user-managed-notebook-sa"
    
  2. サービス アカウントにストレージ管理者(roles/storage.adminの IAM ロールを割り当てます。

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"
    
  3. サービス アカウントに Vertex AI ユーザー(roles/aiplatform.userの IAM ロールを割り当てます。

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
    
  4. サービス アカウントに Artifact Registry 管理者の IAM ロールを割り当てます。

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"
    

ユーザー管理のノートブック インスタンスを作成する

user-managed-notebook-sa サービス アカウントを指定して、ユーザー管理のノートブック インスタンスを作成します。

  1. ユーザー管理のノートブック インスタンスを作成するには:

    gcloud notebooks instances create workbench-tutorial \
       --vm-image-project=deeplearning-platform-release \
       --vm-image-family=common-cpu-notebooks \
       --machine-type=n1-standard-4 \
       --location=us-central1-a \
       --subnet-region=us-central1 \
       --subnet=workbench-subnet \
       --no-public-ip \
       --service-account=user-managed-notebook-sa@$projectid.iam.gserviceaccount.com
    

オンライン予測モデルを作成してデプロイする

環境を準備する

  1. Google Cloud コンソールで、[Vertex AI Workbench] ページの [ユーザー管理のノートブック] タブに移動します。

    [ユーザー管理のノートブック] に移動

  2. ユーザー管理のノートブック インスタンス名の横にある [JupyterLab を開く] をクリックします。

    ユーザーが管理するノートブック インスタンスで JupyterLab が表示されます。

    このセクションの残りの部分では、モデルのデプロイまで、Google Cloud コンソールや Cloud Shell ではなく、Jupyterlab で作業します。

  3. [ファイル > 新規 > ターミナル] を選択します。

  4. (Cloud Shell ではなく)JupyterLab ターミナルで、プロジェクトの環境変数を定義します。PROJECT_ID は、プロジェクト ID で置き換えてください。

    PROJECT_ID=PROJECT_ID
    
  5. cpr-codelabcd という新しいディレクトリを(引き続き JupyterLab ターミナルに)作成します。

    mkdir cpr-codelab
    cd cpr-codelab
    
  6.  ファイル ブラウザで、新しい cpr-codelab フォルダをダブルクリックします。

    このフォルダがファイル ブラウザに表示されない場合は、Google Cloud コンソールのブラウザタブを更新してからもう一度お試しください。

  7. [File] > [New] > [Notebook] の順に選択します。

  8. [Select Kernel] メニューから [Python 3] を選択し、[Select] をクリックします。

  9. 新しいノートブック ファイルの名前を次のように変更します。

    [ファイル ブラウザ] で、Untitled.ipynb ファイル アイコンを右クリックし、「task.ipynb」と入力します。

    cpr-codelab ディレクトリは次のようになります。

    + cpr-codelab/
       + task.ipynb
    

    次の手順では、新しいノートブック セルを作成し、コードを貼り付けてセルを実行することで、Jupyterlab ノートブックでモデルを作成します。

  10. 次のように依存関係をインストールします。

    1. 新しいノートブックを開くと、コードを入力できるデフォルトのコードセルが表示されます。[ ]: の後にテキスト フィールドが続いている形式です。そのテキスト フィールドにコードを貼り付けます。

      次のコードをセルに貼り付け、 [Run the selectedcell and advance] をクリックして、次の手順で入力として使用する requirements.txt ファイルを作成します。

      %%writefile requirements.txt
      fastapi
      uvicorn==0.17.6
      joblib~=1.1.1
      numpy>=1.17.3, <1.24.0
      scikit-learn~=1.0.0
      pandas
      google-cloud-storage>=2.2.1,<3.0.0dev
      google-cloud-aiplatform[prediction]>=1.18.2
      
    2. このステップと以下の各ステップでは、 [Insert a cell below] を選択し、コードをセルに貼り付けて、 [Run selected cells and advance] をクリックします。

      Pip を使用してノートブック インスタンスに依存関係をインストールします。

      !pip install -U --user -r requirements.txt
      
    3. インストールが完了したら、[Kernel] > [Restart Kernel] の順に選択してカーネルを再起動し、ライブラリをインポートできることを確認します。

    4. 次のコードを新しいノートブック セルに貼り付け、モデルと前処理アーティファクトを保存するディレクトリを作成します。

      USER_SRC_DIR = "src_dir"
      !mkdir $USER_SRC_DIR
      !mkdir model_artifacts
      # copy the requirements to the source dir
      !cp requirements.txt $USER_SRC_DIR/requirements.txt
      

     ファイル ブラウザで、cpr-codelab ディレクトリ構造は次のようになります。

    + cpr-codelab/
      + model_artifacts/
      + src_dir/
         + requirements.txt
      + requirements.txt
      + task.ipynb
    

モデルをトレーニングする

引き続き task.ipynb ノートブックにコードセルを追加し、新しいセルごとに次のコードを貼り付けて実行します。

  1. ライブラリをインポートします。

    import seaborn as sns
    import numpy as np
    import pandas as pd
    
    from sklearn import preprocessing
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.pipeline import make_pipeline
    from sklearn.compose import make_column_transformer
    
    import joblib
    import logging
    
    # set logging to see the docker container logs
    logging.basicConfig(level=logging.INFO)
    
  2. 次の変数を定義します。PROJECT_ID は、実際のプロジェクト ID に置き換えます。

    REGION = "us-central1"
    MODEL_ARTIFACT_DIR = "sklearn-model-artifacts"
    REPOSITORY = "diamonds"
    IMAGE = "sklearn-image"
    MODEL_DISPLAY_NAME = "diamonds-cpr"
    PROJECT_ID = "PROJECT_ID"
    BUCKET_NAME = "gs://PROJECT_ID-cpr-bucket"
    
  3. Cloud Storage バケットを作成します。

    gsutil mb -l us-central1 $BUCKET_NAME
    
  4. Seaborn ライブラリからデータを読み込み、2 つのデータフレーム(1 つは特徴付き、もう 1 つはラベル付き)を作成します。

    data = sns.load_dataset('diamonds', cache=True, data_home=None)
    
    label = 'price'
    
    y_train = data['price']
    x_train = data.drop(columns=['price'])
    
  5. トレーニング データを調べて、各行が菱形を表していることを確認します。

    x_train.head()
    
  6. ラベルを確認します。これは対応する価格です。

    y_train.head()
    
  7. sklearn 列変換をワンホット エンコーディングのカテゴリ特徴量に変換するように定義し、数値特徴をスケーリングします。

    column_transform = make_column_transformer(
       (preprocessing.OneHotEncoder(sparse=False), [1,2,3]),
       (preprocessing.StandardScaler(), [0,4,5,6,7,8]))
    
  8. ランダム フォレスト モデルを定義します。

    regr = RandomForestRegressor(max_depth=10, random_state=0)
    
  9. sklearn パイプラインを作成します。このパイプラインは入力データを受け取り、エンコードとスケーリングを行い、モデルに渡します。

    my_pipeline = make_pipeline(column_transform, regr)
    
  10. モデルをトレーニングします。

    my_pipeline.fit(x_train, y_train)
    
  11. モデルで predict メソッドを呼び出して、テストサンプルを渡します。

    my_pipeline.predict([[0.23, 'Ideal', 'E', 'SI2', 61.5, 55.0, 3.95, 3.98, 2.43]])
    

    "X does not have valid feature names, but" のような警告が表示されることがありますが、無視してかまいません。

  12. パイプラインを model_artifacts ディレクトリに保存し、Cloud Storage バケットにコピーします。

    joblib.dump(my_pipeline, 'model_artifacts/model.joblib')
    
    !gsutil cp model_artifacts/model.joblib {BUCKET_NAME}/{MODEL_ARTIFACT_DIR}/
    

前処理アーティファクトを保存する

  1. 前処理アーティファクトを作成します。このアーティファクトは、モデルサーバーの起動時にカスタム コンテナに読み込まれます。前処理アーティファクトは、ほぼすべての形式(pickle ファイルなど)にできますが、この場合は、JSON ファイルにディクショナリを書き込みます。

    clarity_dict={"Flawless": "FL",
       "Internally Flawless": "IF",
       "Very Very Slightly Included": "VVS1",
       "Very Slightly Included": "VS2",
       "Slightly Included": "S12",
       "Included": "I3"}
    

CPR モデルサーバーを使用してカスタム サービング コンテナを構築する

  1. トレーニング データの clarity 特徴は、常に省略形式(「Flawless」ではなく「FL」など)でした。サービス提供時に、この機能のデータも省略されていることを確認します。モデルは「FL」をワンホット エンコードする方法を認識していますが、「Flawless」は認識していないことが要因です。このカスタム前処理ロジックは後で記述します。ここでは、このルックアップ テーブルを JSON ファイルに保存してから、Cloud Storage バケットに書き込みます。

    import json
    with open("model_artifacts/preprocessor.json", "w") as f:
       json.dump(clarity_dict, f)
    
    !gsutil cp model_artifacts/preprocessor.json {BUCKET_NAME}/{MODEL_ARTIFACT_DIR}/
    

     ファイル ブラウザで、ディレクトリ構造は次のようになります。

    + cpr-codelab/
    + model_artifacts/
       + model.joblib
       + preprocessor.json
    + src_dir/
       + requirements.txt
    + requirements.txt
    + task.ipynb
    
  2. ノートブックに次のコードを貼り付けて実行し、SklearnPredictor をサブクラス化して、src_dir/ の Python ファイルに書き込みます。この例では、読み込み、前処理、後処理の各メソッドのみをカスタマイズし、予測メソッドはカスタマイズしません。

    %%writefile $USER_SRC_DIR/predictor.py
    
    import joblib
    import numpy as np
    import json
    
    from google.cloud import storage
    from google.cloud.aiplatform.prediction.sklearn.predictor import SklearnPredictor
    
    class CprPredictor(SklearnPredictor):
    
     def __init__(self):
         return
    
     def load(self, artifacts_uri: str) -> None:
         """Loads the sklearn pipeline and preprocessing artifact."""
    
         super().load(artifacts_uri)
    
         # open preprocessing artifact
         with open("preprocessor.json", "rb") as f:
             self._preprocessor = json.load(f)
    
     def preprocess(self, prediction_input: np.ndarray) -> np.ndarray:
         """Performs preprocessing by checking if clarity feature is in abbreviated form."""
    
         inputs = super().preprocess(prediction_input)
    
         for sample in inputs:
             if sample[3] not in self._preprocessor.values():
                 sample[3] = self._preprocessor[sample[3]]
         return inputs
    
     def postprocess(self, prediction_results: np.ndarray) -> dict:
         """Performs postprocessing by rounding predictions and converting to str."""
    
         return {"predictions": [f"${value}" for value in np.round(prediction_results)]}
    
  3. Vertex AI SDK for Python でカスタム予測ルーティンを使用してイメージをビルドします。Dockerfile が生成され、イメージがビルドされます。

    from google.cloud import aiplatform
    
    aiplatform.init(project=PROJECT_ID, location=REGION)
    
    import os
    
    from google.cloud.aiplatform.prediction import LocalModel
    
    from src_dir.predictor import CprPredictor  # Should be path of variable $USER_SRC_DIR
    
    local_model = LocalModel.build_cpr_model(
       USER_SRC_DIR,
       f"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}",
       predictor=CprPredictor,
       requirements_path=os.path.join(USER_SRC_DIR, "requirements.txt"),
    )
    
  4. 予測用の 2 つのサンプルを含むテストファイルを作成します。一方のインスタンスには明瞭な略称が使われていますが、もう一方のインスタンスは最初に変換する必要があります。

    import json
    
    sample = {"instances": [
       [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
       [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}
    
    with open('instances.json', 'w') as fp:
       json.dump(sample, fp)
    
  5. ローカルモデルをデプロイして、コンテナをローカルでテストします。

    with local_model.deploy_to_local_endpoint(
       artifact_uri = 'model_artifacts/', # local path to artifacts
    ) as local_endpoint:
       predict_response = local_endpoint.predict(
          request_file='instances.json',
          headers={"Content-Type": "application/json"},
       )
    
       health_check_response = local_endpoint.run_health_check()
    
  6. 予測結果は、次のコマンドで確認できます。

    predict_response.content
    

オンライン予測モデル エンドポイントにモデルをデプロイする

コンテナをローカルでテストしたので、次はイメージを Artifact Registry に push し、モデルを Vertex AI Model Registry にアップロードします。

  1. Artifact Registry にアクセスできるように Docker を構成します。

    !gcloud artifacts repositories create {REPOSITORY} --repository-format=docker \
    --location=us-central1 --description="Docker repository"
    
    !gcloud auth configure-docker {REGION}-docker.pkg.dev --quiet
    
  2. イメージを push します。

    local_model.push_image()
    
  3. モデルをアップロードします。

    model = aiplatform.Model.upload(local_model = local_model,
                                    display_name=MODEL_DISPLAY_NAME,
                                    artifact_uri=f"{BUCKET_NAME}/{MODEL_ARTIFACT_DIR}",)
    
  4. モデルをデプロイします。

    endpoint = model.deploy(machine_type="n1-standard-2")
    

    モデルがデプロイされるまで待ってから次のステップに進みます。デプロイには少なくとも 10~15 分かかると想定してください。

  5. 予測を取得して、デプロイされたモデルをテストします。

    endpoint.predict(instances=[[0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43]])
    

Vertex AI API への公共のインターネット アクセスを確認する

このセクションでは、1 つの Cloud Shell セッションのタブで nat-client VM インスタンスにログインし、別のセッションのタブを使用して digtcpdump コマンドをドメイン us-central1-aiplatform.googleapis.com に対して実行することで、Vertex AI API への接続を確認します。

  1. Cloud Shell(タブ 1)で次のコマンドを実行します。ここで、PROJECT_ID は実際のプロジェクト ID に置き換えます。

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. IAP を使用して nat-client VM インスタンスにログインします。

    gcloud compute ssh nat-client --project=$projectid --zone=us-central1-a --tunnel-through-iap
    
  3. dig コマンドを実行します。

    dig us-central1-aiplatform.googleapis.com
    
  4. nat-client VM(タブ 1)から次のコマンドを実行して、オンライン予測リクエストをエンドポイントに送信する際に DNS の解決を検証します。

     sudo tcpdump -i any port 53 -n
    
  5. Cloud Shell で [新しいタブを開く] をクリックして、新しい Cloud Shell セッションを開きます(タブ 2)。

  6. 新しい Cloud Shell セッション(タブ 2)で、次のコマンドを実行します。ここで、PROJECT_ID は実際のプロジェクト ID に置き換えます。

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  7. nat-client VM インスタンスにログインします。

    gcloud compute ssh --zone "us-central1-a" "nat-client" --project "$projectid"
    
  8. nat-client VM(タブ 2)から、vimnano などのテキスト エディタを使用して、instances.json ファイルを作成します。ファイルへの書き込み権限を付与するには、sudo を先頭に追加する必要があります。次に例を示します。

    sudo vim instances.json
    
  9. 次のデータ文字列をファイルに追加します。

    {"instances": [
       [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
       [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}
    
  10. 次のようにファイルを保存します。

    • vim を使用している場合は、Esc キーを押してから、「:wq」と入力してファイルを保存し、終了します。
    • nano を使用している場合は、「Control+O」と入力して Enter を押してファイルを保存し、「Control+X」と入力して終了します。
  11. PSC エンドポイントのオンライン予測エンドポイント ID を見つけます。

    1. Google Cloud コンソールの Vertex AI セクションで、[オンライン予測] ページの [エンドポイント] タブに移動します。

      エンドポイントに移動

    2. 作成したエンドポイント(diamonds-cpr_endpoint という名前の行)を探します。

    3. [ID] 列にある 19 桁のエンドポイント ID を見つけてコピーします。

  12. Cloud Shell の nat-client VM(タブ 2)から次のコマンドを実行します。PROJECT_ID はプロジェクト ID に置き換え、ENDPOINT_ID は PSC エンドポイント ID に置き換えます。

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    ENDPOINT_ID=ENDPOINT_ID
    
  13. nat-client VM(タブ 2)で、次のコマンドを実行してオンライン予測リクエストを送信します。

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" http://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
    

予測を実行したので、tcpdump の結果(タブ 1)には、Vertex AI API ドメイン(us-central1-aiplatform.googleapis.com)のローカル DNS サーバー(169.254.169.254)に対する Cloud DNS クエリを実行している nat-client VM インスタンス(192.168.10.2)が表示されます。DNS クエリは、Vertex AI API のパブリック仮想 IP アドレス(VIP)を返します。

Vertex AI API へのプライベート アクセスを確認する

このセクションでは、新しい Cloud Shell セッション(タブ 3)で Identity-Aware Proxy を使用して private-client VM インスタンスにログインし、Vertex AI ドメイン(us-central1-aiplatform.googleapis.com)に対して dig コマンドを実行して Vertex AI API への接続を確認します。

  1. Cloud Shell で [新しいタブを開く] をクリックして、新しい Cloud Shell セッションを開きます(タブ 3)。これがタブ 3 です。

  2. 新しい Cloud Shell セッション(タブ 3)で、次のコマンドを実行します。ここで、PROJECT_ID は実際のプロジェクト ID に置き換えます。

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  3. IAP を使用して private-client VM インスタンスにログインします。

    gcloud compute ssh private-client --project=$projectid --zone=us-central1-a --tunnel-through-iap
    
  4. dig コマンドを実行します。

    dig us-central1-aiplatform.googleapis.com
    
  5. private-client VM インスタンス(タブ 3)で、vimnano などのテキスト エディタを使用して、次の行を /etc/hosts ファイルに追加します。

    100.100.10.10 us-central1-aiplatform.googleapis.com
    

    この行では、PSC エンドポイントの IP アドレス(100.100.10.10)を Vertex AI Google API の完全修飾ドメイン名(us-central1-aiplatform.googleapis.com)に割り当てています。編集後のファイルは次のようになります。

    127.0.0.1       localhost
    ::1             localhost ip6-localhost ip6-loopback
    ff02::1         ip6-allnodes
    ff02::2         ip6-allrouters
    
    100.100.10.10 us-central1-aiplatform.googleapis.com # Added by you
    192.168.20.2 private-client.c.$projectid.internal private-client  # Added by Google
    169.254.169.254 metadata.google.internal  # Added by Google
    
  6. private-client VM(タブ 3)から、Vertex AI エンドポイントに ping を実行し、Control+C を実行して出力が表示されたら終了します。

    ping us-central1-aiplatform.googleapis.com
    

    ping コマンドは、PSC エンドポイントの IP アドレスを含む次の出力を返します。

    PING us-central1-aiplatform.googleapis.com (100.100.10.10) 56(84) bytes of data.
    
  7. private-client VM(タブ 3)から tcpdump を使用して次のコマンドを実行し、オンライン予測リクエストをエンドポイントに送信するときに DNS の解決と IP データパスを検証します。

     sudo tcpdump -i any port 53 -n or host 100.100.10.10
    
  8. Cloud Shell で [新しいタブを開く] をクリックして、新しい Cloud Shell セッションを開きます(タブ 4)。

  9. 新しい Cloud Shell セッション(タブ 4)で次のコマンドを実行します。ここで、PROJECT_ID は実際のプロジェクト ID に置き換えます。

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  10. タブ 4 で、private-client インスタンスにログインします。

    gcloud compute ssh --zone "us-central1-a" "private-client" --project "$projectid"
    
  11. private-client VM(タブ 4)から、vimnano などのテキスト エディタを使用して、次のデータ文字列を含む instances.json ファイルを作成します。

    {"instances": [
       [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
       [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}
    
  12. private-client VM(タブ 4)から次のコマンドを実行します。PROJECT_ID はプロジェクト名に、ENDPOINT_ID は PSC エンドポイント ID に置き換えます。

    projectid=PROJECT_ID
    echo $projectid
    ENDPOINT_ID=ENDPOINT_ID
    
  13. private-client VM(タブ 4)で、次のコマンドを実行してオンライン予測リクエストを送信します。

    curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" http://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
    
  14. Cloud Shell の private-client VM(タブ 3)から、PSC エンドポイントの IP アドレス(100.100.10.10)が Vertex AI API へのアクセスに使用されたことを確認します。

    Cloud Shell のタブ 3 の private-client tcpdump ターミナルから、us-central1-aiplatform.googleapis.com への DNS ルックアップが不要であることがわかります。/etc/hosts ファイルに追加したラインが優先され、PSC の IP アドレス 100.100.10.10 がデータパスで使用されるからです。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクト内の個々のリソースを削除するには、次のように操作します。

  1. 次のようにして、ユーザー管理のノートブック インスタンスを削除します。

    1. Google Cloud コンソールの [Vertex AI] セクションで、[ワークベンチ] ページの [ユーザー管理のノートブック] タブに移動します。

      [ユーザー管理のノートブック] に移動

    2. workbench-tutorial ユーザー管理ノートブック インスタンスを選択し、 [削除] をクリックします。

  2. 次のようにコンテナ イメージを削除します。

    1. Google Cloud コンソールで、[Artifact Registry] ページに移動します。

      Artifact Registry に移動

    2. diamonds Docker コンテナを選択し、 [削除] をクリックします。

  3. 次のようにストレージ バケットを削除します。

    1. Google Cloud コンソールで [Cloud Storage] ページに移動します。

      [Cloud Storage] に移動

    2. ストレージ バケットを選択して、 [削除] をクリックします。

  4. 次のように、エンドポイントからモデルのデプロイを解除します。

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

      エンドポイントに移動

    2. [diamonds-cpr_endpoint] をクリックして、エンドポイントの詳細ページに移動します。

    3. モデルの行 diamonds-cpr で、[モデルのデプロイ解除 ] をクリックします。

    4. [エンドポイントからモデルのデプロイを解除] ダイアログで [デプロイ解除] をクリックします。

  5. 次のようにモデルを削除します。

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

      [Model Registry] に移動

    2. diamonds-cpr モデルを選択します。

    3. モデルを削除するには、 [アクション] をクリックし、[モデルを削除] をクリックします。

  6. 次のようにオンライン予測エンドポイントを削除します。

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

      [オンライン予測] に移動

    2. diamonds-cpr_endpoint エンドポイントを選択します。

    3. エンドポイントを削除するには、 [アクション] をクリックしてから、[エンドポイントを削除] をクリックします。

  7. Cloud Shell で次のコマンドを実行して、残りのリソースを削除します。

    Cloud Shell に移動

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
    gcloud compute forwarding-rules delete pscvertex --global --quiet
    
    gcloud compute addresses delete psc-ip --global --quiet
    
    gcloud compute networks subnets delete workbench-subnet --region=us-central1 --quiet
    
    gcloud compute vpn-tunnels delete aiml-vpc-tunnel0 aiml-vpc-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=us-central1 --quiet
    
    gcloud compute vpn-gateways delete aiml-vpn-gw on-prem-vpn-gw --region=us-central1 --quiet
    
    gcloud compute routers delete aiml-cr-us-central1 cloud-router-us-central1-aiml-nat --region=us-central1 --quiet
    
    gcloud compute routers delete cloud-router-us-central1-on-prem-nat on-prem-cr-us-central1 --region=us-central1 --quiet
    
    gcloud compute instances delete nat-client private-client --zone=us-central1-a --quiet
    
    gcloud compute firewall-rules delete ssh-iap-on-prem-vpc --quiet
    
    gcloud compute networks subnets delete nat-subnet  private-ip-subnet --region=us-central1 --quiet
    
    gcloud compute networks delete on-prem-vpc --quiet
    
    gcloud compute networks delete aiml-vpc --quiet
    

次のステップ