予測クラス

Vertex AI SDK には、次の予測クラスが含まれています。1 つのクラスはバッチ予測に使用します。他はオンライン予測またはベクトル検索予測に関連するクラスです。詳細については、Vertex AI での予測の取得の概要をご覧ください。

バッチ予測クラス

バッチ予測は、非同期予測リクエストのグループです。エンドポイントにモデルをデプロイすることなく、モデルリソースからバッチ予測をリクエストします。バッチ予測は、即時のレスポンスが必要なく、1 つのリクエストでデータを処理する場合に適しています。BatchPredictionJob は、バッチ予測に固有の Vertex AI SDK のクラスです。

BatchPredictionJob

BatchPredictionJob クラスは、非同期予測リクエストのグループを表します。バッチ予測ジョブを作成するには、次の 2 つの方法があります。

  1. バッチ予測ジョブを作成する場合は、トレーニング済みの Modelbatch_predict メソッドを使用することをおすすめします。このメソッドには次のパラメータが必要です。

    • instances_format: バッチ予測リクエスト ファイルの形式(jsonlcsvbigquerytf-recordtf-record-gzipfile-list)。
    • prediction_format: バッチ予測レスポンス ファイルの形式(jsonlcsvbigquerytf-recordtf-record-gzipfile-list)。
    • gcs_source:: バッチ予測リクエストへの 1 つ以上の Cloud Storage パスのリスト。
    • gcs_destination_prefix: Vertex AI が予測を書き込む Cloud Storage パス。

    次のコードは、Model.batch_predict を呼び出す方法の例です。

    batch_prediction_job = model.batch_predict(
        instances_format="jsonl",
        predictions_format="jsonl",
        job_display_name="your_job_display_name_string",
        gcs_source=['gs://path/to/my/dataset.csv'],
        gcs_destination_prefix='gs://path/to/my/destination',
        model_parameters=None,
        starting_replica_count=1,
        max_replica_count=5,
        machine_type="n1-standard-4",
        sync=True
    )
    
  2. バッチ予測ジョブを作成する 2 つ目の方法は、BatchPredictionJob.create メソッドを呼び出すことです。BatchPredictionJob.create メソッドには、次の 4 つのパラメータが必要です。

    • job_display_name: バッチ予測ジョブに割り当てる名前。job_display_nameBatchPredictionJob.create では必須ですが、Model.batch_predict では省略可能です。
    • model_name: バッチ予測ジョブに使用するトレーニング済みの Model の完全修飾名または ID。
    • instances_format: バッチ予測リクエスト ファイルの形式(jsonlcsvbigquerytf-recordtf-record-gzipfile-list)。
    • predictions_format: バッチ予測レスポンス ファイルの形式(jsonlcsvbigquerytf-recordtf-record-gzipfile-list)。

オンライン予測クラス

オンライン予測は、モデルのエンドポイントに対して行われる同期リクエストです。オンライン予測リクエストを行うには、モデルをエンドポイントにデプロイする必要があります。アプリケーションの入力に基づいて予測を生成する場合や、高速な予測レスポンスが必要な場合は、オンライン予測を使用します。

Endpoint

モデルからオンライン予測を取得するには、モデルをエンドポイントにデプロイする必要があります。エンドポイントにモデルをデプロイする際は、物理マシンリソースを対象のモデルに関連付けて、オンライン予測を提供できるようにします。

1 つのエンドポイントに複数のモデルをデプロイできます。1 つのモデルを複数のエンドポイントにデプロイすることもできます。詳細については、モデルのデプロイに関する考慮事項をご覧ください。

Endpoint リソースを作成するには、モデルをデプロイします。Model.deploy メソッドを呼び出すと、Endpoint が作成されて返されます。

次のサンプルコード スニペットは、カスタム トレーニング ジョブを作成し、モデルを作成してトレーニングして、エンドポイントにモデルをデプロイする方法を示しています。

# Create your custom training job

job = aiplatform.CustomTrainingJob(
    display_name="my_custom_training_job",
    script_path="task.py",
    container_uri="us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-8:latest",
    requirements=["google-cloud-bigquery>=2.20.0", "db-dtypes"],
    model_serving_container_image_uri="us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-8:latest"
)

# Start the training and create your model
model = job.run(
    dataset=dataset,
    model_display_name="my_model_name",
    bigquery_destination=f"bq://{project_id}"
)

# Create an endpoint and deploy your model to that endpoint
endpoint = model.deploy(deployed_model_display_name="my_deployed_model")

# Get predictions using test data in a DataFrame named 'df_my_test_data'
predictions = endpoint.predict(instances=df_my_test_data)

PrivateEndpoint

プライベート エンドポイントは Endpoint リソースに似ていますが、予測が安全なネットワークを介して Vertex AI オンライン予測サービスに送信される点が異なります。組織ですべてのトラフィックを非公開にする場合は、プライベート エンドポイントを使用します。

プライベート エンドポイントを使用するには、Virtual Private Cloud(VPC)とピアリングするように Vertex AI を構成する必要があります。プライベート予測エンドポイントが Vertex AI に直接接続するには、VPC が必要です。詳細については、VPC ネットワーク ピアリングを設定するオンライン予測にプライベート エンドポイントを使用するをご覧ください。

ModelDeploymentMonitoringJob

ModelDeploymentMonitoringJob リソースを使用すると、モデルをモニタリングして、モデルの予測の品質に影響する可能性がある逸脱があった場合にアラートを受け取ることができます。

入力データがモデルのトレーニングに使用するデータから外れると、モデルに変化がなくても、モデルのパフォーマンスは低下する可能性があります。モデルのモニタリングでは、特徴のスキューとドリフトの入力日が分析されます。

  • スキューは、本番環境の特徴データの分布が、モデルのトレーニングに使用される特徴データから外れる場合に発生します。
  • ドリフトは、本番環境の特徴データが時間の経過とともに大幅に変化した場合に発生します。

詳細については Vertex AI Model Monitoring の概要をご覧ください。Vertex AI SDK を使用して Vertex AI モニタリングを実装する方法の例については、GitHub の Explainable AI の特徴アトリビューションを使用した Vertex AI モデルのモニタリング ノートブックをご覧ください。

ベクトル検索予測クラス

ベクトル検索は、類似性インデックス(ベクトル)を作成して類似性マッチングを実行するマネージド サービスです。類似度マッチングは、次の 2 つの大まかな手順で行います。

  1. データのベクトル表現を作成します。データは、テキスト、画像、動画、音声、表形式のデータとなります。

  2. ベクトル検索では、作成したベクトルのエンドポイントを使用して、類似したベクトルを大規模かつ低レイテンシで検索します。

詳細については、GitHub のベクトル検索の概要ベクトル検索インデックスを作成するノートブックをご覧ください。

MatchingEngineIndex

MatchingEngineIndex クラスは、ベクトル検索で類似度検索を行うために使用するインデックス(ベクトル)を表します。

インデックスに使用できる検索アルゴリズムは 2 つあります。

  1. TreeAhConfig は、浅い Tree-AH アルゴリズム(非対称ハッシュを使用した浅いツリー)を使用します。MatchingEngineIndex.create_tree_ah_index を使用すると、Tree-AH アルゴリズムを使用するインデックスを作成できます。
  2. BruteForceConfig は標準の線形探索を使用します。MatchingEngineIndex.create_brute_force_index を使用すると、標準の線形探索を使用するインデックスを作成できます。

インデックスの構成方法の詳細については、インデックスの構成をご覧ください。

次のコードは Tree-AH アルゴリズムを使用したインデックスの作成例です。

my_tree_ah_index = aiplatform.Index.create_tree_ah_index(
    display_name="my_display_name",
    contents_delta_uri="gs://my_bucket/embeddings",
    dimensions=1,
    approximate_neighbors_count=150,
    distance_measure_type="SQUARED_L2_DISTANCE",
    leaf_node_embedding_count=100,
    leaf_nodes_to_search_percent=50,
    description="my description",
    labels={ "label_name": "label_value" }
)

次のコードは、ブルート フォース アルゴリズムを使用したインデックスの作成例です。

my_brute_force_index = aiplatform.Index.create_brute_force_index(
    display_name="my_display_name",
    contents_delta_uri="gs://my_bucket/embeddings",
    dimensions=1,
    approximate_neighbors_count=150,
    distance_measure_type="SQUARED_L2_DISTANCE",
    description="my description",
    labels={ "label_name": "label_value" }
)

MatchingEngineIndexEndpoint

MatchingEngineIndexEndpoint クラスを使用すると、エンドポイントを作成、取得できます。エンドポイントにモデルをデプロイすると、クエリの実行に使用する IP アドレスを取得できます。

次のコードは、Matching Engine インデックス エンドポイントを作成して、Matching Engine インデックスをデプロイする例です。

my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create(
    display_name="sample_index_endpoint",
    description="index endpoint description",
    network="projects/123456789123/global/networks/my_vpc"
)

my_index_endpoint = my_index_endpoint.deploy_index(
    index=my_tree_ah_index, deployed_index_id="my_matching_engine_index_id"
)

次のステップ