일괄 텍스트 임베딩 예측 가져오기

응답을 일괄로 가져오면 지연 시간에 민감하지 않은 다수의 임베딩 요청을 효율적으로 전송할 수 있습니다. 한 번에 입력 요청 하나로 제한되는 온라인 응답 가져오기와 달리 단일 일괄 요청에서 다수의 LLM 요청을 전송할 수 있습니다. Vertex AI의 테이블 형식 데이터에 대해 일괄 예측을 수행하는 방법과 마찬가지로 출력 위치를 결정하고 입력을 추가하면 응답이 출력 위치에 비동기식으로 채워집니다.

일괄 요청을 제출하고 결과를 검토한 후 모델 조정을 통해 모델을 조정할 수 있습니다. 조정 후 평소와 같이 일괄 생성을 위해 업데이트된 모델을 제출할 수 있습니다. 모델 조정에 대한 자세한 내용은 언어 기반 모델 조정을 참조하세요.

일괄 예측을 지원하는 텍스트 임베딩 모델

textembedding-gecko 모델의 모든 안정화 버전은 textembedding-gecko-multilingual@001을 제외하고 일괄 예측을 지원합니다. 안정화 버전은 더 이상 프리뷰 버전이 아니며 프로덕션 환경에서 완전히 지원됩니다. 지원되는 임베딩 모델의 전체 목록은 임베딩 모델 및 버전을 참조하세요.

입력 준비

일괄 요청 입력은 BigQuery 테이블에 저장하거나 Cloud Storage의 JSON Lines(JSONL) 파일로 저장할 수 있는 프롬프트 목록입니다. 요청마다 프롬프트가 최대 30,000개까지 포함될 수 있습니다.

JSONL 예시

이 섹션에서는 JSONL 입력 및 출력을 포맷하는 방법의 예시를 보여줍니다.

JSONL 입력 예시

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

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":""}

BigQuery 예시

이 섹션에서는 BigQuery 입력 및 출력을 포맷하는 방법의 예시를 보여줍니다.

BigQuery 입력 예시

이 예시에서는 단일 열 BigQuery 테이블을 보여줍니다.

콘텐츠
'머신러닝 모델에 대한 간단한 설명을 제공하세요.'
'최고의 바나나 빵 레시피:'

BigQuery 출력 예시

콘텐츠 predictions 상태
'머신러닝 모델에 대한 간단한 설명을 제공하세요.'
'[{"embeddings":
    { "statistics":{"token_count":8,"truncated":false},
      "Values":[0.1,....]
    }
  }
]'
 
'최고의 바나나 빵 레시피:'
'[{"embeddings":
    { "statistics":{"token_count":3,"truncated":false},
      "Values":[0.2,....]
    }
  }
]'

일괄 응답 요청

제출한 입력 항목 수에 따라 일괄 생성 태스크를 완료하는 데 다소 시간이 걸릴 수 있습니다.

REST

Vertex AI API를 사용하여 텍스트 프롬프트를 테스트하려면 POST 요청을 게시자 모델 엔드포인트로 전송합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
  • BP_JOB_NAME: 작업 이름입니다.
  • INPUT_URI: 입력 소스 URI입니다. 이는 BigQuery 테이블 URI 또는 Cloud Storage의 JSONL 파일 URI입니다.
  • OUTPUT_URI: 출력 대상 URI입니다.

HTTP 메서드 및 URL:

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

JSON 요청 본문:

{
    "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"
    }
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

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

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$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

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "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": {}
}

응답에는 일괄 작업의 고유 식별자가 포함됩니다. 작업 stateJOB_STATE_SUCCEEDED가 될 때까지 BATCH_JOB_ID를 사용하여 일괄 작업의 상태를 폴링할 수 있습니다. 예를 들면 다음과 같습니다.

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

Vertex AI SDK for Python을 설치하거나 업데이트하는 방법은 Vertex AI SDK for Python 설치를 참조하세요. 자세한 내용은 Python API 참고 문서를 확인하세요.

import vertexai
from vertexai.preview import language_models

# TODO(developer): Update & uncomment line below
# 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@003"
)

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

일괄 출력 검색

일괄 예측 태스크가 완료되면 출력은 요청에 지정한 Cloud Storage 버킷이나 BigQuery 테이블에 저장됩니다.

다음 단계