Rutinitas prediksi kustom

Rutinitas prediksi kustom (CPR) memungkinkan Anda membuat container kustom dengan kode pra/pasca-pemrosesan secara mudah, tanpa perlu menangani detail penyiapan server HTTP atau membuat container dari awal. Anda dapat menggunakan pra-pemrosesan untuk menormalkan/mengubah input atau melakukan panggilan ke layanan eksternal untuk mendapatkan data tambahan, dan menggunakan pasca-pemrosesan 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 mem-build container kustom dengan logika pra/pasca-pemrosesan dan men-deploy ke endpoint lokal dan online.

Penyiapan

Anda harus menginstal Vertex AI SDK 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/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 Anda mengimplementasikan logika server web di Handler dan logika ML di Predictor seperti yang ditunjukkan di pengendali default.

Mem-build container kustom

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

Gunakan Vertex SDK untuk mem-build container kustom seperti yang ditunjukkan di bawah ini:

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 bisa memeriksa spesifikasi container untuk mendapatkan informasi yang berguna seperti URI image 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, kita 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 Vertex AI Model Registry, model Anda 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 di-deploy, Anda bisa mendapatkan prediksi online.

Contoh Notebook

Contoh ini menunjukkan berbagai cara untuk men-deploy model dengan pra/pasca-pemrosesan kustom di Vertex AI Prediction.