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.
- Predictor Kustom dengan pra/pasca-pemrosesan kustom untuk Sklearn, membuat container Anda sendiri dengan Vertex SDK.
- Hanya mengimplementasikan pemuatan metode preprocessor, praproses, dan pascaproses serial di Predictor. Mewarisi pemuatan model default dan prediksi perilaku dari SklearnPredictor yang terdistribusi Vertex AI.
- Predictor Kustom, membuat container Anda sendiri dengan Vertex SDK.
- Implementasi kustom dari seluruh Predictor.
- Predictor dan Handler Kustom, membuat container Anda sendiri dengan Vertex SDK.
- Implementasi kustom dari Predictor dan Handler.
- Menyesuaikan Handler memungkinkan server model untuk menangani input csv.
- Predictor Kustom, membuat container Anda sendiri dengan Vertex SDK untuk PyTorch.
- Implementasi kustom Predictor.
- Image yang sudah ada, menguji prediksi secara lokal, dan men-deploy model dengan Vertex SDK.
- Menggunakan server inferensi NVIDIA Triton untuk model PyTorch.