Receber previsões de embeddings de texto em lote

Receber respostas em lote é uma maneira de enviar com eficiência um grande número de solicitações de embeddings não sensíveis à latência. Diferente da obtenção de respostas on-line, em que há limitação para uma solicitação de entrada por vez, é possível enviar um grande número de solicitações do LLM em uma única solicitação em lote. De maneira semelhante à maneira como a previsão em lote é feita para dados tabulares na Vertex AI, você determina o local de saída, adiciona as entradas e as respostas são preenchidas de maneira assíncrona no local de saída.

Depois de enviar uma solicitação em lote e analisar os resultados, é possível ajustar o modelo por meio do ajuste de modelo. Após o ajuste, é possível enviar normalmente o modelo atualizado para gerações em lote. Para saber mais sobre o ajuste de modelos, consulte Ajustar modelos de fundação.

Modelos de embeddings de texto compatíveis com previsões em lote

Todas as versões estáveis do modelo textembedding-gecko são compatíveis com previsões em lote, exceto textembedding-gecko-multilingual@001. Versões estáveis são aquelas que não estão mais em pré-lançamento e têm compatibilidade total com ambientes de produção. Para ver a lista completa de modelos de embedding compatíveis, consulte Modelo e versões de embedding.

Preparar suas entradas

A entrada para solicitações em lote é uma lista de comandos que podem ser armazenados em uma tabela do BigQuery ou como um arquivo JSON Lines (JSONL) no Cloud Storage. Cada solicitação pode incluir até 30.000 comandos.

Exemplo de JSONL

Esta seção mostra exemplos de como formatar entradas e saídas 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 seção mostra exemplos de como formatar entradas e saídas do BigQuery.

Exemplo de uma entrada do BigQuery

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

conteúdo
"Faça uma breve descrição de um modelo de machine learning:"
"Melhor receita para pão de banana:"

Exemplo de uma saída do BigQuery

conteúdo previsões status
"Faça uma breve descrição de um modelo de machine learning:"
'[{"embeddings":
    { "statistics":{"token_count":8,"truncated":false},
      "Values":[0.1,....]
    }
  }
]'
 
"Melhor receita para pão de banana:"
'[{"embeddings":
    { "statistics":{"token_count":3,"truncated":false},
      "Values":[0.2,....]
    }
  }
]'

Solicitar uma resposta em lote

Dependendo do número de itens de entrada enviados, uma tarefa de previsão em lote pode levar algum tempo para ser concluída.

REST

Para testar um prompt de texto usando a API Vertex AI, envie uma solicitação POST para o endpoint do modelo do editor.

Antes de usar os dados da solicitação, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud.
  • BP_JOB_NAME: o nome do job.
  • INPUT_URI: o URI da origem da entrada. Pode ser um URI de tabela do BigQuery ou um URI de arquivo JSONL no Cloud Storage.
  • OUTPUT_URI: URI de destino de saída.

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
    "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 a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$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

Você receberá uma resposta JSON semelhante a esta:

{
  "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. É possível pesquisar o status da tarefa em lote usando BATCH_JOB_ID até que o job state seja JOB_STATE_SUCCEEDED. 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

Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Para mais informações, consulte a documentação de referência da API Python.

import vertexai
from vertexai.preview import language_models

# TODO(developer): Uncomment and set your project ID
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")
input_uri = (
    "gs://cloud-samples-data/generative-ai/embeddings/embeddings_input.jsonl"
)
# Format: `"gs://your-bucket-unique-name/directory/` or `bq://project_name.llm_dataset`
output_uri = OUTPUT_URI

textembedding_model = language_models.TextEmbeddingModel.from_pretrained(
    "textembedding-gecko"
)

batch_prediction_job = textembedding_model.batch_predict(
    dataset=[input_uri],
    destination_uri_prefix=output_uri,
)
print(batch_prediction_job.display_name)
print(batch_prediction_job.resource_name)
print(batch_prediction_job.state)
# Example response:
# BatchPredictionJob 2024-09-10 15:47:51.336391
# projects/1234567890/locations/us-central1/batchPredictionJobs/123456789012345
# JobState.JOB_STATE_SUCCEEDED

Recuperar saída em lote

Quando uma tarefa de previsão em lote é concluída, a saída é armazenada no bucket do Cloud Storage ou na tabela do BigQuery especificada na solicitação.

A seguir