Layanan Prediksi Online Vertex AI memungkinkan Anda membuat permintaan sinkron ke endpoint model prediksi Anda sendiri.
Halaman ini menunjukkan cara mengirim permintaan ke model Anda agar dapat menyajikan prediksi online dengan latensi rendah.
Sebelum memulai
Sebelum dapat mulai menggunakan Online Prediction API, Anda harus memiliki project dan kredensial yang sesuai.
Ikuti langkah-langkah berikut sebelum mendapatkan prediksi online:
- Siapkan project untuk Vertex AI.
Untuk mendapatkan izin yang diperlukan untuk mengakses Prediksi Online, minta Admin IAM Project Anda untuk memberi Anda peran Vertex AI Prediction User (
vertex-ai-prediction-user
).Untuk mengetahui informasi tentang peran ini, lihat Siapkan izin IAM.
Buat dan latih model prediksi yang menargetkan salah satu container yang didukung.
Buat cluster prediksi dan pastikan project Anda mengizinkan traffic eksternal yang masuk.
Tampilkan detail resource kustom
Endpoint
model prediksi Anda:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
Ganti kode berikut:
PREDICTION_CLUSTER_KUBECONFIG
: jalur ke file kubeconfig di cluster prediksi.PREDICTION_ENDPOINT
: nama endpoint.PROJECT_NAMESPACE
: nama namespace project prediksi.
Output harus menampilkan kolom
status
, yang menampilkan nama domain yang sepenuhnya memenuhi syarat endpoint di kolomendpointFQDN
. Daftarkan jalur URL endpoint ini untuk menggunakannya dalam permintaan Anda.
Menetapkan variabel lingkungan
Jika ingin mengirim permintaan ke endpoint model menggunakan skrip Python dan Anda menyiapkan akun layanan di project untuk melakukan panggilan API yang diotorisasi secara terprogram, Anda dapat menentukan variabel lingkungan dalam skrip untuk mengakses nilai seperti kunci akun layanan saat dijalankan.
Ikuti langkah-langkah berikut untuk menetapkan variabel lingkungan yang diperlukan pada skrip Python:
Buat notebook JupyterLab untuk berinteraksi dengan Online Prediction API.
Buat skrip Python di notebook JupyterLab.
Tambahkan kode berikut ke skrip Python:
import os os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "APPLICATION_DEFAULT_CREDENTIALS_FILENAME"
Ganti
APPLICATION_DEFAULT_CREDENTIALS_FILENAME
dengan nama file JSON yang berisi kunci akun layanan yang Anda buat di project, sepertimy-service-key.json
.Simpan skrip Python dengan nama, seperti
prediction.py
.Jalankan skrip Python untuk menetapkan variabel lingkungan:
python SCRIPT_NAME
Ganti
SCRIPT_NAME
dengan nama yang Anda berikan ke skrip Python, sepertiprediction.py
.
Mengirim permintaan ke endpoint
Buat permintaan ke endpoint model untuk mendapatkan prediksi online:
curl
Ikuti langkah-langkah berikut untuk membuat permintaan curl
:
Buat file JSON bernama
request.json
untuk isi permintaan Anda.Anda harus menambahkan dan memformat input untuk prediksi online dengan detail isi permintaan yang diperlukan oleh target penampung.
Buat permintaan:
curl -X POST -H "Content-Type: application/json; charset=utf-8" -H "Authorization: Bearer TOKEN" https://ENDPOINT:443/v1/model:predict -d @request.json
Ganti kode berikut:
TOKEN
: token autentikasi yang Anda peroleh.ENDPOINT
: endpoint model Anda untuk permintaan prediksi online.
Jika berhasil, Anda akan menerima respons JSON untuk permintaan prediksi online Anda.
Output berikut menunjukkan contoh:
{
"predictions": [[-357.10849], [-171.621658]
]
}
Untuk mengetahui informasi selengkapnya tentang respons, lihat Detail isi respons.
Python
Ikuti langkah-langkah berikut untuk menggunakan layanan Prediksi Online dari skrip Python:
Buat file JSON bernama
request.json
untuk isi permintaan Anda.Anda harus menambahkan dan memformat input untuk prediksi online dengan detail isi permintaan yang diperlukan oleh target penampung.
Tetapkan variabel lingkungan yang diperlukan pada skrip Python.
Tambahkan kode berikut ke skrip Python yang Anda buat:
import json import os from typing import Sequence import grpc from absl import app from absl import flags from google.auth.transport import requests from google.protobuf import json_format from google.protobuf.struct_pb2 import Value from google.cloud.aiplatform_v1.services import prediction_service _INPUT = flags.DEFINE_string("input", None, "input", required=True) _HOST = flags.DEFINE_string("host", None, "Prediction endpoint", required=True) _ENDPOINT_ID = flags.DEFINE_string("endpoint_id", None, "endpoint id", required=True) os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "path-to-ca-cert-file.cert" # ENDPOINT_RESOURCE_NAME is a placeholder value that doesn't affect prediction behavior. ENDPOINT_RESOURCE_NAME="projects/000000000000/locations/us-central1/endpoints/00000000000000" def get_sts_token(host): creds = None try: creds, _ = google.auth.default() creds = creds.with_gdch_audience(host+":443") req = requests.Request() creds.refresh(req) print("Got token: ") print(creds.token) except Exception as e: print("Caught exception" + str(e)) raise e return creds.token # predict_client_secure builds a client that requires TLS def predict_client_secure(host, token): with open(os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"], 'rb') as f: channel_creds = grpc.ssl_channel_credentials(f.read()) call_creds = grpc.access_token_call_credentials(token) creds = grpc.composite_channel_credentials( channel_creds, call_creds, ) client = prediction_service.PredictionServiceClient( transport=prediction_service.transports.grpc.PredictionServiceGrpcTransport( channel=grpc.secure_channel(target=host+":443", credentials=creds))) return client def predict_func(client, instances): resp = client.predict( endpoint=ENDPOINT_RESOURCE_NAME, instances=instances, metadata=[("x-vertex-ai-endpoint-id", _ENDPOINT_ID.value)] ) print(resp) def main(argv: Sequence[str]): del argv # Unused. with open(_INPUT.value) as json_file: data = json.load(json_file) instances = [json_format.ParseDict(s, Value()) for s in data["instances"]] token = get_sts_token(_HOST.value) client = predict_client_secure(_HOST.value, token) predict_func(client=client, instances=instances) if __name__=="__main__": app.run(main)
Simpan skrip Python dengan nama, seperti
prediction.py
.Buat permintaan ke server prediksi:
python SCRIPT_NAME --input request.json \ --host ENDPOINT \ --endpoint_id ENDPOINT_ID \
Ganti kode berikut:
SCRIPT_NAME
: nama skrip Python, sepertiprediction.py
.ENDPOINT
: endpoint model Anda untuk permintaan prediksi online.ENDPOINT_ID
: nilai ID endpoint.
Jika berhasil, Anda akan menerima respons JSON untuk permintaan prediksi online Anda. Untuk mengetahui informasi selengkapnya tentang respons, lihat Detail isi respons.