Generar predicciones de AA con SQL

En esta página, se muestra cómo generar predicciones de aprendizaje automático (AA) a partir de un Base de datos de Spanner. Las predicciones del AA funcionan con Bases de datos GoogleSQL y PostgreSQL.

La integración de Vertex AI en Spanner te brinda la habilidad de generar predicciones con tu código SQL llamando al ML.PREDICT para GoogleSQL o la spanner.ML_PREDICT_ROW para PostgreSQL. Para obtener más información Integración de Vertex AI en Spanner, consulta Descripción general de la integración de Vertex AI en Spanner.

Antes de comenzar

Antes de que puedas generar predicciones a partir de una instancia de Spanner, debes preparar tu base de datos y seleccionar un modelo.

Configura el acceso para la integración de Vertex AI de Spanner a los extremos de Vertex AI

Spanner crea el agente de servicio y otorga los permisos necesarios automáticamente cuando Spanner ejecuta la primera declaración DDL MODEL. Si tanto la base de datos de Spanner como el extremo de Vertex AI están mismo proyecto, no se requiere ninguna configuración adicional.

Si la cuenta del agente de servicio de Spanner no existe para tu Spanner, créalo ejecutando el siguiente comando:

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

Sigue los pasos descritos en Otorga un solo rol a otorga el rol Spanner API Service Agent al Cuenta de agente de servicio de Spanner service-PROJECT_ID@gcp-sa-spanner.iam.gserviceaccount.com en tu proyecto de Vertex AI.

Seleccionar un modelo

Cuando uses ML.PREDICT (para GoogleSQL) o spanner.ML_PREDICT_ROW (para PostgreSQL), debes especificar la ubicación. del modelo de AA. El modelo que selecciones puede ser uno de los siguientes:

Para obtener más información sobre la integración de Vertex AI de Spanner, consulta ¿Cómo funciona la integración de Vertex AI de Spanner?

Genere predicciones

Según el tipo de modelo que selecciones, los pasos para generar las predicciones serán diferentes.

Usa un modelo en Model Garden de Vertex AI

Para generar una predicción con un modelo de Model Garden de Vertex AI, sigue estos pasos: selecciona un modelo de Model Garden.

GoogleSQL

Antes de usar un modelo con ML.PREDICT(), debes registrarlo con la sentencia 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'
);

Reemplaza lo siguiente:

  • MODEL_NAME: Es el nombre que deseas darle al modelo.

  • INPUT_COLUMN_NAME: Es el nombre de la columna de entrada. Por ejemplo: Si usas el modelo gemini-pro, el nombre de la columna de entrada es prompt.

  • INPUT_COLUMN_TYPE: Es el tipo de datos para INPUT_COLUMN_NAME.

  • OUTPUT_COLUMN_NAME: Es el nombre de la columna de resultado. Por ejemplo: Si usas el modelo gemini-pro, el nombre de la columna de salida es content.

  • OUTPUT_COLUMN_TYPE: Es el tipo de datos para OUTPUT_COLUMN_NAME.

  • PROJECT_IDEl ID de tu proyecto de Google Cloud.

  • REGION_ID: Es el ID de la región de Google Cloud a la que pertenece el modelo. ubicados en, por ejemplo, us-central1

  • MODEL_ID: Es el ID del modelo de AA que deseas usar, por ejemplo, gemini-pro.

    Para obtener más información sobre los modelos, consulta Referencia de la API de modelos para IA generativa.

Usa la ML.PREDICT. Función de GoogleSQL con el modelo seleccionado del Model Garden para generar tu predicción.

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

Reemplaza lo siguiente:

  • MODEL_NAME: Es el nombre que deseas darle al modelo.

    Para obtener más información sobre los modelos, consulta Referencia de la API de modelos para IA generativa.

  • INPUT_RELATION: Es TABLE table_name o una subconsulta de la tabla o subconsulta que suministra datos. para ejecutar la predicción de AA.

  • PARAMETERS: Es un valor STRUCT que contiene parámetros. compatible con model_id.

También puedes usar SAFE.ML.PREDICT para mostrar null en lugar de un error en tus predicciones. Esto es útil cuando se ejecutan consultas grandes en las que algunas predicciones fallidas son tolerables.

PostgreSQL

Usa la función de PostgreSQL ML_PREDICT_ROW con el modelo seleccionado del Model Garden para generar tu predicción.

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

Reemplaza lo siguiente:

  • PROJECT_IDEl ID de tu proyecto de Google Cloud.

  • REGION_ID: Es el ID de la región de Google Cloud a la que pertenece el modelo. ubicados en, por ejemplo, us-central1

  • MODEL_ID: Es el ID del modelo de AA que deseas usar, por ejemplo, gemini-pro.

    Para obtener más información sobre los modelos, consulta Referencia de la API de modelos para IA generativa.

  • INSTANCES: Las entradas para la llamada de predicción, en formato JSON

  • PARAMETERS: Parámetros opcionales para la llamada de predicción, en formato JSON

Esta consulta produce una respuesta JSON. Para obtener más información sobre el los mensajes de respuesta JSON del modelo, consulta PredictResponse.

Usa un extremo del modelo de Vertex AI

Para usar un modelo entrenado o descargado con la integración de Vertex AI de Spanner, debes implementar el modelo a Vertex AI. Para obtener más información sobre cómo para implementar un modelo en un extremo de Vertex AI, consulta Implementa un modelo en un extremo.

GoogleSQL

Usa la función ML.PREDICT de GoogleSQL con el modelo en un extremo de Vertex AI para generar la predicción. Antes de usar un modelo con ML.PREDICT(), debes registrar el modelo con CREATE MODEL declaración. Cada modelo implementado tiene su propia infraestructura . El siguiente es un ejemplo de esquema de Descripción general de la clasificación y la regresión

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

Reemplaza lo siguiente:

  • PROJECT_IDEl ID de tu proyecto de Google Cloud.

  • LOCATION: Es el ID de la región de Google Cloud a la que pertenece el modelo. ubicados en, por ejemplo, us-central1

  • ENDPOINT_ID: Es el ID del modelo de AA que deseas usar, por ejemplo, gemini-pro.

    Para obtener más información sobre los modelos, consulta Referencia de la API de modelos para IA generativa.

Usa la ML.PREDICT. Función de GoogleSQL con el modelo seleccionado del Model Garden para generar tu predicción.

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

Reemplaza lo siguiente:

  • MODEL_ID: Es el ID del modelo de AA que deseas usar.

  • INPUT_RELATION: Es la tabla o subconsulta que deseas. para ejecutar la predicción de AA.

  • PARAMETERS: Es un valor STRUCT que contiene parámetros. compatible con model_name.

Esta consulta produce una relación que contiene todas las columnas de salida del modelo y en todas las columnas de la relación de entrada.

PostgreSQL

Usa la función de PostgreSQL ML.PREDICT con el modelo en un extremo de Vertex AI para generar la predicción.

  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: Es el ID del proyecto de Google Cloud al que pertenece el modelo. ubicados en

  • REGION_ID: Es el ID de la región de Google Cloud a la que pertenece el modelo. ubicados en, por ejemplo, us-central1

  • ENDPOINT_ID: Es el ID del extremo del modelo.

  • INSTANCES: las entradas de la llamada de predicción, en formato JSON

  • PARAMETERS: Son parámetros opcionales para la llamada de predicción, en formato JSON.

Esta consulta produce una respuesta JSON. Para obtener más información sobre el los mensajes de respuesta JSON del modelo, consulta PredictResponse.

Ejemplos del uso de funciones de AA para generar predicciones

En el siguiente ejemplo, se usa la modelo gemini-pro, del Model Garden, para generar texto basado en una instrucción breve que se proporciona como un argumento. Este modelo está disponible como parte de Gemini en Spanner.

GoogleSQL

Registra el modelo 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
);

Reemplaza lo siguiente:

  • PROJECT: El ID del proyecto
  • LOCATION: Es la región en la que estás usando Vertex AI.

Ejecuta el modelo

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)
);

Resultado esperado

El resultado esperado es el siguiente:

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

PostgreSQL

Ejecuta el modelo

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}
    }'
);

Resultado esperado

El resultado esperado es el siguiente:

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