텍스트 임베딩 조정

이 페이지에서는 textembedding-geckotextembedding-gecko-multilingual과 같은 텍스트 임베딩 모델을 조정하는 방법을 보여줍니다.

기반 임베딩 모델은 대규모 텍스트 데이터 세트를 대상으로 선행 학습되어 많은 태스크에 강력한 기준을 제공합니다. 전문 지식이나 고도로 맞춤화된 성능이 필요한 시나리오의 경우 모델 조정을 통해 자체 관련 데이터를 사용하여 모델의 표현을 미세 조정할 수 있습니다. 조정은 textembedding-geckotextembedding-gecko-multilingual 모델의 안정화 버전에서 지원됩니다.

텍스트 임베딩 모델은 지도 조정을 지원합니다. 지도 조정에서는 추론 중에 텍스트 임베딩 모델에서 원하는 출력 유형을 보여주는 라벨이 있는 예를 사용합니다.

모델 조정에 대한 자세한 내용은 모델 조정 작동 방식을 참조하세요.

예상되는 품질 개선

Vertex AI는 맞춤설정을 위해 효율적인 매개변수 조정 방법을 사용합니다. 이 방법론에서는 공개 검색 벤치마크 데이터 세트에서 수행된 실험에서 품질이 최대 41%까지(평균 12%) 크게 개선되었음을 보여줍니다.

임베딩 모델 조정 사용 사례

텍스트 임베딩 모델을 조정하면 모델에서 특정 도메인 또는 태스크에 맞게 임베딩을 조정할 수 있습니다. 이 방식은 선행 학습된 임베딩 모델이 특정 요구사항에 적합하지 않은 경우에 유용합니다. 예를 들어 회사의 고객 지원 티켓에 대한 특정 데이터 세트에서 임베딩 모델을 조정할 수 있습니다. 그러면 챗봇이 고객들이 일반적으로 묻는 다양한 고객 지원 문제 유형을 이해하여 고객 질문에 더 효과적으로 답변할 수 있습니다. 조정하지 않으면 모델이 고객 지원 티켓의 세부사항이나 제품의 특정 문제에 대한 해결책을 알 수 없습니다.

워크플로 조정

textembedding-geckotextembedding-gecko-multilingual을 위한 Vertex AI의 모델 조정 워크플로는 다음과 같습니다.

  • 모델 조정 데이터 세트를 준비합니다.
  • 모델 조정 데이터 세트를 Cloud Storage 버킷에 업로드합니다.
  • Vertex AI Pipelines에 맞게 프로젝트를 구성합니다.
  • 모델 조정 작업을 만듭니다.
  • 조정된 모델을 동일한 이름의 Vertex AI 엔드포인트에 배포합니다. 텍스트 또는 Codey 모델 조정 작업과 달리 텍스트 임베딩 조정 작업은 조정된 모델을 Vertex AI 엔드포인트에 배포하지 않습니다.

임베딩 데이터 세트 준비

임베딩 모델을 조정하는 데 사용되는 데이터 세트에는 모델이 수행하려는 작업과 일치하는 데이터가 포함됩니다.

임베딩 모델 조정을 위한 데이터 세트 형식

학습 데이터 세트는 다음 파일들로 구성되며 이 파일들은 Cloud Storage에 있어야 합니다. 파일 경로는 조정 파이프라인을 시작할 때 매개변수로 정의됩니다. 세 가지 파일 유형은 코퍼스 파일, 쿼리 파일, 라벨입니다. 학습 라벨만 필수이지만 제어 효율을 높이기 위해 검증 및 테스트 라벨도 제공할 수 있습니다.

  • Corpus 파일: 경로가 corpus_path 매개변수로 정의됩니다. 각 줄에 문자열 값이 있는 _id, title, text 필드가 포함된 JSONL 파일입니다. _idtext는 필수이고 title은 선택사항입니다. 다음은 corpus.jsonl 파일 예시입니다.

    {"_id": "doc1", "title": "Get an introduction to generative AI on Vertex AI", "text": "Vertex AI Studio offers a Google Cloud console tool for rapidly prototyping and testing generative AI models. Learn how you can use Vertex AI Studio to test models using prompt samples, design and save prompts, tune a foundation model, and convert between speech and text."}
    {"_id": "doc2", "title": "Use gen AI for summarization, classification, and extraction", "text": "Learn how to create text prompts for handling any number of tasks with Vertex AI's generative AI support. Some of the most common tasks are classification, summarization, and extraction. Vertex AI's PaLM API for text lets you design prompts with flexibility in terms of their structure and format."}
    {"_id": "doc3", "title": "Custom ML training overview and documentation", "text": "Get an overview of the custom training workflow in Vertex AI, the benefits of custom training, and the various training options that are available. This page also details every step involved in the ML training workflow from preparing data to predictions."}
    {"_id": "doc4", "text": "Text embeddings are useful for clustering, information retrieval, retrieval-augmented generation (RAG), and more."}
    {"_id": "doc5", "title": "Text embedding tuning", "text": "Google's text embedding models can be tuned on Vertex AI."}
    
  • 쿼리 파일: 쿼리 파일에는 예시 쿼리가 포함되어 있습니다. 경로는 queries_path 매개변수로 정의됩니다. 쿼리 파일은 JSONL 형식이며 코퍼스 파일과 동일한 필드를 갖습니다. 다음은 queries.jsonl 파일 예시입니다.

    {"_id": "query1", "text": "Does Vertex support generative AI?"}
    {"_id": "query2", "text": "What can I do with Vertex GenAI offerings?"}
    {"_id": "query3", "text": "How do I train my models using Vertex?"}
    {"_id": "query4", "text": "What is a text embedding?"}
    {"_id": "query5", "text": "Can text embedding models be tuned on Vertex?"}
    {"_id": "query6", "text": "embeddings"}
    {"_id": "query7", "text": "embeddings for rag"}
    {"_id": "query8", "text": "custom model training"}
    {"_id": "query9", "text": "Google Cloud PaLM API"}
    
  • 학습 라벨: 경로는 train_label_path 매개변수로 정의됩니다. train_label_path는 학습 라벨 데이터 위치의 Cloud Storage URI이며 조정 작업을 만들 때 지정됩니다. 라벨은 헤더가 있는 TSV 파일이어야 합니다. 쿼리와 코퍼스의 하위 집합을 학습 라벨 파일에 포함해야 합니다. 이 파일에는 query-id, corpus-id, score 열이 있어야 합니다. query-id는 쿼리 파일의 _id 키와 일치하는 문자열이며, corpus-id는 코퍼스 파일의 _id와 일치하는 문자열입니다. Score는 음이 아닌 정수 값입니다. 쿼리와 문서 쌍이 관련이 없는 경우 학습 라벨 파일에서 제외하거나 점수가 0인 상태로 포함할 수 있습니다. 점수가 0보다 크면 문서가 쿼리와 관련이 있음을 나타냅니다. 숫자가 클수록 관련성이 높은 것입니다. 점수를 생략하면 기본값은 1입니다. 다음은 train_labels.tsv 파일 예시입니다.

    query-id  corpus-id   score
    query1    doc1    1
    query2    doc2    1
    query3    doc3    2
    query3    doc5  1
    query4    doc4  1
    query4    doc5  1
    query5    doc5  2
    query6    doc4  1
    query6    doc5  1
    query7    doc4  1
    query8    doc3  1
    query9    doc2  1
    
  • 테스트 라벨: 선택사항. 테스트 라벨은 학습 라벨과 형식이 동일하며 test_label_path 매개변수로 지정됩니다. test_label_path가 제공되지 않았으면 테스트 라벨이 학습 라벨에서 자동 분할됩니다.

  • 검증 라벨: 선택사항. 검증 라벨은 학습 라벨과 형식이 동일하며 validation_label_path 매개변수로 지정됩니다. validation_label_path를 제공하지 않으면 검증 라벨이 학습 라벨에서 자동 분할됩니다.

데이터 세트 크기 요구사항

제공된 데이터 세트 파일은 다음 제약조건을 충족해야 합니다.

  • 쿼리 수는 9~10,000개 사이여야 합니다.
  • 코퍼스 문서 수는 9~500,000개 사이여야 합니다.
  • 각 데이터 세트 라벨 파일에는 쿼리 ID가 최소 3개 이상 포함되어야 하며 모든 데이터 세트 분할에 쿼리 ID가 최소 9개 이상 있어야 합니다.
  • 총 라벨 수는 500,000개 미만이어야 합니다.

Vertex AI Pipelines에 맞게 프로젝트 구성

조정은 프로젝트 내에서 Vertex AI Pipelines 플랫폼을 사용하여 수행됩니다.

권한 구성

파이프라인은 2개의 서비스 에이전트에서 학습 코드를 실행합니다. 프로젝트 및 데이터 세트를 사용하여 학습을 시작하려면 이러한 서비스 에이전트에 특정 역할을 부여해야 합니다.

Compute Engine 기본 서비스 계정
PROJECT_NUMBER-compute@developer.gserviceaccount.com

이 서비스 계정에는 다음이 필요합니다.

  • Cloud Storage에서 만든 각 데이터 세트 파일에 대한 Storage Object Viewer 액세스 권한

  • PIPELINE_OUTPUT_DIRECTORY 파이프라인의 출력 Cloud Storage 디렉토리에 대한 Storage Object User 액세스 권한

  • 프로젝트에 대한 Vertex AI User 액세스 권한

Compute Engine 기본 서비스 계정 대신 커스텀 서비스 계정을 지정할 수 있습니다. 자세한 내용은 세부 권한으로 서비스 계정 구성을 참조하세요.

Vertex AI 조정 서비스 에이전트
service-PROJECT_NUMBER@gcp-sa-aiplatform-ft.iam.gserviceaccount.com

이 서비스 계정에는 다음이 필요합니다.

  • Cloud Storage에서 만든 각 데이터 세트 파일에 대한 Storage Object Viewer 액세스 권한

  • PIPELINE_OUTPUT_DIRECTORY 파이프라인의 출력 Cloud Storage 디렉토리에 대한 Storage Object User 액세스 권한

Cloud Storage 데이터 세트 권한에 대한 자세한 내용은 파이프라인 아티팩트에 대한 Cloud Storage 버킷 구성을 참조하세요.

가속기 사용

조정에는 GPU 가속기가 필요합니다. 다음 가속기를 텍스트 임베딩 조정 파이프라인에 사용할 수 있습니다.

  • NVIDIA_L4
  • NVIDIA_TESLA_A100
  • NVIDIA_TESLA_T4
  • NVIDIA_TESLA_V100
  • NVIDIA_TESLA_P100

조정 작업을 실행하려면 선택한 가속기 유형 및 리전에 대해 적절한 Restricted image training GPUs 할당량이 필요합니다(예: Restricted image training Nvidia V100 GPUs per region). 프로젝트 할당량을 늘리려면 추가 할당량 요청을 참조하세요.

리전에 따라 일부 가속기가 제공되지 않습니다. 자세한 내용은 Vertex AI에서 가속기 사용을 참조하세요.

임베딩 모델 조정 작업 만들기

Google Cloud 콘솔, REST API 또는 클라이언트 라이브러리를 사용하여 임베딩 모델 조정 작업을 만들 수 있습니다.

REST

임베딩 모델 조정 작업을 만들려면 projects.locations.pipelineJobs.create 메서드를 사용합니다.

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

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • PIPELINE_OUTPUT_DIRECTORY: "gs://"로 시작하는 파이프라인 출력 아티팩트의 경로입니다.

HTTP 메서드 및 URL:

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

JSON 요청 본문:

{
  "displayName": "tune_text_embeddings_model_sample",
  "runtimeConfig": {
    "gcsOutputDirectory": "PIPELINE_OUTPUT_DIRECTORY",
    "parameterValues": {
      "corpus_path": "gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/corpus.jsonl",
      "queries_path": "gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/queries.jsonl",
      "train_label_path": "gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/train.tsv",
      "test_label_path": "gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/test.tsv",
      "base_model_version_id":"text-embedding-004",
      "task_type": "DEFAULT",
      "batch_size": "128",
      "train_steps": "1000",
      "output_dimensionality": "768",
      "learning_rate_multiplier": "1.0"
    }
  },
  "templateUri": "https://us-kfp.pkg.dev/ml-pipeline/llm-text-embedding/tune-text-embedding-model/v1.1.3"
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

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

파이프라인을 시작한 후 Google Cloud 콘솔을 통해 조정 작업의 진행 상황을 확인합니다.

Google Cloud 콘솔로 이동

Python

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

import re

from google.cloud.aiplatform import initializer as aiplatform_init
from vertexai.language_models import TextEmbeddingModel


def tune_embedding_model(
    api_endpoint: str,
    base_model_name: str = "text-embedding-004",
    corpus_path: str = "gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/corpus.jsonl",
    queries_path: str = "gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/queries.jsonl",
    train_label_path: str = "gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/train.tsv",
    test_label_path: str = "gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/test.tsv",
):  # noqa: ANN201
    """Tune an embedding model using the specified parameters.
    Args:
        api_endpoint (str): The API endpoint for the Vertex AI service.
        base_model_name (str): The name of the base model to use for tuning.
        corpus_path (str): GCS URI of the JSONL file containing the corpus data.
        queries_path (str): GCS URI of the JSONL file containing the queries data.
        train_label_path (str): GCS URI of the TSV file containing the training labels.
        test_label_path (str): GCS URI of the TSV file containing the test labels.
    """
    match = re.search(r"^(\w+-\w+)", api_endpoint)
    location = match.group(1) if match else "us-central1"
    base_model = TextEmbeddingModel.from_pretrained(base_model_name)
    tuning_job = base_model.tune_model(
        task_type="DEFAULT",
        corpus_data=corpus_path,
        queries_data=queries_path,
        training_data=train_label_path,
        test_data=test_label_path,
        batch_size=128,  # The batch size to use for training.
        train_steps=1000,  # The number of training steps.
        tuned_model_location=location,
        output_dimensionality=768,  # The dimensionality of the output embeddings.
        learning_rate_multiplier=1.0,  # The multiplier for the learning rate.
    )
    return tuning_job

Java

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용Java 설정 안내를 따르세요. 자세한 내용은 Vertex AI Java API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

import com.google.cloud.aiplatform.v1.CreatePipelineJobRequest;
import com.google.cloud.aiplatform.v1.LocationName;
import com.google.cloud.aiplatform.v1.PipelineJob;
import com.google.cloud.aiplatform.v1.PipelineJob.RuntimeConfig;
import com.google.cloud.aiplatform.v1.PipelineServiceClient;
import com.google.cloud.aiplatform.v1.PipelineServiceSettings;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmbeddingModelTuningSample {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running this sample.
    String apiEndpoint = "us-central1-aiplatform.googleapis.com:443";
    String project = "PROJECT";
    String baseModelVersionId = "BASE_MODEL_VERSION_ID";
    String taskType = "DEFAULT";
    String pipelineJobDisplayName = "PIPELINE_JOB_DISPLAY_NAME";
    String outputDir = "OUTPUT_DIR";
    String queriesPath = "QUERIES_PATH";
    String corpusPath = "CORPUS_PATH";
    String trainLabelPath = "TRAIN_LABEL_PATH";
    String testLabelPath = "TEST_LABEL_PATH";
    double learningRateMultiplier = 1.0;
    int outputDimensionality = 768;
    int batchSize = 128;
    int trainSteps = 1000;

    createEmbeddingModelTuningPipelineJob(
        apiEndpoint,
        project,
        baseModelVersionId,
        taskType,
        pipelineJobDisplayName,
        outputDir,
        queriesPath,
        corpusPath,
        trainLabelPath,
        testLabelPath,
        learningRateMultiplier,
        outputDimensionality,
        batchSize,
        trainSteps);
  }

  public static PipelineJob createEmbeddingModelTuningPipelineJob(
      String apiEndpoint,
      String project,
      String baseModelVersionId,
      String taskType,
      String pipelineJobDisplayName,
      String outputDir,
      String queriesPath,
      String corpusPath,
      String trainLabelPath,
      String testLabelPath,
      double learningRateMultiplier,
      int outputDimensionality,
      int batchSize,
      int trainSteps)
      throws IOException {
    Matcher matcher = Pattern.compile("^(?<Location>\\w+-\\w+)").matcher(apiEndpoint);
    String location = matcher.matches() ? matcher.group("Location") : "us-central1";
    String templateUri =
        "https://us-kfp.pkg.dev/ml-pipeline/llm-text-embedding/tune-text-embedding-model/v1.1.3";
    PipelineServiceSettings settings =
        PipelineServiceSettings.newBuilder().setEndpoint(apiEndpoint).build();
    try (PipelineServiceClient client = PipelineServiceClient.create(settings)) {
      Map<String, Value> parameterValues =
          Map.of(
              "base_model_version_id", valueOf(baseModelVersionId),
              "task_type", valueOf(taskType),
              "queries_path", valueOf(queriesPath),
              "corpus_path", valueOf(corpusPath),
              "train_label_path", valueOf(trainLabelPath),
              "test_label_path", valueOf(testLabelPath),
              "learning_rate_multiplier", valueOf(learningRateMultiplier),
              "output_dimensionality", valueOf(outputDimensionality),
              "batch_size", valueOf(batchSize),
              "train_steps", valueOf(trainSteps));
      PipelineJob pipelineJob =
          PipelineJob.newBuilder()
              .setTemplateUri(templateUri)
              .setDisplayName(pipelineJobDisplayName)
              .setRuntimeConfig(
                  RuntimeConfig.newBuilder()
                      .setGcsOutputDirectory(outputDir)
                      .putAllParameterValues(parameterValues)
                      .build())
              .build();
      CreatePipelineJobRequest request =
          CreatePipelineJobRequest.newBuilder()
              .setParent(LocationName.of(project, location).toString())
              .setPipelineJob(pipelineJob)
              .build();
      return client.createPipelineJob(request);
    }
  }

  private static Value valueOf(String s) {
    return Value.newBuilder().setStringValue(s).build();
  }

  private static Value valueOf(int n) {
    return Value.newBuilder().setNumberValue(n).build();
  }

  private static Value valueOf(double n) {
    return Value.newBuilder().setNumberValue(n).build();
  }
}

Node.js

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용Node.js 설정 안내를 따르세요. 자세한 내용은 Vertex AI Node.js API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

async function main(
  apiEndpoint,
  project,
  outputDir,
  pipelineJobDisplayName = 'embedding-customization-pipeline-sample',
  baseModelVersionId = 'text-embedding-004',
  taskType = 'DEFAULT',
  corpusPath = 'gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/corpus.jsonl',
  queriesPath = 'gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/queries.jsonl',
  trainLabelPath = 'gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/train.tsv',
  testLabelPath = 'gs://cloud-samples-data/ai-platform/embedding/goog-10k-2024/r11/test.tsv',
  outputDimensionality = 768,
  learningRateMultiplier = 1.0,
  batchSize = 128,
  trainSteps = 1000
) {
  const aiplatform = require('@google-cloud/aiplatform');
  const {PipelineServiceClient} = aiplatform.v1;
  const {helpers} = aiplatform; // helps construct protobuf.Value objects.

  const client = new PipelineServiceClient({apiEndpoint});
  const match = apiEndpoint.match(/(?<L>\w+-\w+)/);
  const location = match ? match.groups.L : 'us-central1';
  const parent = `projects/${project}/locations/${location}`;
  const params = {
    base_model_version_id: baseModelVersionId,
    task_type: taskType,
    queries_path: queriesPath,
    corpus_path: corpusPath,
    train_label_path: trainLabelPath,
    test_label_path: testLabelPath,
    batch_size: batchSize,
    train_steps: trainSteps,
    output_dimensionality: outputDimensionality,
    learning_rate_multiplier: learningRateMultiplier,
  };
  const runtimeConfig = {
    gcsOutputDirectory: outputDir,
    parameterValues: Object.fromEntries(
      Object.entries(params).map(([k, v]) => [k, helpers.toValue(v)])
    ),
  };
  const pipelineJob = {
    templateUri:
      'https://us-kfp.pkg.dev/ml-pipeline/llm-text-embedding/tune-text-embedding-model/v1.1.3',
    displayName: pipelineJobDisplayName,
    runtimeConfig,
  };
  async function createTuneJob() {
    const [response] = await client.createPipelineJob({parent, pipelineJob});
    console.log(`job_name: ${response.name}`);
    console.log(`job_state: ${response.state}`);
  }

  await createTuneJob();
}

Console

Google Cloud 콘솔을 사용하여 텍스트 임베딩 모델을 조정하려면 다음 단계에 따라 맞춤설정 파이프라인을 실행할 수 있습니다.

  1. Google Cloud 콘솔의 Vertex AI 섹션에서 Vertex AI Pipelines 페이지로 이동합니다.

    Vertex AI Pipelines로 이동

  2. 실행 만들기를 클릭하여 파이프라인 실행 만들기 창을 엽니다.
  3. 기존 파이프라인에서 선택을 클릭하고 다음 세부정보를 입력합니다.
    1. 리소스 선택 드롭다운에서 "ml-pipeline"을 선택합니다.
    2. 저장소 드롭다운에서 "llm-text-embedding"을 선택합니다.
    3. 파이프라인 또는 구성요소 드롭다운에서 "tune-text-embedding-model"을 선택합니다.
    4. 버전 드롭다운에서 "v1.1.3" 라벨이 지정된 버전을 선택합니다.
  4. 파이프라인 실행을 고유하게 식별하기 위해 실행 이름을 지정합니다.
  5. 리전 드롭다운 목록에서 파이프라인 실행을 만들 리전을 선택합니다. 이 리전은 조정된 모델이 생성된 리전과 동일합니다.
  6. 계속을 클릭합니다. 런타임 구성 창이 나타납니다.
  7. Cloud Storage 위치에서 찾아보기를 클릭하여 파이프라인 출력 아티팩트를 저장할 Cloud Storage 버킷을 선택한 후 선택을 클릭합니다.
  8. 파이프라인 매개변수에서 조정 파이프라인의 매개변수를 지정합니다. 세 가지 필수 매개변수는 corpus_path, queries_path, train_label_path이며 임베딩 데이터 세트 준비에 설명된 형식을 사용합니다. 각 매개변수에 대한 자세한 내용은 이 섹션의 REST 탭을 참조하세요.
  9. 제출을 클릭하여 파이프라인 실행을 만듭니다.

기타 지원되는 기능

텍스트 임베딩 조정은 VPC 서비스 제어를 지원하며 PipelineJob을 만들 때 network 매개변수를 전달하여 Virtual Private Cloud(VPC) 내에서 실행되도록 구성될 수 있습니다.

CMEK(고객 관리 암호화 키)를 사용하려면 PipelineJob을 만들 때 키를 parameterValues.encryption_spec_key_name 파이프라인 매개변수 encryptionSpec.kmsKeyName 매개변수에 전달합니다.

조정된 모델 사용

Model Registry에서 조정된 모델 보기

조정 작업이 완료되면 조정된 모델이 엔드포인트에 자동으로 배포되지 않습니다. Model Registry에서 모델 리소스로 제공됩니다. Google Cloud 콘솔을 사용하여 조정된 모델을 포함한 현재 프로젝트의 모델 목록을 볼 수 있습니다.

Google Cloud 콘솔에서 조정된 모델을 보려면 Vertex AI Model Registry 페이지로 이동합니다.

Vertex AI Model Registry로 이동

모델 배포

임베딩 모델을 조정한 후에는 모델 리소스를 배포해야 합니다. 조정된 임베딩 모델을 배포하려면 엔드포인트에 모델 배포를 참조하세요.

기반 모델과 달리 조정된 텍스트 임베딩 모델은 사용자가 관리합니다. 여기에는 머신 유형 및 가속기와 같은 제공 리소스 관리가 포함됩니다. 예측 중에 메모리 부족 오류를 방지하려면 모든 입력 길이에 배치 크기를 최대 5까지 지원할 수 있는 NVIDIA_TESLA_A100 GPU 유형을 사용하여 배포하는 것이 좋습니다.

textembedding-gecko 기반 모델과 마찬가지로 조정된 모델은 최대 3,072개의 토큰을 지원하며 긴 입력을 자를 수 있습니다.

배포된 모델에 대한 예측 수행하기

조정된 모델이 배포되면 다음 명령어 중 하나를 사용하여 조정된 모델 엔드포인트에 요청을 실행할 수 있습니다.

조정된 textembedding-gecko@001 모델의 curl 명령어 예시

조정된 textembedding-gecko@001 버전에서 예측을 가져오려면 아래의 curl 명령어 예시를 사용하세요.

PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
ENDPOINT_URI=https://${LOCATION}-aiplatform.googleapis.com
MODEL_ENDPOINT=TUNED_MODEL_ENDPOINT_ID

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json"  \
    ${ENDPOINT_URI}/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${MODEL_ENDPOINT}:predict \
    -d '{
  "instances": [
    {
      "content": "Dining in New York City"
    },
    {
      "content": "Best resorts on the east coast"
    }
  ]
}'

textembedding-gecko@001 모델이 아닌 모델에 대한 curl 명령어 예시

다른 모델의 조정된 버전(예: textembedding-gecko@003textembedding-gecko-multilingual@001)에는 task_typetitle의 2개의 추가 입력이 필요합니다. 이러한 매개변수에 대한 추가 문서는 curl 명령어를 참조하세요.

PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
ENDPOINT_URI=https://${LOCATION}-aiplatform.googleapis.com
MODEL_ENDPOINT=TUNED_MODEL_ENDPOINT_ID

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json"  \
    ${ENDPOINT_URI}/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${MODEL_ENDPOINT}:predict \
    -d '{
  "instances": [
    {
      "content": "Dining in New York City",
      "task_type": "DEFAULT",
      "title": ""
    },
    {
      "content": "There are many resorts to choose from on the East coast...",
      "task_type": "RETRIEVAL_DOCUMENT",
      "title": "East Coast Resorts"
    }
  ]
}'

출력 예

이 출력은 버전에 관계없이 textembedding-geckotextembedding-gecko-multilingual 모델에 모두 적용됩니다.

{
 "predictions": [
   [ ... ],
   [ ... ],
   ...
 ],
 "deployedModelId": "...",
 "model": "projects/.../locations/.../models/...",
 "modelDisplayName": "tuned-text-embedding-model",
 "modelVersionId": "1"
}

다음 단계