Rutinitas prediksi kustom

Rutinitas prediksi kustom (CPR) memungkinkan Anda membangun penampung kustom dengan kode pra-pemrosesan dan pascapemrosesan, tanpa harus berurusan dengan detail penyiapan server HTTP atau membangun container dari awal. Anda dapat menggunakan pra-pemrosesan untuk menormalisasi dan mengubah input atau melakukan panggilan ke layanan eksternal untuk mendapatkan data tambahan, dan menggunakan pascapemrosesan untuk memformat prediksi model atau menjalankan logika bisnis.

Diagram berikut menggambarkan alur kerja pengguna dengan dan tanpa rutinitas prediksi kustom.

Perbedaan utamanya adalah:

  • Anda tidak perlu menulis server model atau Dockerfile. Server model, yang merupakan server HTTP yang menghosting model, disediakan untuk Anda.

  • Anda dapat men-deploy dan men-debug model secara lokal, sehingga mempercepat siklus iterasi selama pengembangan.

Membangun dan men-deploy container kustom

Bagian ini menjelaskan cara menggunakan CPR untuk membuat container kustom dengan logika prapemrosesan dan pascapemrosesan serta men-deploy ke endpoint lokal dan online.

Penyiapan

Anda harus menginstal Vertex AI SDK untuk Python dan Docker di lingkungan Anda.

Menulis Predictor kustom

Terapkan antarmuka Predictor

class Predictor(ABC):
    """Interface of the Predictor class for Custom Prediction Routines.
    The Predictor is responsible for the ML logic for processing a prediction request.
    Specifically, the Predictor must define:
    (1) How to load all model artifacts used during prediction into memory.
    (2) The logic that should be executed at predict time.
    When using the default PredictionHandler, the Predictor will be invoked as follows:
      predictor.postprocess(predictor.predict(predictor.preprocess(prediction_input)))
    """

    @abstractmethod
    def load(self, artifacts_uri: str) -> None:
        """Loads the model artifact.
        Args:
            artifacts_uri (str):
                Required. The value of the environment variable AIP_STORAGE_URI.
        """
        pass

    def preprocess(self, prediction_input: Any) -> Any:
        """Preprocesses the prediction input before doing the prediction.
        Args:
            prediction_input (Any):
                Required. The prediction input that needs to be preprocessed.
        Returns:
            The preprocessed prediction input.
        """
        return prediction_input

    @abstractmethod
    def predict(self, instances: Any) -> Any:
        """Performs prediction.
        Args:
            instances (Any):
                Required. The instance(s) used for performing prediction.
        Returns:
            Prediction results.
        """
        pass

    def postprocess(self, prediction_results: Any) -> Any:
        """Postprocesses the prediction results.
        Args:
            prediction_results (Any):
                Required. The prediction results.
        Returns:
            The postprocessed prediction results.
        """
        return prediction_results

Misalnya, lihat Penerapan Predictor Sklearn.

Menulis Handler kustom (opsional)

Pengendali kustom memiliki akses ke objek permintaan mentah, sehingga berguna dalam kasus yang jarang terjadi saat Anda perlu menyesuaikan logika terkait server web, seperti mendukung header permintaan dan respons tambahan atau melakukan deserialisasi permintaan prediksi berformat non-JSON.

Berikut adalah contoh notebook yang mengimplementasikan Predictor dan Handler.

Meskipun tidak diperlukan, untuk pengaturan dan penggunaan kembali kode yang lebih baik, sebaiknya implementasikan logika server web di Handler dan logika ML di Predictor seperti yang ditunjukkan di pengendali default.

Membuat container kustom

Masukkan kode kustom Anda dan file requirements.txt tambahan, jika Anda perlu menginstal paket di image Anda, di dalam direktori.

Gunakan Vertex AI SDK untuk Python guna membangun container kustom sebagai berikut:

from google.cloud.aiplatform.prediction import LocalModel

# {import your predictor and handler}

local_model = LocalModel.build_cpr_model(
    {PATH_TO_THE_SOURCE_DIR},
    f"{REGION}-docker.pkg.dev/{PROJECT_ID}/{REPOSITORY}/{IMAGE}",
    predictor={PREDICTOR_CLASS},
    handler={HANDLER_CLASS},
    requirements_path={PATH_TO_REQUIREMENTS_TXT},
)

Anda dapat memeriksa spesifikasi container untuk mendapatkan informasi yang berguna seperti URI gambar dan variabel lingkungan.

local_model.get_serving_container_spec()

Menjalankan container secara lokal (opsional)

Langkah ini hanya diperlukan jika Anda ingin menjalankan dan menguji container secara lokal yang berguna untuk iterasi yang lebih cepat. Pada contoh berikut, Anda men-deploy ke endpoint lokal dan mengirim permintaan prediksi (format untuk isi permintaan).

with local_model.deploy_to_local_endpoint(
    artifact_uri={GCS_PATH_TO_MODEL_ARTIFACTS},
    credential_path={PATH_TO_CREDENTIALS},
) as local_endpoint:
    health_check_response = local_endpoint.run_health_check()
    predict_response = local_endpoint.predict(
        request_file={PATH_TO_INPUT_FILE},
        headers={ANY_NEEDED_HEADERS},
    )

Cetak health check dan respons prediksi.

print(health_check_response, health_check_response.content)
print(predict_response, predict_response.content)

Cetak semua log container.

local_endpoint.print_container_logs(show_all=True)

Mengupload ke Vertex AI Model Registry

Model Anda perlu mengakses artefak model Anda (file dari pelatihan), jadi pastikan Anda telah menguploadnya ke Google Cloud Storage.

Kirim image ke Artifact Registry.

local_model.push_image()

Kemudian, upload ke Model Registry.

from google.cloud import aiplatform

model = aiplatform.Model.upload(
    local_model=local_model,
    display_name={MODEL_DISPLAY_NAME},
    artifact_uri={GCS_PATH_TO_MODEL_ARTIFACTS},
)

Setelah diupload ke Model Registry, model tersebut dapat digunakan untuk mendapatkan prediksi batch atau di-deploy ke endpoint Vertex AI untuk mendapatkan prediksi online.

Men-deploy ke endpoint Vertex AI

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

Setelah model di-deploy, Anda bisa mendapatkan prediksi online.

Contoh Notebook

Sampel ini menunjukkan berbagai cara men-deploy model dengan pra-pemrosesan dan pascapemrosesan kustom menggunakan Vertex AI Prediction.