Membuat prediksi ML menggunakan SQL

Halaman ini menunjukkan cara membuat prediksi machine learning (ML) dari database Spanner. Prediksi ML berfungsi dengan database GoogleSQL dan PostgreSQL.

Integrasi Spanner Vertex AI memberi Anda kemampuan untuk membuat prediksi menggunakan kode SQL dengan memanggil fungsi ML.PREDICT untuk GoogleSQL atau fungsi spanner.ML_PREDICT_ROW untuk PostgreSQL. Untuk informasi selengkapnya tentang integrasi Vertex AI Spanner, lihat Ringkasan integrasi Vertex AI Spanner.

Sebelum memulai

Sebelum dapat membuat prediksi dari instance Spanner, Anda harus menyiapkan database dan memilih model.

Mengonfigurasi akses untuk integrasi Vertex AI Spanner ke endpoint Vertex AI

Spanner membuat agen layanan dan memberikan izin yang diperlukan secara otomatis saat Spanner mengeksekusi pernyataan DDL MODEL pertama. Jika database Spanner dan endpoint Vertex AI berada dalam project yang sama, tidak diperlukan penyiapan tambahan.

Jika akun agen layanan Spanner tidak ada untuk project Spanner Anda, buat akun tersebut dengan menjalankan perintah berikut:

gcloud beta services identity create --service=spanner.googleapis.com --project={PROJECT}`

Ikuti langkah-langkah yang dijelaskan di Memberikan satu peran untuk memberikan peran Spanner API Service Agent ke akun agen layanan Spanner service-PROJECT_ID@gcp-sa-spanner.iam.gserviceaccount.com di project Vertex AI Anda.

Pilih model

Saat menggunakan fungsi ML.PREDICT (untuk GoogleSQL) atau spanner.ML_PREDICT_ROW (untuk PostgreSQL), Anda harus menentukan lokasi model ML. Model yang Anda pilih dapat berupa salah satu dari berikut:

Untuk mempelajari integrasi Vertex AI Spanner lebih lanjut, lihat Bagaimana cara kerja integrasi Vertex AI Spanner?.

Membuat prediksi

Bergantung pada jenis model yang Anda pilih, langkah-langkah untuk membuat prediksi akan berbeda.

Menggunakan model di Model Garden Vertex AI

Untuk membuat prediksi menggunakan model dari Model Garden Vertex AI, pilih model dari Model Garden.

GoogleSQL

Sebelum menggunakan model dengan ML.PREDICT(), Anda harus mendaftarkan model menggunakan pernyataan CREATE MODEL.

CREATE MODEL 'MODEL_NAME'
INPUT (INPUT_COLUMN_NAME INPUT_COLUMN_TYPE)
OUTPUT (OUTPUT_COLUMN_NAME OUTPUT_COLUMN_TYPE)
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/publishers/google/models/model_id'
);

Ganti kode berikut:

  • MODEL_NAME: nama yang ingin Anda berikan pada model

  • INPUT_COLUMN_NAME: nama kolom input Anda. Misalnya, jika menggunakan model gemini-pro, nama kolom input adalah prompt.

  • INPUT_COLUMN_TYPE: jenis data untuk INPUT_COLUMN_NAME

  • OUTPUT_COLUMN_NAME: nama kolom output Anda. Misalnya, jika menggunakan model gemini-pro, nama kolom output adalah content.

  • OUTPUT_COLUMN_TYPE: jenis data untuk OUTPUT_COLUMN_NAME

  • PROJECT_ID: ID project Google Cloud Anda

  • REGION_ID: ID region Google Cloud tempat model berada, misalnya, us-central1

  • MODEL_ID: ID model ML yang ingin Anda gunakan—misalnya, gemini-pro

    Untuk informasi selengkapnya tentang model, lihat Referensi API model untuk AI Generatif.

Gunakan fungsi GoogleSQL ML.PREDICT dengan model yang dipilih dari Model Garden untuk membuat prediksi.

SELECT * FROM ML.PREDICT(
  MODEL `MODEL_NAME`,
  `INPUT_RELATION`[, `PARAMETERS`])

Ganti kode berikut:

  • MODEL_NAME: nama yang ingin Anda berikan pada model

    Untuk informasi selengkapnya tentang model, lihat Referensi API model untuk AI Generatif.

  • INPUT_RELATION: TABLE table_name atau subkueri tabel atau subkueri yang menyediakan data untuk menjalankan prediksi ML.

  • PARAMETERS: nilai STRUCT yang berisi parameter yang didukung oleh model_id.

Anda juga dapat menggunakan SAFE.ML.PREDICT untuk menampilkan null, bukan error dalam prediksi Anda. Hal ini berguna jika menjalankan kueri besar dengan beberapa prediksi yang gagal dapat ditoleransi.

PostgreSQL

Gunakan fungsi PostgreSQL ML_PREDICT_ROW dengan model yang dipilih dari Model Garden untuk membuat prediksi.

SELECT spanner.ml_predict_row(
  'projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID'::text,
  '{
    "instances": [ INSTANCES ],
    "parameters": { PARAMETERS }
   }'::jsonb);

Ganti kode berikut:

  • PROJECT_ID: ID project Google Cloud Anda

  • REGION_ID: ID region Google Cloud tempat model berada, misalnya, us-central1

  • MODEL_ID: ID model ML yang ingin Anda gunakan—misalnya, gemini-pro

    Untuk informasi selengkapnya tentang model, lihat Referensi API model untuk AI Generatif.

  • INSTANCES: input untuk panggilan prediksi, dalam format JSON

  • PARAMETERS: parameter opsional untuk panggilan prediksi, dalam format JSON

Kueri ini menghasilkan respons JSON. Untuk informasi selengkapnya tentang pesan respons JSON model, lihat PredictResponse.

Menggunakan endpoint model Vertex AI

Untuk menggunakan model yang dilatih atau didownload dengan integrasi Spanner Vertex AI, Anda harus men-deploy model ke Vertex AI. Untuk mengetahui informasi selengkapnya tentang cara men-deploy model ke endpoint di Vertex AI, lihat Men-deploy model ke endpoint.

GoogleSQL

Gunakan fungsi GoogleSQL ML.PREDICT dengan model di endpoint Vertex AI untuk membuat prediksi. Sebelum menggunakan model dengan ML.PREDICT(), Anda harus mendaftarkan model menggunakan pernyataan CREATE MODEL. Setiap model yang di-deploy memiliki skema unik sendiri. Berikut adalah contoh skema dari Ringkasan klasifikasi dan regresi

CREATE MODEL MyClassificationModel
INPUT (
  length FLOAT64,
  material STRING(MAX),
  tag_array ARRAY<STRING(MAX)>
)
OUTPUT (
  scores ARRAY<FLOAT64>,
  classes ARRAY<STRING(MAX)>
)
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID'
)

Ganti kode berikut:

  • PROJECT_ID: ID project Google Cloud Anda

  • LOCATION: ID region Google Cloud tempat model berada, misalnya, us-central1

  • ENDPOINT_ID: ID model ML yang ingin Anda gunakan—misalnya, gemini-pro

    Untuk informasi selengkapnya tentang model, lihat Referensi API model untuk AI Generatif.

Gunakan fungsi GoogleSQL ML.PREDICT dengan model yang dipilih dari Model Garden untuk membuat prediksi.

SELECT * FROM ML.PREDICT(
  `MODEL_ID`,
  `INPUT_RELATION`[, `PARAMETERS`])

Ganti kode berikut:

  • MODEL_ID: ID model ML yang ingin Anda gunakan.

  • INPUT_RELATION: tabel atau subkueri tempat Anda ingin menjalankan prediksi ML.

  • PARAMETERS: nilai STRUCT yang berisi parameter yang didukung oleh model_name.

Kueri ini menghasilkan relasi yang berisi semua kolom output model dan semua kolom relasi input.

PostgreSQL

Gunakan fungsi PostgreSQL ML.PREDICT dengan model di endpoint Vertex AI untuk membuat prediksi.

  SELECT spanner.ml_predict_row(
    'projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID'::text,
    '{
      "instances": [ INSTANCES ],
      "parameters": { PARAMETERS }
      }'::jsonb);
  ```

Replace the following:
  • PROJECT_ID: ID project Google Cloud tempat model berada

  • REGION_ID: ID region Google Cloud tempat model berada, misalnya, us-central1

  • ENDPOINT_ID: ID endpoint model

  • INSTANCES: input ke panggilan prediksi, dalam format JSON

  • PARAMETERS: parameter opsional untuk panggilan prediksi, dalam format JSON

Kueri ini menghasilkan respons JSON. Untuk informasi selengkapnya tentang pesan respons JSON model, lihat PredictResponse.

Contoh penggunaan fungsi ML untuk membuat prediksi

Contoh berikut menggunakan model gemini-pro, dari Model Garden, untuk membuat teks berdasarkan perintah singkat yang diberikan sebagai argumen. Model ini tersedia sebagai bagian dari Gemini di Spanner.

GoogleSQL

Mendaftarkan model gemini-pro

CREATE MODEL GeminiPro
INPUT (prompt STRING(MAX))
OUTPUT (content STRING(MAX))
REMOTE
OPTIONS (
  endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/gemini-pro',
  default_batch_size = 1
);

Ganti kode berikut:

  • PROJECT: the project ID
  • LOCATION: region tempat Anda menggunakan Vertex AI

Menjalankan model

SELECT content
FROM ML.PREDICT(
  MODEL GeminiPro,
  (SELECT "Is 7 a prime number?" AS prompt),
  STRUCT(256 AS maxOutputTokens, 0.2 AS temperature, 40 as topK, 0.95 AS topP)
);

Output yang diharapkan

Output yang diharapkan adalah sebagai berikut:

+--------------------+
| content            |
+--------------------+
| "Yes"              |
+--------------------+

PostgreSQL

Menjalankan model

select spanner.ml_predict_row(
  '{
    "endpoint": "projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-pro",
    "default_batch_size": 1
   }'::jsonb,
  '{
    "instances":[{"prompt": "Is 7 a prime number?"}],
    "parameters":{"maxOutputTokens":256, "topK": 40, "topP":0.96, "temperature":0.2}
    }'
);

Output yang diharapkan

Output yang diharapkan adalah sebagai berikut:

+--------------------+
| content            |
+--------------------+
| "Yes"              |
+--------------------+