Receber previsões de código em lote

O recebimento de respostas em lote é uma maneira de enviar com eficiência um grande número de solicitações de código em que a latência da resposta não é importante. Diferente de receber respostas on-line, em que você está limitado a uma solicitação de entrada por vez, as previsões em lote enviam um grande número de solicitações de modelo de geração de código em uma única solicitação em lote. Assim como nas previsões em lote para dados tabulares na Vertex AI, você determina o local de saída e adiciona a entrada. Em seguida, 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 da base de geração de código para melhorar o desempenho dos resultados para sua tarefa específica. Após o ajuste, é possível enviar o modelo ajustado para gerações em lote. Para saber mais sobre o ajuste de modelos, consulte Ajustar modelos de fundação.

Modelos de código compatíveis com previsões em lote

  • code-bison

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.

Exemplos de JSONL

Nesta seção, mostramos exemplos de como formatar arquivos JSONL de entrada e saída.

Exemplo de entrada JSONL

{"prefix":"Write a Python function that determines if a year is a leap year:"}
{"prefix":"Write a unit test for Python code that reverses a string:"}

Exemplo de saída JSONL

{"instance":{"prefix":"Write..."},"predictions": [{"content":"def is_leap_year(year):...","safetyAttributes":{...}}],"status":""}
{"instance":{"prefix":"Write..."},"predictions": [{"content":"import unittest...", "safetyAttributes":{...}}],"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.

prefixo
"Escreva uma função em Python que determine se um ano é bissexto:"
"Crie um teste de unidade para o código Python que inverta uma string:"

Exemplo de uma saída do BigQuery

prefixo Previsões status
"Escreva uma função em Python que determine se um ano é bissexto:"

{
  "predictions": [
    {
      "safetyAttributes": {
        "scores": [],
        "blocked": false,
        "categories": []
      },
      "content": "```python\ndef is_leap_year(year):\n  \"\"\"\n  Determine if a year is a leap year.\n\n  Args:\n    year: The year to check.\n\n  Returns:\n    True if the year is a leap year, False otherwise.\n  \"\"\"\n\n  if year % 4 != 0:\n    return False\n\n  if year % 100 == 0 and year % 400 != 0:\n    return False\n\n  return True\n```",
      "citationMetadata": {
        "citations": []
      },
      "score": -1.5572503805160522
    }
  ],
}
 
"Crie um teste de unidade para o código Python que inverta uma string:"

{
  "predictions": [
    {
      "safetyAttributes": {
        "scores": [],
        "blocked": false,
        "categories": []
      },
      "score": -1.7523338794708252,
      "citationMetadata": {
        "citations": []
      },
      "content": "```python\nimport unittest\n\nclass TestReverseString(unittest.TestCase):\n\n    def test_reverse_string(self):\n        input_string = \"Hello World\"\n        expected_output = \"dlroW olleH\"\n        output = reverse_string(input_string)\n        self.assertEqual(output, expected_output)\n\nif __name__ == '__main__':\n    unittest.main()\n```"
    }
  ],
}

Solicitar uma resposta em lote

É possível criar uma resposta em lote de geração de código usando o console do Google Cloud ou o SDK da Vertex AI para Python. Quanto mais itens de entrada você enviar, mais tempo levará para concluir o processo de geração de lotes.

REST

Para testar um prompt de código 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 abaixo, faça as substituições a seguir:

  • PROJECT_ID: o nome do seu projeto do Google Cloud;
  • BP_JOB_NAME: o nome do job.
  • MODEL_PARAM: uma lista de pares de chave-valor que especificam os parâmetros do modelo e os valores correspondentes. Por exemplo, é possível especificar a maxOutputTokens e o temperature do modelo. Para mais informações, consulte Parâmetros de geração de código.
  • INPUT_URI: o URI da origem da entrada. A origem de entrada é uma tabela do BigQuery ou um arquivo JSONL em um bucket do Cloud Storage.
  • OUTPUT_URI: URI de destino de saída.

Método HTTP e URL:

POST http://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/text-bison",
    "model_parameters": "MODEL_PARAM"
    "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 \
"http://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 "http://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/{PROJECT_ID}/locations/us-central1/batchPredictionJobs/{BATCH_JOB_ID}",
  "displayName": "BP_sample_publisher_BQ_20230712_134650",
  "model": "projects/{PROJECT_ID}/locations/us-central1/models/text-bison",
  "inputConfig": {
    "instancesFormat": "bigquery",
    "bigquerySource": {
      "inputUri": "bq://sample.text_input"
    }
  },
  "modelParameters": {},
  "outputConfig": {
    "predictionsFormat": "bigquery",
    "bigqueryDestination": {
      "outputUri": "bq://sample.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" \
http://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.

from vertexai.preview.language_models import CodeGenerationModel
code_model = CodeGenerationModel.from_pretrained("code-bison")
batch_prediction_job = code_model.batch_predict(
  dataset=["gs://BUCKET_NAME/test_table.jsonl"],
  destination_uri_prefix="gs://BUCKET_NAME/tmp/2023-05-25-vertex-LLM-Batch-Prediction/result3",
  # Optional:
  model_parameters={
      "maxOutputTokens": "200",
      "temperature": "0.2",
  },
)
print(batch_prediction_job.display_name)
print(batch_prediction_job.resource_name)
print(batch_prediction_job.state)

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