Sobre este codelab
1. Introdução
Por que o ajuste fino é importante
Os modelos de fundação são treinados para propósitos gerais e, às vezes, não executam tarefas tão bem quanto você gostaria. Isso pode acontecer porque as tarefas que você quer que o modelo execute são tarefas especializadas que são difíceis de ensinar um modelo apenas usando o design de comandos. Nesses casos, é possível usar o ajuste de modelos para melhorar o desempenho de um modelo em tarefas específicas. O ajuste de modelo também pode ajudar a aderir a requisitos de saída específicos quando as instruções não são suficientes. Os modelos de linguagem grandes (LLMs) podem ter uma grande quantidade de informações e realizar muitas tarefas, mas eles se destacam apenas quando recebem treinamento especializado. O ajuste fino pode treinar um LLM, permitindo que você adapte um LLM pré-treinado às suas necessidades específicas.
Neste codelab, você vai aprender a fazer ajustes finos usando a abordagem de ajuste supervisionado para um modelo de LLM.
O ajuste supervisionado melhora o desempenho de um modelo ao ensinar uma nova habilidade. Dados que contêm centenas de exemplos rotulados são usados para ensinar o modelo a imitar um comportamento ou uma tarefa pretendida. Vamos fornecer um conjunto de dados rotulado para texto de entrada (comando) e texto de saída (resposta) para ensinar o modelo a personalizar as respostas para nosso caso de uso específico.
Confira mais informações sobre a personalização de modelos neste link.
O que você vai criar
Caso de uso: gerar manchetes para artigos de notícias
Vamos supor que você queira gerar automaticamente títulos para artigos de notícias. Com a Vertex AI, é possível ajustar um LLM que gera um título resumido adequado em um estilo específico e personaliza o título de acordo com as diretrizes do canal de notícias.
Neste codelab, você vai:
- Use
BBC FULLTEXT DATA
(disponibilizado pelo conjunto de dados público do BigQuerybigquery-public-data.bbc_news.fulltext
). - Ajuste um LLM (
text-bison@002
) para um novo modelo ajustado chamado "bbc-news-summary-tuned
" e compare o resultado com a resposta do modelo base. Um arquivo JSONL de amostra está disponível para este codelab no repositório. Você pode fazer upload do arquivo no seu bucket do Cloud Storage e seguir estas etapas de ajuste fino: - Prepare seus dados:comece com um conjunto de dados de artigos de notícias e as manchetes correspondentes, como o conjunto de dados da BBC News usado no código de exemplo.
- Ajustar um modelo pré-treinado:escolha um modelo base, como "
text-bison@002
", e ajuste-o com seus dados de notícias usando o SDK da Vertex AI para Python. - Avalie os resultados:compare a performance do modelo ajustado com o modelo de base para conferir a melhoria na qualidade da geração de títulos.
- Implantar e usar o modelo:disponibilize o modelo ajustado por um endpoint de API e comece a gerar títulos de novos artigos automaticamente.
2. Antes de começar
- No console do Google Cloud, na página de seletor de projetos, selecione ou crie um projeto do Google Cloud.
- Verifique se o faturamento está ativado para seu projeto do Google Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
- Abra o Colab Notebook e faça login na mesma conta do Google Cloud ativa.
3. Ajustar um modelo de linguagem grande
Este codelab usa o SDK da Vertex AI para Python para ajustar o modelo. Você também pode fazer ajustes usando as outras opções: HTTP, comando CURL, SDK Java e Console.
É possível ajustar e avaliar o modelo para respostas personalizadas em cinco etapas. Consulte o código completo no arquivo llm_fine_tuning_supervised.ipynb do repositório.
4. Etapa 1: instalar e importar dependências
!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components
Siga o restante das etapas, conforme mostrado no arquivo .ipynb no repositório. Substitua PROJECT_ID e BUCKET_NAME pelas suas credenciais.
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import warnings
warnings.filterwarnings('ignore')
import vertexai
vertexai.init(project=PROJECT_ID, location=REGION)
import kfp
import sys
import uuid
import json
import pandas as pd
from google.auth import default
from datasets import load_dataset
from google.cloud import aiplatform
from vertexai.preview.language_models import TextGenerationModel, EvaluationTextSummarizationSpec
5. Etapa 2: preparar e carregar dados de treinamento
Substitua YOUR_BUCKET pelo seu bucket e faça upload do arquivo de dados de treinamento de amostra TRAIN.jsonl nele. Os dados de amostra foram provisionados para este caso de uso no link mencionado acima.
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
O resultado dessa etapa será este:
6. Etapa 3: ajustar um modelo de linguagem grande
Você pode ajustar qualquer modelo de linguagem grande neste momento (com base na disponibilidade de suporte) . No entanto, neste snippet, estamos ajustando o modelo pré-treinado "text-bison@002" com o frame de dados que contém os dados de treinamento que carregamos na etapa anterior:
model_display_name = 'bbc-finetuned-model' # @param {type:"string"}
tuned_model = TextGenerationModel.from_pretrained("text-bison@002")
tuned_model.tune_model(
training_data=df,
train_steps=100,
tuning_job_location="europe-west4",
tuned_model_location="europe-west4",
)
Essa etapa leva algumas horas para ser concluída. É possível acompanhar o progresso do ajuste fino usando o link do job do pipeline no resultado.
7. Etapa 4: prever com o novo modelo ajustado
Quando o job de ajuste fino for concluído, você poderá fazer previsões com o novo modelo. Para fazer previsões com o novo modelo ajustado:
response = tuned_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
Você verá o seguinte resultado:
Para fazer previsões com o modelo base (text-bison@002
) para comparação, execute os seguintes comandos:
base_model = TextGenerationModel.from_pretrained("text-bison@002")
response = base_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)
Você verá o seguinte resultado:
Embora os dois títulos gerados pareçam adequados, o primeiro (gerado com o modelo ajustado) está mais em sintonia com o estilo dos títulos usados no conjunto de dados em questão.
Carregar o modelo ajustado
Talvez seja mais fácil carregar um modelo que você acabou de ajustar. Mas lembre-se de que, na etapa 3, ele é invocado no escopo do próprio código, então ele ainda mantém o modelo ajustado na variável tuned_model. Mas e se você quiser invocar um modelo que foi ajustado no passado?
Para fazer isso, invoque o método get_tuned_model() no LLM com o URL de ENDPOINT completo do modelo ajustado implantado no Vertex AI Model Registry. Nesse caso, você está inserindo PROJECT_NUMBER e MODEL_NUMBER em vez dos respectivos IDs.
tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))
8. Etapa 5: avaliar o novo modelo ajustado
A avaliação é um aspecto fundamental para avaliar a qualidade e a relevância da resposta gerada. Ele envolve examinar a saída de um modelo de linguagem generativa para determinar a coerência, a precisão e o alinhamento com a solicitação fornecida. A avaliação de modelo ajuda a identificar áreas de melhoria, otimizar a performance do modelo e garantir que o texto gerado atenda aos padrões de qualidade e utilidade desejados. Leia mais sobre isso na documentação. Por enquanto, vamos conferir como podemos acessar algumas métricas de avaliação no modelo ajustado e comparar com o modelo de base.
- Carregue o conjunto de dados AVALIAÇÃO:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
- Defina a especificação de avaliação para uma tarefa de resumo de texto no modelo ajustado.
task_spec = EvaluationTextSummarizationSpec(
task_name = "summarization",
ground_truth_data=df
)
Essa etapa leva alguns minutos. É possível acompanhar o progresso usando o link do job do pipeline no resultado. Após a conclusão, o resultado da avaliação será exibido:
A métrica rougeLSum
no resultado da avaliação especifica a pontuação ROUGE-L para o resumo. O ROUGE-L é uma métrica baseada em recordação que mede a sobreposição entre um resumo e um resumo de referência. Ele é calculado usando a maior subsequência comum (LCS) entre os dois resumos e dividindo-a pela duração do resumo de referência.
A pontuação rougeLSum
na expressão fornecida é 0,36600753600753694, o que significa que o resumo tem uma sobreposição de 36,6% com o resumo de referência.
Se você executar a etapa de avaliação no modelo de referência, vai notar que a pontuação do resumo é relativamente maior para o modelo ajustado.
Encontre os resultados da avaliação no diretório de saída do Cloud Storage especificado ao criar o job de avaliação. O nome do arquivo é evaluation_metrics.json
. Para modelos ajustados, também é possível conferir os resultados da avaliação no console do Google Cloud na página Registro de modelos da Vertex AI.
9. Considerações importantes
- Suporte ao modelo:sempre verifique a documentação do modelo para conferir a compatibilidade mais recente.
- Desenvolvimento rápido:o campo de LLMs avança rapidamente. Um modelo mais recente e potente pode superar um modelo ajustado criado com base em uma versão mais antiga. A boa notícia é que você pode aplicar essas técnicas de ajuste fino a modelos mais recentes quando o recurso estiver disponível.
- LoRA:é uma técnica para ajustar com eficiência os LLMs. Para isso, ele introduz matrizes de decomposição de baixa classificação e treináveis nas camadas do modelo pré-treinado. Saiba mais neste link. Em vez de atualizar todos os parâmetros de um LLM massivo, a LoRA aprende matrizes menores que são somadas ou multiplicadas pelas matrizes de peso do modelo original. Isso reduz significativamente o número de parâmetros adicionais introduzidos durante o ajuste fino.
10. Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste codelab, siga estas etapas:
- No console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
- Como alternativa, acesse o Model Registry, navegue até a guia "Implantar e testar o modelo", remova a implantação do endpoint e exclua o modelo ajustado implantado.
11. Parabéns
Parabéns! Você usou a Vertex AI para ajustar um modelo LLM. O ajuste fino é uma técnica poderosa que permite personalizar LLMs para seu domínio e tarefas. Com a Vertex AI, você tem as ferramentas e os recursos necessários para ajustar seus modelos de maneira eficiente.
Explore os repositórios do GitHub e teste o código de exemplo para conferir a sintonia fina e a avaliação. Considere como os LLMs ajustados podem atender às suas necessidades específicas, desde a geração de cópias de marketing direcionadas até o resumo de documentos complexos ou a tradução de idiomas com nuances culturais. Use o pacote completo de ferramentas e serviços oferecidos pela Vertex AI para criar, treinar, avaliar e implantar seus modelos ajustados com facilidade.