Mendapatkan prediksi online

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:

  1. Siapkan project untuk Vertex AI.
  2. 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.

  3. Buat dan latih model prediksi yang menargetkan salah satu container yang didukung.

  4. Buat cluster prediksi dan pastikan project Anda mengizinkan traffic eksternal yang masuk.

  5. Ekspor artefak model Anda untuk prediksi.

  6. Deploy model Anda ke endpoint.

  7. 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 kolom endpointFQDN. 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:

  1. Buat notebook JupyterLab untuk berinteraksi dengan Online Prediction API.

  2. Buat skrip Python di notebook JupyterLab.

  3. 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, seperti my-service-key.json.

  4. Simpan skrip Python dengan nama, seperti prediction.py.

  5. Jalankan skrip Python untuk menetapkan variabel lingkungan:

    python SCRIPT_NAME
    

    Ganti SCRIPT_NAME dengan nama yang Anda berikan ke skrip Python, seperti prediction.py.

Mengirim permintaan ke endpoint

Buat permintaan ke endpoint model untuk mendapatkan prediksi online:

curl

Ikuti langkah-langkah berikut untuk membuat permintaan curl:

  1. 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.

  2. Dapatkan token autentikasi.

  3. 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:

  1. 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.

  2. Instal library klien Vertex AI Platform versi terbaru.

  3. Tetapkan variabel lingkungan yang diperlukan pada skrip Python.

  4. Lakukan autentikasi permintaan API Anda.

  5. 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)
    
  6. Simpan skrip Python dengan nama, seperti prediction.py.

  7. 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, seperti prediction.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.