Nesta página, mostramos como ajustar o modelo de embedding de texto,
textembedding-gecko
e textembedding-gecko-multilingual
. Esses modelos
de fundação foram treinados em um grande conjunto de dados de texto públicos. Se você tiver um caso de uso exclusivo
que exija dados de treinamento específicos próprios, será possível usar o ajuste de modelos.
Depois de ajustar um modelo de embedding de base, o modelo vai ser atendido para seu caso de uso.
O ajuste oferece suporte a
versões estáveis
do modelo de embedding de texto.
Os modelos de embedding de texto são compatíveis com ajustes supervisionados. O ajuste supervisionado usa exemplos rotulados que demonstram o tipo de saída que você quer do modelo de embedding de texto durante a inferência. Os modelos de embedding de texto não são compatíveis com o ajuste usando o aprendizado por reforço com base no feedback humano (RLHF, na sigla em inglês).
Para saber mais sobre o ajuste de modelos, consulte Como o ajuste de modelos funciona.
Melhoria de qualidade esperada
A Vertex Generative AI usa um método de ajuste com eficiência de parâmetros para personalização. Essa metodologia mostra ganhos significativos na qualidade de até 41% (média de 12%) em experimentos realizados em conjuntos de dados de referência de recuperação pública.
Caso de uso para ajustar um modelo de embedding
O ajuste de um modelo de embeddings de texto pode permitir que seu modelo se adapte aos embeddings para um domínio ou tarefa específico. Isso pode ser útil se o modelo de embeddings pré-treinados não for adequado às suas necessidades específicas. Por exemplo, é possível ajustar um modelo de embeddings em um conjunto de dados específico de tíquetes de suporte ao cliente da sua empresa. Isso pode ajudar um bot de chat a entender os diferentes tipos de problemas de suporte que seus clientes costumam ter e a responder às perguntas deles de maneira mais eficaz. Sem o ajuste, o modelo não sabe as especificidades dos tíquetes de suporte ao cliente ou as soluções para problemas específicos do produto.
Fluxo de trabalho de ajuste
O fluxo de trabalho de ajuste de modelos na Vertex Generative AI para textembedding-gecko
e textembedding-gecko-multilingual
é o seguinte:
- Prepare o conjunto de dados de ajuste do modelo
- Faça o upload do conjunto de dados de ajuste do modelo em um bucket do Cloud Storage.
- Configure seu projeto para o Vertex AI Pipelines.
- Crie um job de ajuste do modelo
- Implantar o modelo ajustado em um endpoint da Vertex Generative AI com o mesmo nome Ao contrário dos jobs de ajuste de modelo de texto ou codey, um job de ajuste de embedding de texto não implanta os modelos ajustados em um endpoint da Vertex Generative AI.
Preparar o conjunto de dados de embeddings
O conjunto de dados usado para ajustar um modelo de embeddings inclui dados que se alinham à tarefa que você quer que o modelo execute.
Formato do conjunto de dados para ajustar um modelo de embeddings
O conjunto de dados de treinamento consiste nos arquivos a seguir, que precisam estar no Cloud Storage. O caminho dos arquivos é definido por parâmetros ao iniciar o pipeline de ajuste. Os três tipos de arquivo são o arquivo de corpus, o arquivo de consulta e os rótulos. Somente os rótulos de treinamento são necessários, mas também é possível fornecer rótulos de validação e teste para maior controle.
Arquivo corp: o caminho é definido pelo parâmetro
corpus_path
. É um arquivo JSONL em que cada linha tem os campos_id
,title
etext
com valores de string._id
etext
são obrigatórios, enquantotitle
é opcional. Veja um exemplo de arquivocorpus.jsonl
:{"_id": "doc1", "title": "Get an introduction to generative AI on Vertex AI", "text": "Vertex AI's Generative AI Studio offers a Google Cloud console tool for rapidly prototyping and testing generative AI models. Learn how you can use Generative 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."}
Arquivo de consulta: o arquivo de consulta contém suas consultas de exemplo. O caminho é definido pelo parâmetro
queries_path
. O arquivo de consulta está no formato JSONL e tem os mesmos campos que o arquivo de corpus. Veja um exemplo de arquivoqueries.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"}
Rótulos de treinamento: o caminho é definido pelo parâmetro
train_label_path
. Train_label_path é o URI do Cloud Storage para o local dos dados do rótulo de treinamento, especificado na criação do job de ajuste. Os rótulos precisam ser um arquivo TSV com cabeçalho. Um subconjunto das consultas e o corpus precisam ser incluídos no arquivo de rótulos de treinamento. O arquivo precisa ter as colunasquery-id
,corpus-id
escore
. Oquery-id
é uma string que corresponde à chave_id
do arquivo de consulta, ecorpus-id
é uma string que corresponde a_id
no arquivo de corpus.Score
é um valor inteiro não negativo. Qualquer pontuação maior que zero indica que o documento está relacionado à consulta. Números maiores indicam um nível maior de relevância. Se a pontuação for emitida, o valor padrão será 1. Veja um exemplo de arquivotrain_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
Rótulos de teste: opcionais. Os rótulos de teste têm o mesmo formato dos rótulos de treinamento e são especificados pelo parâmetro
test_label_path
. Se nenhumtest_label_path
for fornecido, os rótulos de teste serão divididos automaticamente dos rótulos de treinamento.Rótulos de validação: opcionais. Os rótulos de validação têm o mesmo formato dos rótulos de treinamento e são especificados pelo parâmetro
validation_label_path
. Se nenhumvalidation_label_path
for fornecido, os rótulos de validação serão divididos automaticamente dos rótulos de treinamento.
Requisitos de tamanho do conjunto de dados
Os arquivos de conjunto de dados fornecidos precisam atender às seguintes restrições:
O número de consultas precisa estar entre 9 e 40.000.
O número de documentos no corpus deve estar entre 9 e 500.000.
Cada arquivo de rótulo do conjunto de dados precisa incluir pelo menos três IDs de consulta e, em todas as divisões do conjunto de dados, precisa haver pelo menos nove IDs de consulta.
O número total de rótulos precisa ser menor que 500.000.
Configurar seu projeto para o Vertex AI Pipelines
O ajuste é executado dentro do seu projeto usando a plataforma Vertex AI Pipelines.
Como configurar permissões
O pipeline executa o código de treinamento em dois agentes de serviço. Esses agentes de serviço precisam receber papéis específicos para começar o treinamento usando o projeto e o conjunto de dados.
Conta de serviço padrão do Compute Engine
PROJECT_NUMBER-compute@developer.gserviceaccount.com
Essa conta de serviço requer:
acesso
Storage Object Viewer
a cada arquivo de conjunto de dados criado no Cloud Storage;acesso
Storage Object User
ao diretório de saída do Cloud Storage do pipeline, PIPELINE_OUTPUT_DIRECTORY;acesso de
Vertex AI User
ao seu projeto.
Em vez de usar a conta de serviço padrão do Compute Engine, é possível especificar uma conta de serviço personalizada. Para mais informações, acesse Configurar uma conta de serviço com permissões granulares.
Agente de serviço de ajuste da Vertex Generative AI
service-PROJECT_NUMBER@gcp-sa-aiplatform-ft.iam.gserviceaccount.com
Essa conta de serviço requer:
acesso
Storage Object Viewer
a cada arquivo de conjunto de dados criado no Cloud Storage;acesso
Storage Object User
ao diretório de saída do Cloud Storage do pipeline, PIPELINE_OUTPUT_DIRECTORY;
Para mais informações sobre a configuração de permissões do conjunto de dados do Cloud Storage, consulte Configurar um bucket do Cloud Storage para artefatos de pipeline.
Como usar aceleradores
O ajuste requer aceleradores de GPU. Qualquer um dos aceleradores a seguir pode ser usado para o pipeline de ajuste de embedding de texto:
NVIDIA_L4
NVIDIA_TESLA_A100
NVIDIA_TESLA_T4
NVIDIA_TESLA_V100
NVIDIA_TESLA_P100
Para iniciar um job de ajuste, é necessário ter uma cota de Restricted image training GPUs
adequada para o tipo e a região de acelerador que você selecionou, por exemplo, Restricted image training Nvidia V100 GPUs per region
. Para aumentar a cota do seu projeto, consulte Solicitar cota adicional.
Nem todos os aceleradores estão disponíveis em todas as regiões. Consulte Como usar aceleradores na Vertex Generative AI para mais informações.
Criar um job de ajuste de modelo de embedding
É possível criar um job de ajuste de modelo de incorporação usando o console do Google Cloud ou a API REST.
REST
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
DISPLAY_NAME
: um nome de exibição do pipelineJob.PIPELINE_OUTPUT_DIRECTORY
: caminho para os artefatos de saída do pipeline, começando com "gs://".PROJECT_ID
pelo ID do projeto do Google Cloud.LOCATION
: região do projeto do Google Cloud para executar o pipeline. Há suporte para o ajuste em qualquer região onde o projeto tenha a cota de GPU adequada. Consulte Como usar aceleradores para mais informações. Como os recursos de veiculação podem ser limitados em outras regiões,us-central1
é recomendado.QUERIES_PATH
: o URI do bucket do Cloud Storage que armazena dados de consulta, começando com "gs://".CORPUS_PATH
: o URI do Cloud Storage para os dados do corpus, começando com "gs://".TRAIN_LABEL_PATH
: o URI do Cloud Storage do local dos dados do rótulo do trem, começando com "gs://".TEST_LABEL_PATH
: opcional. O URI do Cloud Storage do local de dados do rótulo de teste, começando com "gs://". Transmitir uma string vazia vai direcionar o pipeline para dividir automaticamente o conjunto de dados de teste do conjunto de dados de treinamento.VALIDATION_LABEL_PATH
: opcional. O URI do Cloud Storage do local dos dados do rótulo de validação, começando com "gs://". Transmitir uma string vazia vai direcionar o pipeline para dividir automaticamente o conjunto de dados de validação do conjunto de treinamento.ACCELERATOR_TYPE
: opcional. O tipo de dado a ser usado para treinamento. O padrão éNVIDIA_TESLA_V100
. Para valores possíveis, consulte Como usar aceleradores.ACCELERATOR_COUNT
: opcional. O número de aceleradores a serem usados no treinamento. Usar um número maior de aceleradores pode tornar o treinamento mais rápido, mas não afeta a qualidade. O padrão é 4.MACHINE_TYPE
: opcional. O tipo de máquina que será usado para o treinamento. O padrão én1-standard-16
. Para mais informações sobre como selecionar o tipo de máquina que corresponde ao tipo de acelerador e à contagem que você selecionou, consulte Plataformas de GPU.BASE_MODEL_VERSION_ID
: opcional. Use-o para especificar qual modelo de embedding de texto será ajustado. O padrão étextembedding-gecko@001
. Para valores possíveis, consulte as versões estáveis.MODEL_DISPLAY_NAME
: opcional. O nome de exibição do modelo ajustado quando ele aparece no Model Registry. O padrão é "tuned-text-embedding-model".TASK_TYPE
: opcional. Definir esse parâmetro otimiza o modelo ajustado para uma tarefa downstream específica. O padrão éDEFAULT
. Para mais informações, consulte Usar embeddings de texto.BATCH_SIZE
: opcional. O tamanho do lote de treinamento. O padrão é 128.TRAIN_STEPS
: opcional. O número de etapas para realizar o ajuste do modelo. O padrão é 1.000 e precisa ser maior que 30.OUTPUT_DIMENSIONALITY
: opcional. Um número inteiro entre 1 e 768. Isso determina a dimensionalidade de saída (tamanho do vetor) do modelo ajustado. Um valor de -1 indica que o tamanho total do embedding do modelo base será usado. Compatível apenas com os modelostext-embedding-004
etext-multilingual-embedding-002
.LR_MULTIPLIER
: opcional. Um multiplicador para aplicar à taxa de aprendizado durante o treinamento. O padrão é 1.0, que treina com uma taxa de aprendizado recomendada.CMEK_KEY_NAME
: opcional. O nome da chave de criptografia gerenciada pelo cliente da CMEK que será usada para gravar todos os recursos de ajuste, como o modelo ajustado e os dados do pipeline de saída.
Método HTTP e URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs
Corpo JSON da solicitação:
{ "displayName": "DISPLAY_NAME", "runtimeConfig": { "gcsOutputDirectory": "PIPELINE_OUTPUT_DIRECTORY", "parameterValues": { "queries_path": "QUERIES_PATH", "corpus_path": "CORPUS_PATH", "train_label_path": "TRAIN_LABEL_PATH", "test_label_path": "TEST_LABEL_PATH", "validation_label_path": "VALIDATION_LABEL_PATH", "accelerator_type": "ACCELERATOR_TYPE", "accelerator_count": "ACCELERATOR_COUNT", "machine_type": "MACHINE_TYPE", "base_model_version_id": "BASE_MODEL_VERSION_ID", "model_display_name": "MODEL_DISPLAY_NAME", "task_type": "TASK_TYPE", "batch_size": "BATCH_SIZE", "train_steps": "TRAIN_STEPS", "output_dimensionality": "OUTPUT_DIMENSIONALITY", "learning_rate_multiplier": "LR_MULTIPLIER", "encryption_spec_key_name": "CMEK_KEY_NAME" } }, "templateUri": "https://us-kfp.pkg.dev/ml-pipeline/llm-text-embedding/tune-text-embedding-model/v1.1.3", "encryptionSpec": { "kmsKeyName": "CMEK_KEY_NAME" } }
Para enviar a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
Depois de iniciar o pipeline, acompanhe o progresso do job de ajuste no console do Google Cloud.
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.
Java
Antes de testar essa amostra, siga as instruções de configuração para Java Guia de início rápido da Vertex AI: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Java.
Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Antes de testar essa amostra, siga as instruções de configuração para Node.js Guia de início rápido da Vertex AI: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Node.js.
Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Console
Para ajustar um modelo de incorporação de texto usando o console do Google Cloud, inicie um pipeline de personalização seguindo as etapas a seguir:
- Na seção "Vertex AI" do console do Google Cloud, acesse a página do Vertex AI Pipelines.
- Clique em Criar execução para abrir o painel Criar execução do pipeline.
- Clique em Selecionar pipelines atuais e informe os seguintes detalhes:
- Selecione "ml-pipeline" no menu suspenso Selecionar um recurso.
- Selecione "llm-text-embedding" no menu suspenso Repository.
- Selecione "tune-text-embedding-model" no menu suspenso Pipeline ou componente.
- Selecione a versão "v1.1.3" no menu suspenso Versão.
- Especifique um Nome de execução para identificar exclusivamente essa execução de pipeline.
- Na lista suspensa Região, selecione a região para criar a execução do pipeline, que será a mesma em que o modelo ajustado foi criado.
- Clique em Continuar. O painel Configuração do ambiente de execução é exibido.
- Em Local do Cloud Storage, clique em Procurar para selecionar o bucket do Cloud Storage para armazenar os artefatos de saída do pipeline e, em seguida, clique em Selecionar.
- Em Parâmetros do pipeline, especifique os parâmetros para o pipeline de ajuste. Os três parâmetros obrigatórios são
corpus_path
,queries_path
etrain_label_path
, com os formatos descritos em Preparar seu conjunto de dados de embeddings. Para informações mais detalhadas sobre cada parâmetro, consulte a guia REST desta seção. - Clique em Enviar para criar a execução do pipeline.
Exemplo de comando curl
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
BASE_MODEL_VERSION_ID=BASE_MODEL_VERSION_ID
PIPELINE_OUTPUT_DIRECTORY=PIPELINE_OUTPUT_DIRECTORY
QUERIES_PATH=QUERIES_PATH
CORPUS_PATH=CORPUS_PATH
TRAIN_LABEL_PATH=TRAIN_LABEL_PATH
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/pipelineJobs?pipelineJobId=tune-text-embedding-$(date +%Y%m%d%H%M%S)" \
-d '{
"displayName": "tune-text-embedding-model",
"runtimeConfig": {
"gcsOutputDirectory": "'${PIPELINE_OUTPUT_DIRECTORY}'",
"parameterValues": {
"base_model_version_id": "'${BASE_MODEL_VERSION_ID}'",
"queries_path": "'${QUERIES_PATH}'",
"corpus_path": "'${CORPUS_PATH}'",
"train_label_path": "'${TRAIN_LABEL_PATH}'"
}
},
"templateUri": "https://us-kfp.pkg.dev/ml-pipeline/llm-text-embedding/tune-text-embedding-model/v1.1.3",
}'
Usar seu modelo ajustado
Ver modelos ajustados no Model Registry
Quando o job de ajuste é concluído, o modelo ajustado não é implantado automaticamente em um endpoint. Ele estará disponível como um recurso Model no Model Registry. É possível visualizar uma lista de modelos no projeto atual, incluindo os modelos ajustados, usando o console do Google Cloud.
Para visualizar seus modelos ajustados no console do Google Cloud, acesse a página Registro de modelos da Vertex AI.
Acessar o Vertex AI Model Registry
Implantar seu modelo
Depois de ajustar o modelo de embeddings, é preciso implantar o recurso Model. Para implantar o modelo de embeddings ajustado, consulte Implantar um modelo em um endpoint.
Ao contrário dos modelos de fundação, os modelos de embedding de texto ajustado são gerenciados pelo usuário.
Isso inclui o gerenciamento de recursos de veiculação, como tipo de máquina e aceleradores.
Para evitar erros de falta de memória durante a previsão, é recomendável implantar
usando o tipo de GPU NVIDIA_TESLA_A100
, que aceita tamanhos de lote de até cinco
para qualquer comprimento de entrada.
Semelhante ao modelo de base textembedding-gecko
, seu modelo ajustado oferece suporte
a até 3.072 tokens e pode truncar entradas mais longas.
Receber previsões em um modelo implantado
Depois que o modelo ajustado for implantado, use um dos comandos a seguir para emitir solicitações ao endpoint do modelo ajustado.
Exemplo de comandos curl para modelos textembedding-gecko@001
ajustados
Para receber previsões de uma versão ajustada de textembedding-gecko@001
, use o exemplo de comando curl abaixo.
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"
}
]
}'
Exemplos de comandos curl para modelos que não são textembedding-gecko@001
Versões ajustadas de outros modelos (por exemplo, textembedding-gecko@003
e textembedding-gecko-multilingual@001
)
exigem duas entradas adicionais: task_type
e title
.
Encontre mais documentação sobre esses parâmetros em Comando 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"
}
]
}'
Exemplo de saída
Essa saída se aplica aos modelos textembedding-gecko
e textembedding-gecko-multilingual
, independentemente da versão.
{
"predictions": [
[ ... ],
[ ... ],
...
],
"deployedModelId": "...",
"model": "projects/.../locations/.../models/...",
"modelDisplayName": "tuned-text-embedding-model",
"modelVersionId": "1"
}
A seguir
- Saiba como ajustar um modelo de fundação.
- Saiba mais sobre as práticas recomendadas de IA responsável e os filtros de segurança da Vertex Generative AI.