Obtenha previsões de incorporações de texto em lote

Receber respostas num lote é uma forma eficiente de enviar um grande número de pedidos de incorporações não sensíveis à latência. Ao contrário das respostas online, em que está limitado a um pedido de entrada de cada vez, pode enviar um grande número de pedidos de GML num único pedido em lote. Tal como a previsão em lote é feita para dados tabulares no Vertex AI, determina a localização de saída, adiciona a entrada e as respostas são preenchidas de forma assíncrona na localização de saída.

Modelos de incorporações de texto que suportam previsões em lote

Todas as versões estáveis dos modelos de incorporação de texto suportam previsões em lote, com exceção das incorporações do Gemini (gemini-embedding-001). As versões estáveis são totalmente suportadas para ambientes de produção. Para ver a lista completa de modelos de incorporação, consulte o artigo Modelo de incorporaç��o e versões.

Prepare as suas entradas

A entrada para pedidos em lote é uma lista de comandos que podem ser armazenados numa tabela do BigQuery ou como um ficheiro JSON Lines (JSONL) no Cloud Storage. Cada pedido pode incluir até 30 000 comandos.

Exemplo de JSONL

Esta secção mostra exemplos de como formatar a entrada e a saída JSONL.

Exemplo de entrada JSONL

{"content":"Give a short description of a machine learning model:"}
{"content":"Best recipe for banana bread:"}

Exemplo de saída JSONL

{"instance":{"content":"Give..."},"predictions": [{"embeddings":{"statistics":{"token_count":8,"truncated":false},"values":[0.2,....]}}],"status":""}
{"instance":{"content":"Best..."},"predictions": [{"embeddings":{"statistics":{"token_count":3,"truncated":false},"values":[0.1,....]}}],"status":""}

Exemplo do BigQuery

Esta secção mostra exemplos de como formatar a entrada e a saída do BigQuery.

Exemplo de entrada do BigQuery

Este exemplo mostra uma tabela do BigQuery com uma única coluna.

conteúdo
"Dá uma breve descrição de um modelo de aprendizagem automática:"
"Melhor receita de pão de banana:"

Exemplo de saída do BigQuery

conteúdo previsões estado
"Dá uma breve descrição de um modelo de aprendizagem automática:"
'[{"embeddings":
    { "statistics":{"token_count":8,"truncated":false},
      "Values":[0.1,....]
    }
  }
]'
 
"Melhor receita de pão de banana:"
'[{"embeddings":
    { "statistics":{"token_count":3,"truncated":false},
      "Values":[0.2,....]
    }
  }
]'

Peça uma resposta em lote

Consoante o número de itens de entrada que enviou, uma tarefa de geração em lote pode demorar algum tempo a ser concluída.

REST

Para testar um comando de texto através da API Vertex AI, envie um pedido POST para o ponto final do modelo do publicador.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o ID do seu projeto Google Cloud .
  • BP_JOB_NAME: o nome da tarefa.
  • INPUT_URI: o URI de origem da entrada. Este é um URI de tabela do BigQuery ou um URI de ficheiro JSONL no Cloud Storage.
  • OUTPUT_URI: Output target URI.

Método HTTP e URL:

POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs

Corpo JSON do pedido:

{
    "name": "BP_JOB_NAME",
    "displayName": "BP_JOB_NAME",
    "model": "publishers/google/models/textembedding-gecko",
    "inputConfig": {
      "instancesFormat":"bigquery",
      "bigquerySource":{
        "inputUri" : "INPUT_URI"
      }
    },
    "outputConfig": {
      "predictionsFormat":"bigquery",
      "bigqueryDestination":{
        "outputUri": "OUTPUT_URI"
    }
  }
}

Para enviar o seu pedido, escolha uma destas opções:

curl

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs"

PowerShell

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

$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://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs" | Select-Object -Expand Content

Deve receber uma resposta JSON semelhante à seguinte:

{
  "name": "projects/123456789012/locations/us-central1/batchPredictionJobs/1234567890123456789",
  "displayName": "BP_sample_publisher_BQ_20230712_134650",
  "model": "projects/{PROJECT_ID}/locations/us-central1/models/textembedding-gecko",
  "inputConfig": {
    "instancesFormat": "bigquery",
    "bigquerySource": {
      "inputUri": "bq://project_name.dataset_name.text_input"
    }
  },
  "modelParameters": {},
  "outputConfig": {
    "predictionsFormat": "bigquery",
    "bigqueryDestination": {
      "outputUri": "bq://project_name.llm_dataset.embedding_out_BP_sample_publisher_BQ_20230712_134650"
    }
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "2023-07-12T20:46:52.148717Z",
  "updateTime": "2023-07-12T20:46:52.148717Z",
  "labels": {
    "owner": "sample_owner",
    "product": "llm"
  },
  "modelVersionId": "1",
  "modelMonitoringStatus": {}
}

A resposta inclui um identificador exclusivo para a tarefa em lote. Pode sondar o estado da tarefa em lote através do BATCH_JOB_ID até que a tarefa state seja JOB_STATE_SUCCEEDED. Por exemplo:

curl \
  -X GET \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/batchPredictionJobs/BATCH_JOB_ID

Python

Instalação

pip install --upgrade google-genai

Para saber mais, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK de IA generativa com o Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=us-central1
export GOOGLE_GENAI_USE_VERTEXAI=True

import time

from google import genai
from google.genai.types import CreateBatchJobConfig, JobState, HttpOptions

client = genai.Client(http_options=HttpOptions(api_version="v1"))
# TODO(developer): Update and un-comment below line
# output_uri = "gs://your-bucket/your-prefix"

# See the documentation: https://googleapis.github.io/python-genai/genai.html#genai.batches.Batches.create
job = client.batches.create(
    model="text-embedding-005",
    # Source link: https://storage.cloud.google.com/cloud-samples-data/generative-ai/embeddings/embeddings_input.jsonl
    src="gs://cloud-samples-data/generative-ai/embeddings/embeddings_input.jsonl",
    config=CreateBatchJobConfig(dest=output_uri),
)
print(f"Job name: {job.name}")
print(f"Job state: {job.state}")
# Example response:
# Job name: projects/%PROJECT_ID%/locations/us-central1/batchPredictionJobs/9876453210000000000
# Job state: JOB_STATE_PENDING

# See the documentation: https://googleapis.github.io/python-genai/genai.html#genai.types.BatchJob
completed_states = {
    JobState.JOB_STATE_SUCCEEDED,
    JobState.JOB_STATE_FAILED,
    JobState.JOB_STATE_CANCELLED,
    JobState.JOB_STATE_PAUSED,
}

while job.state not in completed_states:
    time.sleep(30)
    job = client.batches.get(name=job.name)
    print(f"Job state: {job.state}")
    if job.state == JobState.JOB_STATE_FAILED:
        print(f"Error: {job.error}")
        break

# Example response:
# Job state: JOB_STATE_PENDING
# Job state: JOB_STATE_RUNNING
# Job state: JOB_STATE_RUNNING
# ...
# Job state: JOB_STATE_SUCCEEDED

Obtenha o resultado do lote

Quando uma tarefa de previsão em lote está concluída, o resultado é armazenado no contentor do Cloud Storage ou na tabela do BigQuery que especificou no seu pedido.

O que se segue?