Memigrasikan Rutinitas Prediksi Kustom ke Vertex AI

Halaman ini menjelaskan cara memigrasikan deployment Rutinitas Prediksi Kustom (CPR) dari AI Platform ke Vertex AI.

Secara khusus, mengingat deployment CPR di AI Platform, halaman ini menunjukkan cara:

  • Membuat container kustom yang sesuai untuk deployment di Vertex AI. Penampung kustom ini berfungsi seperti penampung kustom apa pun yang dibuat dengan CPR di Vertex AI.
  • Menjalankan dan uji container kustom secara lokal.
  • Upload ke Vertex AI Model Registry.
  • Men-deploy model ke Endpoint Vertex AI untuk menyalurkan prediksi online.

Sebelum memulai

  • Pastikan software berikut telah diinstal:

  • Dapatkan artefak model dan kode kustom dari CPR pada deployment AI Platform yang ingin Anda migrasikan ke Vertex AI.

  • Miliki bucket Cloud Storage untuk menyimpan artefak model.

  • Pastikan Anda telah mengaktifkan Vertex AI API di project.

    Mengaktifkan Vertex AI API

Menyiapkan folder sumber untuk deployment Vertex AI

  1. Buat folder lokal bernama model_artifacts, lalu salin artefak model dari CPR di deployment AI Platform. Artefak ini harus berupa artefak model yang sama dengan yang Anda tentukan dalam deployment_uri (atau --origin jika Anda menggunakan gcloud) saat men-deploy CPR pada model AI Platform.

  2. Buat folder lokal bernama cpr_src_dir. Folder ini akan menyimpan paket distribusi sumber Anda, adapter.py, dan requirements.txt (dijelaskan di bawah) yang digunakan untuk membangun container kustom untuk deployment di Vertex AI .

  3. Salin semua paket yang Anda berikan di package_uris saat men-deploy CPR di AI Platform, termasuk paket yang berisi class Predictor.

  4. Buat file adapter.py yang berisi AdapterPredictor (ditampilkan di bawah) dan tetapkan PREDICTION_CLASS ke nama Predictor Anda yang sepenuhnya memenuhi syarat. Nilai ini sama dengan prediction_class saat Anda men-deploy CPR di AI Platform.

    Adaptor menggabungkan antarmuka Predictor CPR pada AI Platform sehingga kompatibel dengan CPR pada antarmuka Vertex AI.

    import pydoc
    ​
    from google.cloud.aiplatform.utils import prediction_utils
    from google.cloud.aiplatform.prediction.predictor import Predictor
    ​
    # Fully qualified name of your CPR on CAIP Predictor class.
    PREDICTION_CLASS = "predictor.MyPredictor"
    ​
    class AdapterPredictor(Predictor):
      """Predictor implementation for adapting CPR on CAIP predictors."""
    ​
      def __init__(self):
          return
    ​
      def load(self, artifacts_uri: str):
          """Loads the model artifact.
    ​
          Args:
              artifacts_uri (str):
                  Required. The model artifacts path (may be local or on Cloud Storage).
          """
          prediction_utils.download_model_artifacts(artifacts_uri)
          custom_class = pydoc.locate(PREDICTION_CLASS)
          self._predictor = custom_class.from_path(".")
    ​
    ​
      def predict(self, instances):
          """Performs prediction.
    ​
          Args:
              instances (Any):
                  Required. The instance(s) used for performing prediction.
    ​
          Returns:
              Prediction results.
          """
          return self._predictor.predict(**instances)
    
  5. Buat file requirements.txt yang berisi dependensi model Anda, misalnya:

    # Required for model serving
    google-cloud-storage>=1.26.0,<2.0.0dev
    google-cloud-aiplatform[prediction]>=1.16.0
    
    # ML dependencies
    numpy>=1.16.0
    scikit-learn==0.20.2
    

    Bagian pertama mencantumkan dependensi yang diperlukan untuk penyajian model.

    Bagian kedua mencantumkan paket Machine Learning yang diperlukan untuk penyajian model (misalnya, scikit-learn, xgboost, tensorflow, dll.). Pastikan untuk menginstal versi library yang sama seperti yang tercantum pada versi runtime yang Anda pilih saat sebelumnya men-deploy versi model.

  6. Menginstal dependensi di lingkungan lokal Anda

    pip install -U --user -r cpr_src_dir/requirements.txt 
    

Mengupload artefak model Anda ke Cloud Storage

Upload artefak model ke Cloud Storage:

gsutil cp model_artifacts/* gs://BUCKET_NAME/MODEL_ARTIFACT_DIR

Menyiapkan Artifact Registry

Artifact Registry digunakan untuk menyimpan dan mengelola image container Docker Anda.

  1. Pastikan Anda telah mengaktifkan Artifacts Registry API di project Anda.

    Mengaktifkan Artifacts Registry API

  2. Buat repositori jika Anda belum memilikinya.

    gcloud artifacts repositories create {REPOSITORY} \
        --repository-format=docker \
        --location={REGION}
    
  3. Sebelum Anda dapat mengirim atau mengambil image, konfigurasikan Docker agar menggunakan Google Cloud CLI untuk mengautentikasi permintaan ke Artifact Registry.

    gcloud auth configure-docker {REGION}-docker.pkg.dev
    

Membangun, menguji, dan men-deploy container kustom Anda

Skrip Python berikut menunjukkan cara membangun, menguji, dan men-deploy container kustom Anda menggunakan API di Vertex AI SDK. Pastikan untuk menetapkan variabel di bagian atas skrip.

import json
import logging
import os

from google.cloud import aiplatform
from google.cloud.aiplatform.prediction import LocalModel
from cpr_src_dir.adapter import AdapterPredictor

##########################################################################
# CONFIGURE THE FOLLOWING
##########################################################################
# We recommend that you choose the region closest to you.
REGION = …
# Your project ID.
PROJECT_ID = …
# Name of the Artifact Repository to create or use.
REPOSITORY = …
# Name of the container image that will be pushed.
IMAGE = …
# Cloud Storage bucket where your model artifacts will be stored.
BUKCET_NAME = …
# Directory within the bucket where your model artifacts are stored.
MODEL_ARTIFACT_DIR = …
# Your model's input instances.
INSTANCES = …

##########################################################################
# Build the CPR custom container
##########################################################################
local_model = LocalModel.build_cpr_model(
    "cpr_src_dir",
    f"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}",
    predictor=AdapterPredictor,
    requirements_path="cpr_src_dir/requirements.txt",
    extra_packages=["cpr_src_dir/my_custom_code-0.1.tar.gz"],
)

##########################################################################
# Run and test the custom container locally
##########################################################################
logging.basicConfig(level=logging.INFO)

local_endpoint =
       local_model.deploy_to_local_endpoint(artifact_uri="model_artifacts")
local_endpoint.serve()

health_check_response = local_endpoint.run_health_check()

predict_response = local_endpoint.predict(
        request=json.dumps({"instances": INSTANCES}),
        headers={"Content-Type": "application/json"},
    )

local_endpoint.stop()

print(predict_response, predict_response.content)
print(health_check_response, health_check_response.content)
local_endpoint.print_container_logs(show_all=True)

##########################################################################
# Upload and deploy to Vertex
##########################################################################
local_model.push_image()

model = aiplatform.Model.upload(\
    local_model=local_model,
    display_name=MODEL_DISPLAY_NAME,
    artifact_uri=f"gs://{BUKCET_NAME}/{MODEL_ARTIFACT_DIR}",
)

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

endpoint.predict(instances=INSTANCES)

Pelajari Vertex AI Prediction lebih lanjut.