Mendapatkan prediksi online

Prediksi online AI Platform Prediction adalah layanan yang dioptimalkan untuk menjalankan data Anda melalui model yang dihosting dengan latensi seminimal mungkin. Anda mengirim sejumlah kecil data ke layanan dan layanan tersebut akan menampilkan prediksi Anda dalam respons tersebut.

Pelajari prediksi online versus prediksi atau baca ringkasan konsep prediksi.

Sebelum memulai

Untuk meminta prediksi, Anda harus terlebih dahulu:

Region

Prediksi online tersedia di wilayah tertentu. Selain itu, jenis mesin yang berbeda tersedia di setiap wilayah. Untuk mempelajari ketersediaan prediksi online di setiap wilayah, baca panduan untuk wilayah.

Membuat model dan versi

Anda membuat keputusan penting berikut terkait cara menjalankan prediksi online saat membuat resource model dan versi:

Resource yang dibuat Keputusan yang ditentukan saat pembuatan resource
Model Region tempat menjalankan prediksi
Model Aktifkan logging prediksi online
Versi Versi runtime yang akan digunakan
Versi Versi Python yang akan digunakan
Versi Jenis mesin yang akan digunakan untuk prediksi online

Anda tidak dapat memperbarui setelan yang tercantum di atas setelah pembuatan awal model atau versi. Jika Anda perlu mengubah setelan ini, buat resource versi atau model baru dengan setelan baru dan deploy ulang model Anda.

Jenis mesin yang tersedia untuk prediksi online

Saat membuat versi, Anda dapat memilih jenis virtual machine yang digunakan AI Platform Prediction untuk node prediksi online. Pelajari jenis mesin lebih lanjut.

Meminta log untuk permintaan prediksi online

Layanan prediksi Prediksi AI Platform tidak memberikan informasi yang dicatat ke dalam log tentang permintaan secara default, karena log tersebut dikenai biaya. Prediksi online dengan kecepatan kueri per detik (QPS) tinggi dapat menghasilkan log dalam jumlah besar, yang tunduk pada harga Cloud Logging atau harga BigQuery.

Jika ingin mengaktifkan logging prediksi online, Anda harus mengonfigurasinya saat membuat resource model atau saat membuat resource versi model, bergantung pada jenis logging yang ingin diaktifkan. Ada tiga jenis logging yang dapat Anda aktifkan secara independen:

  • Log akses, yang mencatat informasi seperti stempel waktu dan latensi untuk setiap permintaan ke Cloud Logging.

    Anda dapat mengaktifkan logging akses saat membuat resource model.

  • Logging konsol, yang mencatat aliran stderr dan stdout ke dalam log dari node prediksi Anda ke Cloud Logging, dan dapat berguna untuk proses debug. Jenis logging ini sedang dalam pratinjau untuk jenis mesin Compute Engine (N1) dan tersedia secara umum untuk jenis mesin lama (MLS1).

    Anda dapat mengaktifkan logging konsol saat membuat resource model.

  • Logging permintaan-respons, yang mencatat contoh permintaan dan respons prediksi online ke tabel BigQuery. Jenis logging ini masih dalam versi beta.

    Anda dapat mengaktifkan logging respons permintaan dengan membuat resource versi model, lalu mengupdate versi tersebut.

gcloud

Untuk mengaktifkan logging akses, sertakan flag --enable-logging saat Anda membuat model dengan perintah gcloud ai-platform models create. Contoh:

gcloud ai-platform models create MODEL_NAME \
  --region=us-central1 \
  --enable-logging

Untuk mengaktifkan logging konsol (pratinjau), gunakan komponen gcloud beta dan sertakan flag --enable-console-logging. Contoh:

gcloud components install beta

gcloud beta ai-platform models create MODEL_NAME \
  --region=us-central1 \
  --enable-console-logging

Saat ini Anda tidak dapat mengaktifkan logging permintaan-respons (beta) menggunakan gcloud CLI. Anda hanya dapat mengaktifkan jenis logging ini saat mengirim permintaan projects.models.versions.patch ke REST API.

REST API

Untuk mengaktifkan logging akses, tetapkan onlinePredictionLogging ke True di resource Model saat membuat model Anda dengan projects.models.create.

Untuk mengaktifkan logging konsol (beta), tetapkan kolom onlinePredictionConsoleLogging ke True di resource Model.

Logging permintaan-respons

Tidak seperti jenis logging lainnya, Anda tidak dapat mengaktifkan logging respons permintaan saat membuat model. Sebagai gantinya, Anda dapat mengaktifkannya menggunakan metode projects.models.versions.patch pada versi model yang sudah ada. (Anda harus membuat versi model terlebih dahulu menggunakan Google Cloud Console, gcloud CLI, atau REST API.)

Untuk mengaktifkan logging respons permintaan, isi kolom requestLoggingConfig resource Versi dengan entri berikut:

  • samplingPercentage: angka antara 0 atau 1 yang menentukan fraksi permintaan yang akan dicatat ke dalam log. Misalnya, tetapkan nilai ini ke 1 untuk mencatat semua permintaan ke dalam log atau ke 0.1 untuk mencatat 10% permintaan ke dalam log.
  • bigqueryTableName: nama yang sepenuhnya memenuhi syarat (PROJECT_ID.DATASET_NAME.TABLE_NAME) tabel BigQuery tempat Anda ingin mencatat permintaan dan respons ke dalam log. Tabel harus sudah ada dengan skema berikut:

    Nama kolomJenisMode
    modelSTRINGREQUIRED
    model_versionSTRINGREQUIRED
    waktuTIMESTAMPREQUIRED
    raw_dataSTRINGREQUIRED
    raw_predictionSTRINGNULLABLE
    kebenaran nyataSTRINGNULLABLE

    Pelajari cara membuat tabel BigQuery.

Memeriksa model dengan What-If Tool

Anda dapat menggunakan What-If Tool(WIT) dalam lingkungan notebook untuk memeriksa model AI Platform Prediction melalui dasbor interaktif. What-If Tool terintegrasi dengan TensorBoard, notebook Jupyter, notebook Colab, dan JupyterHub. Vertex AI Workbench juga telah diinstal sebelumnya di notebook yang dikelola pengguna Vertex AI Workbench instance TensorFlow.

Pelajari cara menggunakan What-If Tool dengan AI Platform.

Memformat input untuk prediksi online

Memformat instance sebagai string JSON

Format dasar untuk prediksi online adalah daftar instance data. Daftar ini dapat berupa daftar nilai biasa atau anggota objek JSON, bergantung pada cara Anda mengonfigurasi input dalam aplikasi pelatihan. Model TensorFlow dan rutinitas prediksi kustom 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:

  • Tingkat teratas data instance harus berupa objek JSON: kamus untuk 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.predict. Pelajari persyaratan pemformatan isi permintaan lebih lanjut.

gcloud

Anda dapat memformat input dengan dua cara, tergantung rencana Anda untuk mengirim permintaan prediksi. Sebaiknya gunakan flag --json-request perintah gcloud ai-platform predict. Atau, Anda dapat menggunakan flag --json-instances dengan data JSON yang dibatasi baris baru.

Untuk --json-request

Jadikan setiap instance sebagai item dalam array JSON, dan berikan array sebagai kolom instances dari file JSON. Contoh:

instances.json

{"instances": [
  {"values": [1, 2, 3, 4], "key": 1},
  {"values": [5, 6, 7, 8], "key": 2}
]}

Untuk --json-instances

Pastikan file input Anda adalah file JSON yang dibatasi baris baru, dengan setiap instance sebagai objek JSON, satu instance per baris. Contoh:

instances.jsonl

{"values": [1, 2, 3, 4], "key": 1}
{"values": [5, 6, 7, 8], "key": 2}

REST API

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}
]}

Data biner dalam 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. Contoh Python 2.7 berikut mengenkode buffer data JPEG mentah menggunakan library base64 untuk membuat instance:

    {"image_bytes": {"b64": base64.b64encode(jpeg_data)}}
    

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

Meminta prediksi

Minta prediksi online dengan mengirimkan instance data input Anda sebagai string JSON dalam permintaan predict. Untuk memformat isi permintaan dan respons, lihat detail permintaan prediksi.

Jika Anda tidak menentukan versi model, permintaan prediksi Anda akan menggunakan versi default model.

gcloud

  1. Buat variabel lingkungan untuk menyimpan parameter, termasuk nilai versi jika Anda memutuskan untuk menentukan versi model tertentu:

    MODEL_NAME="[YOUR-MODEL-NAME]"
    INPUT_DATA_FILE="instances.json"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    
  2. Gunakan gcloud ai-platform visibilitas untuk mengirim instance ke model yang di-deploy. Perlu diketahui bahwa --version bersifat opsional.

    gcloud ai-platform predict \
      --model=$MODEL_NAME \
      --version=$VERSION_NAME \
      --json-request=$INPUT_DATA_FILE \
      --region=REGION
    

    Ganti REGION dengan region endpoint regional tempat Anda membuat model. Jika Anda membuat model di endpoint global, hapus flag --region.

  3. Alat gcloud mengurai respons dan mencetak prediksi ke terminal Anda dalam format yang dapat dibaca manusia. Anda dapat menentukan format output yang berbeda, seperti JSON atau CSV, menggunakan flag --format dengan perintah prediktif Anda. Lihat format output yang tersedia.

Python

Anda dapat menggunakan Library Klien Google API untuk Python untuk memanggil AI Platform Training and Prediction API tanpa membuat permintaan HTTP secara manual. Sebelum menjalankan contoh kode berikut, Anda harus menyiapkan autentikasi.

# Create the AI Platform service object.
# To authenticate set the environment variable
# GOOGLE_APPLICATION_CREDENTIALS=<path_to_service_account_file>
service = googleapiclient.discovery.build("ml", "v1")

def predict_json(project, model, instances, version=None):
    """Send json data to a deployed model for prediction.

    Args:
        project (str): project where the AI Platform Model is deployed.
        model (str): model name.
        instances ([Mapping[str: Any]]): Keys should be the names of Tensors
            your deployed model expects as inputs. Values should be datatypes
            convertible to Tensors, or (potentially nested) lists of datatypes
            convertible to tensors.
        version: str, version of the model to target.
    Returns:
        Mapping[str: any]: dictionary of prediction results defined by the
            model.
    """
    name = f"projects/{project}/models/{model}"

    if version is not None:
        name += f"/versions/{version}"

    response = (
        service.projects().predict(name=name, body={"instances": instances}).execute()
    )

    if "error" in response:
        raise RuntimeError(response["error"])

    return response["predictions"]

Java

Anda dapat menggunakan Library Klien Google API untuk Java untuk memanggil AI Platform Training and Prediction API tanpa membuat permintaan HTTP secara manual. Sebelum menjalankan contoh kode berikut, Anda harus menyiapkan autentikasi.

/*
 * Copyright 2017 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.FileContent;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpContent;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.UriTemplate;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.discovery.Discovery;
import com.google.api.services.discovery.model.JsonSchema;
import com.google.api.services.discovery.model.RestDescription;
import com.google.api.services.discovery.model.RestMethod;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

/*
 * Sample code for sending an online prediction request to Cloud Machine Learning Engine.
 */

public class OnlinePredictionSample {
  public static void main(String[] args) throws Exception {
    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
    Discovery discovery = new Discovery.Builder(httpTransport, jsonFactory, null).build();

    RestDescription api = discovery.apis().getRest("ml", "v1").execute();
    RestMethod method = api.getResources().get("projects").getMethods().get("predict");

    JsonSchema param = new JsonSchema();
    String projectId = "YOUR_PROJECT_ID";
    // You should have already deployed a model and a version.
    // For reference, see https://cloud.google.com/ml-engine/docs/deploying-models.
    String modelId = "YOUR_MODEL_ID";
    String versionId = "YOUR_VERSION_ID";
    param.set(
        "name", String.format("projects/%s/models/%s/versions/%s", projectId, modelId, versionId));

    GenericUrl url =
        new GenericUrl(UriTemplate.expand(api.getBaseUrl() + method.getPath(), param, true));
    System.out.println(url);

    String contentType = "application/json";
    File requestBodyFile = new File("input.txt");
    HttpContent content = new FileContent(contentType, requestBodyFile);
    System.out.println(content.getLength());

    List<String> scopes = new ArrayList<>();
    scopes.add("https://www.googleapis.com/auth/cloud-platform");

    GoogleCredentials credential = GoogleCredentials.getApplicationDefault().createScoped(scopes);
    HttpRequestFactory requestFactory =
        httpTransport.createRequestFactory(new HttpCredentialsAdapter(credential));
    HttpRequest request = requestFactory.buildRequest(method.getHttpMethod(), url, content);

    String response = request.execute().parseAsString();
    System.out.println(response);
  }
}

Memecahkan masalah prediksi online

Error umum dalam prediksi online mencakup hal berikut:

  • Error kehabisan memori
  • Format data input salah
  • Satu permintaan prediksi online tidak boleh berisi lebih dari 1,5 MB data. Permintaan yang dibuat menggunakan gcloud CLI dapat menangani tidak lebih dari 100 instance per file. Guna mendapatkan prediksi untuk lebih banyak instance secara bersamaan, gunakan prediksi batch.

Coba kurangi ukuran model Anda sebelum men-deploy-nya ke AI Platform Prediction untuk prediksi.

Lihat detail selengkapnya tentang memecahkan masalah prediksi online.

Langkah selanjutnya