Halaman ini menunjukkan cara mendapatkan prediksi online (real-time) dari model terlatih kustom Anda menggunakan konsol Google Cloud atau API Vertex AI.
Memformat input untuk prediksi online
Bagian ini menunjukkan cara memformat dan mengenkode instance input prediksi Anda sebagai JSON, yang diperlukan jika Anda menggunakan predict
atau explain
. Tindakan ini tidak diperlukan
jika Anda menggunakan metode
rawPredict
. Untuk mengetahui informasi tentang metode yang harus dipilih, lihat Mengirim permintaan ke endpoint.
Jika Anda menggunakan Vertex AI SDK untuk Python untuk mengirim permintaan prediksi, tentukan
daftar instance tanpa kolom instances
. Misalnya, tentukan [
["the","quick","brown"], ... ]
, bukan { "instances": [
["the","quick","brown"], ... ] }
.
Jika model Anda menggunakan container kustom, input Anda harus diformat sebagai JSON, dan ada kolom parameters
tambahan yang dapat digunakan untuk container Anda. Pelajari input prediksi format dengan container kustom lebih lanjut.
Memformat instance sebagai string JSON
Format dasar untuk prediksi online adalah daftar instance data. Ini dapat berupa daftar nilai biasa atau anggota objek JSON, bergantung pada cara Anda mengonfigurasi input dalam aplikasi pelatihan Anda. Model TensorFlow dapat menerima input yang lebih kompleks, sementara sebagian besar model scikit-learn dan XGBoost mengharapkan daftar angka sebagai input.
Contoh ini menunjukkan tensor input dan kunci instance ke model TensorFlow:
{"values": [1, 2, 3, 4], "key": 1}
Susunan string JSON bisa menjadi kompleks selama mengikuti aturan berikut:
Data instance tingkat teratas harus berupa objek JSON: kamus key-value pair.
Nilai individual dalam objek instance dapat berupa string, angka, atau daftar. Anda tidak dapat menyematkan objek JSON.
Daftar hanya boleh berisi item dari jenis yang sama (termasuk daftar lainnya). Anda tidak boleh mencampur nilai string dan numerik.
Anda meneruskan instance input untuk prediksi online sebagai isi pesan untuk panggilan projects.locations.endpoints.predict
. Pelajari lebih lanjut persyaratan pemformatan isi permintaan.
Jadikan setiap instance sebagai item dalam array JSON, dan sediakan array sebagai kolom instances
dari objek JSON. Contoh:
{"instances": [
{"values": [1, 2, 3, 4], "key": 1},
{"values": [5, 6, 7, 8], "key": 2}
]}
Mengenkode data biner untuk input prediksi
Data biner tidak dapat diformat sebagai string berenkode UTF-8 yang didukung JSON. Jika Anda memiliki data biner dalam input, Anda harus menggunakan encoding base64 untuk merepresentasikannya. Diperlukan format khusus berikut:
String yang dienkode harus diformat sebagai objek JSON dengan satu kunci bernama
b64
. Dalam Python 3, encoding base64 menghasilkan output urutan byte. Anda harus mengonversinya menjadi string agar JSON dapat diserialisasi:{'image_bytes': {'b64': base64.b64encode(jpeg_data).decode()}}
Dalam kode model TensorFlow, Anda harus memberi nama alias untuk tensor input dan output biner agar diakhiri dengan '_bytes'.
Contoh permintaan dan respons
Bagian ini menjelaskan format isi permintaan prediksi dan isi respons, dengan contoh untuk TensorFlow, scikit-learn, dan XGBoost.
Detail isi permintaan
TensorFlow
Isi permintaan berisi data dengan struktur berikut (representasi JSON):
{
"instances": [
<value>|<simple/nested list>|<object>,
...
]
}
Objek instances[]
wajib ada, dan harus berisi daftar instance untuk mendapatkan prediksi.
Struktur setiap elemen dari daftar instance ditentukan oleh definisi input model Anda. Instance dapat menyertakan input bernama (sebagai objek) atau hanya berisi nilai tak berlabel.
Tidak semua data menyertakan input bernama. Beberapa instance merupakan nilai JSON sederhana (boolean, angka, atau string). Namun, instance sering kali berupa daftar nilai sederhana, atau daftar bertingkat yang kompleks.
Berikut adalah beberapa contoh isi permintaan.
Data CSV dengan setiap baris yang dienkode sebagai nilai string:
{"instances": ["1.0,true,\\"x\\"", "-2.0,false,\\"y\\""]}
Teks biasa:
{"instances": ["the quick brown fox", "the lazy dog"]}
Kalimat yang dienkode sebagai daftar kata (vektor string):
{ "instances": [ ["the","quick","brown"], ["the","lazy","dog"], ... ] }
Nilai skalar floating point:
{"instances": [0.0, 1.1, 2.2]}
Vektor bilangan bulat:
{ "instances": [ [0, 1, 2], [3, 4, 5], ... ] }
Tensor (dalam hal ini, tensor dua dimensi):
{ "instances": [ [ [0, 1, 2], [3, 4, 5] ], ... ] }
Gambar, yang dapat direpresentasikan dengan berbagai cara. Dalam skema encoding ini, dua dimensi pertama mewakili baris dan kolom gambar, dan dimensi ketiga berisi daftar (vektor) nilai R, G, dan B untuk setiap piksel:
{ "instances": [ [ [ [138, 30, 66], [130, 20, 56], ... ], [ [126, 38, 61], [122, 24, 57], ... ], ... ], ... ] }
Encoding data
String JSON harus dienkode sebagai UTF-8. Untuk mengirim data biner, Anda harus mengenkode data dengan base64 dan menandainya sebagai biner. Untuk menandai string JSON sebagai biner, ganti string tersebut dengan objek JSON dengan atribut tunggal bernama b64
:
{"b64": "..."}
Contoh berikut menunjukkan dua instance tf.Examples
serial, yang memerlukan encoding base64 (data palsu, hanya untuk tujuan ilustrasi):
{"instances": [{"b64": "X5ad6u"}, {"b64": "IA9j4nx"}]}
Contoh berikut menunjukkan dua string byte gambar JPEG, yang memerlukan encoding base64 (data palsu, hanya untuk tujuan ilustrasi):
{"instances": [{"b64": "ASa8asdf"}, {"b64": "JLK7ljk3"}]}
Tensor multi input
Beberapa model memiliki grafik TensorFlow dasar yang menerima tensor multi input. Dalam hal ini, gunakan nama dari pasangan nama/nilai JSON untuk mengidentifikasi tensor input.
Untuk grafik dengan alias tensor input "tag" (string) dan "image" (string berenkode base64):
{ "instances": [ { "tag": "beach", "image": {"b64": "ASa8asdf"} }, { "tag": "car", "image": {"b64": "JLK7ljk3"} } ] }
Untuk grafik dengan alias tensor input "tag" (string) dan "image" (array 3 dimensi int 8-bit):
{ "instances": [ { "tag": "beach", "image": [ [ [138, 30, 66], [130, 20, 56], ... ], [ [126, 38, 61], [122, 24, 57], ... ], ... ] }, { "tag": "car", "image": [ [ [255, 0, 102], [255, 0, 97], ... ], [ [254, 1, 101], [254, 2, 93], ... ], ... ] }, ... ] }
scikit-learn
Isi permintaan berisi data dengan struktur berikut (representasi JSON):
{
"instances": [
<simple list>,
...
]
}
Objek instances[]
wajib ada, dan harus berisi daftar instance untuk mendapatkan prediksi. Pada contoh berikut, setiap instance input adalah
daftar float:
{
"instances": [
[0.0, 1.1, 2.2],
[3.3, 4.4, 5.5],
...
]
}
Dimensi instance input harus sesuai dengan harapan model Anda. Misalnya, jika model Anda memerlukan tiga fitur, panjang setiap instance input harus 3.
XGBoost
Isi permintaan berisi data dengan struktur berikut (representasi JSON):
{
"instances": [
<simple list>,
...
]
}
Objek instances[]
wajib ada, dan harus berisi daftar instance untuk mendapatkan prediksi. Pada contoh berikut, setiap instance input adalah
daftar float:
{
"instances": [
[0.0, 1.1, 2.2],
[3.3, 4.4, 5.5],
...
]
}
Dimensi instance input harus sesuai dengan harapan model Anda. Misalnya, jika model Anda memerlukan tiga fitur, panjang setiap instance input harus 3.
Vertex AI tidak mendukung representasi renggang instance input untuk XGBoost.
Layanan prediksi online menafsirkan angka nol dan NaN
secara berbeda. Jika nilai fitur adalah nol, gunakan 0.0
dalam input yang sesuai. Jika nilai fitur tidak ada, gunakan "NaN"
dalam input yang sesuai.
Contoh berikut merepresentasikan permintaan prediksi dengan instance input tunggal, dengan nilai fitur pertama adalah 0,0, nilai fitur kedua adalah 1,1, dan nilai fitur ketiga tidak ada:
{"instances": [[0.0, 1.1, "NaN"]]}
PyTorch
Jika model Anda menggunakan container bawaan
PyTorch,
pengendali default TorchServe mengharapkan setiap instance digabungkan dalam kolom
data
. Contoh:
{
"instances": [
{ "data": , <value> },
{ "data": , <value> }
]
}
Detail isi respons
Jika panggilan berhasil, isi respons berisi satu entri prediksi per instance di dalam isi permintaan, yang diberikan dalam urutan yang sama:
{
"predictions": [
{
object
}
],
"deployedModelId": string
}
Jika prediksi gagal untuk instance apa pun, isi respons tidak akan berisi prediksi. Sebagai gantinya, respons akan berisi satu entri error:
{
"error": string
}
Objek predictions[]
berisi daftar prediksi, satu untuk setiap instance dalam permintaan.
Jika terjadi error, string error
berisi pesan yang menjelaskan masalahnya. Jika terjadi error saat memproses instance, maka yang akan ditampilkan adalah error, bukan daftar prediksi.
Meskipun ada satu prediksi per instance, format prediksi tidak terkait langsung dengan format instance. Prediksi mengambil format apa pun yang ditentukan dalam koleksi output yang ditentukan dalam model. Kumpulan prediksi akan ditampilkan dalam daftar JSON. Setiap anggota daftar dapat berupa nilai sederhana, daftar, atau objek JSON dengan kompleksitas apa pun. Jika model Anda memiliki lebih dari satu tensor output, setiap prediksi akan menjadi objek JSON yang berisi pasangan nama/nilai untuk setiap output. Nama-nama tersebut mengidentifikasi alias output di dalam grafik.
Contoh isi respons
TensorFlow
Contoh berikut menampilkan beberapa kemungkinan respons:
-
Kumpulan prediksi sederhana untuk tiga instance input, dengan setiap prediksi merupakan nilai bilangan bulat:
{"predictions": [5, 4, 3], "deployedModelId": 123456789012345678 }
-
Rangkaian prediksi yang lebih kompleks, masing-masing berisi dua nilai bernama yang sesuai dengan tensor output, yang masing-masing bernama
label
danscores
. Nilailabel
adalah kategori yang diprediksi ("mobil" atau "pantai") danscores
berisi daftar probabilitas untuk instance tersebut di seluruh kategori yang memungkinkan.{ "predictions": [ { "label": "beach", "scores": [0.1, 0.9] }, { "label": "car", "scores": [0.75, 0.25] } ], "deployedModelId": 123456789012345678 }
-
Respons jika terjadi error saat memproses instance input:
{"error": "Divide by zero"}
scikit-learn
Contoh berikut menampilkan beberapa kemungkinan respons:
-
Kumpulan prediksi sederhana untuk tiga instance input, dengan setiap prediksi merupakan nilai bilangan bulat:
{"predictions": [5, 4, 3], "deployedModelId": 123456789012345678 }
-
Respons jika terjadi error saat memproses instance input:
{"error": "Divide by zero"}
XGBoost
Contoh berikut menampilkan beberapa kemungkinan respons:
-
Kumpulan prediksi sederhana untuk tiga instance input, dengan setiap prediksi merupakan nilai bilangan bulat:
{"predictions": [5, 4, 3], "deployedModelId": 123456789012345678 }
-
Respons jika terjadi error saat memproses instance input:
{"error": "Divide by zero"}
Mengirim permintaan ke endpoint
Ada tiga cara untuk mengirim permintaan:
Permintaan prediksi: kirim permintaan ke
predict
untuk mendapatkan prediksi online.Permintaan prediksi mentah: mengirim permintaan ke
rawPredict
, yang memungkinkan Anda menggunakan payload HTTP arbitrer, bukan mengikuti panduan yang dijelaskan di bagian Format input Anda pada halaman ini. Anda mungkin ingin mendapatkan prediksi mentah jika:- Anda menggunakan container kustom yang menerima permintaan dan mengirim respons yang berbeda dari pedoman.
- Anda memerlukan latensi yang lebih rendah.
rawPredict
melewati langkah-langkah serialisasi dan langsung meneruskan permintaan ke container prediksi. - Anda menayangkan prediksi dengan NVIDIA Triton.
Permintaan penjelasan: mengirim permintaan ke
explain
. Jika Anda telah mengonfigurasiModel
untuk Vertex Explainable AI, Anda bisa mendapatkan penjelasan online. Permintaan penjelasan online memiliki format yang sama dengan permintaan prediksi online, dan menampilkan respons yang serupa; satu-satunya perbedaan adalah bahwa respons penjelasan online mencakup atribusi fitur serta prediksi.
Mengirim permintaan prediksi online
gcloud
Contoh berikut menggunakan perintah
gcloud ai endpoints predict
:
Tulis objek JSON berikut untuk diajukan di lingkungan lokal Anda. Nama file tidak penting, tetapi untuk contoh ini, beri nama file
request.json
.{ "instances": INSTANCES }
Ganti kode berikut:
- INSTANCES: Array JSON dari instance yang ingin Anda dapatkan prediksinya. Format setiap instance bergantung pada input mana yang diharapkan oleh model ML terlatih Anda. Untuk informasi selengkapnya, lihat Memformat input untuk prediksi online.
Jalankan perintah berikut:
gcloud ai endpoints predict ENDPOINT_ID \ --region=LOCATION_ID \ --json-request=request.json
Ganti kode berikut:
- ENDPOINT_ID: ID untuk endpoint.
- LOCATION_ID: Region tempat Anda menggunakan Vertex AI.
REST
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- LOCATION_ID: Region tempat Anda menggunakan Vertex AI.
- PROJECT_ID: project ID Anda
- ENDPOINT_ID: ID untuk endpoint.
- INSTANCES: Array JSON dari instance yang ingin Anda dapatkan prediksinya. Format setiap instance bergantung pada input mana yang diharapkan oleh model ML terlatih Anda. Untuk informasi selengkapnya, lihat Memformat input untuk prediksi online.
Metode HTTP dan URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:predict
Isi JSON permintaan:
{ "instances": INSTANCES }
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:predict"
PowerShell
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:predict" | Select-Object -Expand Content
- PREDICTIONS: Array prediksi JSON, satu untuk setiap instance yang Anda sertakan dalam isi permintaan.
-
DEPLOYED_MODEL_ID: ID
DeployedModel
yang menayangkan prediksi.
{ "predictions": PREDICTIONS, "deployedModelId": "DEPLOYED_MODEL_ID" }
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java Vertex AI.
Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Node.js Vertex AI.
Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
Python
Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Python API.
Mengirim permintaan prediksi mentah online
gcloud
Contoh berikut menggunakan perintah
gcloud ai endpoints raw-predict
:
-
Untuk meminta prediksi dengan objek JSON di REQUEST yang ditentukan pada command line:
gcloud ai endpoints raw-predict ENDPOINT_ID
--region=LOCATION
--request REQUEST Untuk meminta prediksi dengan image yang disimpan dalam file image.jpeg dan header
Content-Type
yang sesuai:gcloud ai endpoints raw-predict ENDPOINT_ID
--region=LOCATION
--http-headers=Content-Type=image/jpeg
--request @image.jpegGanti kode berikut:
- ENDPOINT_ID: ID untuk endpoint.
- LOCATION_ID: Region tempat Anda menggunakan Vertex AI.
- REQUEST: Isi permintaan yang ingin Anda dapatkan prediksinya. Format permintaan bergantung pada ekspektasi container kustom Anda, yang mungkin tidak selalu berupa objek JSON.
Python
Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Python API.
Responsnya mencakup header HTTP berikut:
X-Vertex-AI-Endpoint-Id
: ID dariEndpoint
yang menayangkan prediksi ini.X-Vertex-AI-Deployed-Model-Id
: IDDeployedModel
Endpoint yang menayangkan prediksi ini.
Mengirim permintaan penjelasan online
gcloud
Contoh berikut menggunakan perintah
gcloud ai endpoints explain
:
Tulis objek JSON berikut untuk diajukan di lingkungan lokal Anda. Nama file tidak penting, tetapi untuk contoh ini, beri nama file
request.json
.{ "instances": INSTANCES }
Ganti kode berikut:
- INSTANCES: Array JSON dari instance yang ingin Anda dapatkan prediksinya. Format setiap instance bergantung pada input mana yang diharapkan oleh model ML terlatih Anda. Untuk informasi selengkapnya, lihat Memformat input untuk prediksi online.
Jalankan perintah berikut:
gcloud ai endpoints explain ENDPOINT_ID \ --region=LOCATION_ID \ --json-request=request.json
Ganti kode berikut:
- ENDPOINT_ID: ID untuk endpoint.
- LOCATION_ID: Region tempat Anda menggunakan Vertex AI.
Secara opsional, jika Anda ingin mengirim permintaan penjelasan ke
DeployedModel
tertentu diEndpoint
, Anda dapat menentukan flag--deployed-model-id
:gcloud ai endpoints explain ENDPOINT_ID \ --region=LOCATION \ --deployed-model-id=DEPLOYED_MODEL_ID \ --json-request=request.json
Selain placeholder yang dijelaskan sebelumnya, ganti placeholder berikut:
-
DEPLOYED_MODEL_ID Opsional: ID model yang di-deploy yang ingin Anda lihat penjelasannya. ID disertakan dalam respons metode
predict
. Jika Anda perlu meminta penjelasan untuk model tertentu dan Anda memiliki lebih dari satu model yang di-deploy ke endpoint yang sama, Anda dapat menggunakan ID ini untuk memastikan penjelasan ditampilkan untuk model tertentu.
REST
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- LOCATION_ID: Region tempat Anda menggunakan Vertex AI.
- PROJECT_ID: project ID Anda
- ENDPOINT_ID: ID untuk endpoint.
- INSTANCES: Array JSON dari instance yang ingin Anda dapatkan prediksinya. Format setiap instance bergantung pada input mana yang diharapkan oleh model ML terlatih Anda. Untuk informasi selengkapnya, lihat Memformat input untuk prediksi online.
Metode HTTP dan URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:explain
Isi JSON permintaan:
{ "instances": INSTANCES }
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:explain"
PowerShell
Simpan isi permintaan dalam file bernama request.json
,
dan jalankan perintah berikut:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:explain" | Select-Object -Expand Content
- PREDICTIONS: Array prediksi JSON, satu untuk setiap instance yang Anda sertakan dalam isi permintaan.
- EXPLANATIONS: Array JSON yang berisi penjelasan, satu untuk setiap prediksi.
-
DEPLOYED_MODEL_ID: ID
DeployedModel
yang menayangkan prediksi.
{ "predictions": PREDICTIONS, "explanations": EXPLANATIONS, "deployedModelId": "DEPLOYED_MODEL_ID" }
Python
Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Python API.
Langkah selanjutnya
- Pelajari Logging prediksi online.