Usar ajustes e avaliações para melhorar o desempenho dos modelos
Neste tutorial, mostramos como criar um
modelo remoto
do BigQuery ML
que faz referência ao modelo gemini-1.5-flash-002
da Vertex AI.
Em seguida, use o
ajuste supervisionado
para ajustar o modelo com novos dados de treinamento, depois avalie o modelo com a
função ML.EVALUATE
.
O ajuste pode ajudar você a lidar com cenários em que é necessário personalizar o modelo hospedado da Vertex AI, como quando o comportamento esperado do modelo é difícil de definir de forma concisa em um comando ou quando os comandos não produzem os resultados esperados com consistência suficiente. O ajuste supervisionado também influencia o modelo das seguintes maneiras:
- Orienta o modelo a retornar estilos de resposta específicos, por exemplo, sendo mais conciso ou detalhado.
- Ensina novos comportamentos ao modelo, por exemplo, respondendo a comandos como uma persona específica.
- Faz com que o modelo se atualize com novas informações.
Neste tutorial, o objetivo é fazer com que o modelo gere um texto cujo estilo e conteúdo se conformem o máximo possível ao conteúdo de informações reais fornecido.
Permissões necessárias
Para criar uma conexão, você precisa do seguinte papel do Identity and Access Management (IAM, na sigla em inglês):
roles/bigquery.connectionAdmin
Para conceder permissões à conta de serviço da conexão, você precisa da seguinte permissão:
resourcemanager.projects.setIamPolicy
Para criar o modelo usando o BigQuery ML, você precisa das seguintes permissões do IAM:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
Para executar a inferência, você precisa das seguintes permissões:
bigquery.tables.getData
na tabelabigquery.models.getData
no modelobigquery.jobs.create
Antes de começar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, Vertex AI, and Compute Engine APIs.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- BigQuery: You incur costs for the queries that you run in BigQuery.
- BigQuery ML: You incur costs for the model that you create and the processing that you perform in BigQuery ML.
- Vertex AI: You incur costs for calls to and
supervised tuning of the
gemini-1.0-flash-002
model.
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Para saber mais, acesse os recursos a seguir:
criar um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar o modelo de ML:
No console do Google Cloud , acesse a página do BigQuery.
No painel Explorer, clique no nome do seu projeto.
Clique em
Conferir ações > Criar conjunto de dados.Na página Criar conjunto de dados, faça o seguinte:
Para o código do conjunto de dados, insira
bqml_tutorial
.Em Tipo de local, selecione Multirregião e EUA (várias regiões nos Estados Unidos).
Os conjuntos de dados públicos são armazenados na multirregião
US
. Para simplificar, armazene seus conjuntos de dados no mesmo local.Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.
Criar uma conexão
Crie uma Conexão de recursos do Cloud e tenha acesso ao ID da conta de serviço da conexão. Crie a conexão no mesmo local do conjunto de dados criado na etapa anterior.
Selecione uma das seguintes opções:
Console
Acessar a página do BigQuery.
Para criar uma conexão, clique em
Adicionar e em Conexões com fontes de dados externas.Na lista Tipo de conexão, selecione Modelos remotos da Vertex AI, funções remotas e BigLake (Cloud Resource).
No campo ID da conexão, insira um nome para a conexão.
Clique em Criar conexão.
Clique em Ir para conexão.
No painel Informações da conexão, copie o ID da conta de serviço para uso em uma etapa posterior.
bq
Em um ambiente de linha de comando, crie uma conexão:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
O parâmetro
--project_id
substitui o projeto padrão.Substitua:
REGION
: sua região de conexãoPROJECT_ID
: o ID do projeto do Google Cloud .CONNECTION_ID
: um ID para sua conexão
Quando você cria um recurso de conexão, o BigQuery cria uma conta de serviço do sistema exclusiva e a associa à conexão.
Solução de problemas: se você receber o seguinte erro de conexão, atualize o SDK Google Cloud:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
Recupere e copie o ID da conta de serviço para uso em uma etapa posterior:
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
O resultado será assim:
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
Use o
recurso
google_bigquery_connection
.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.
O exemplo a seguir cria uma conexão de recurso do Cloud chamada my_cloud_resource_connection
na região US
:
Para aplicar a configuração do Terraform a um projeto do Google Cloud , siga as etapas nas seções a seguir.
Preparar o Cloud Shell
- Inicie o Cloud Shell.
-
Defina o projeto padrão do Google Cloud em que você quer aplicar as configurações do Terraform.
Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.
Preparar o diretório
Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.
-
No Cloud Shell, crie um diretório e um novo
arquivo dentro dele. O nome do arquivo precisa ter a extensão
.tf
, por exemplo,main.tf
. Neste tutorial, o arquivo é chamado demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.
Copie o exemplo de código no
main.tf
recém-criado.Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção
-upgrade
:terraform init -upgrade
Aplique as alterações
-
Revise a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expectativas:
terraform plan
Faça as correções necessárias na configuração.
-
Para aplicar a configuração do Terraform, execute o comando a seguir e digite
yes
no prompt:terraform apply
Aguarde até que o Terraform exiba a mensagem "Apply complete!".
- Abra seu Google Cloud projeto para conferir os resultados. No console Google Cloud , navegue até seus recursos na UI para verificar se foram criados ou atualizados pelo Terraform.
Conceder acesso à conta de serviço da conexão
Conceda à sua conta de serviço o papel de Agente de serviço da Vertex AI para que ela possa acessar a Vertex AI. Se esse papel não for concedido, ocorrerá um erro. Selecione uma das seguintes opções:
Console
Acesse a página IAM e administrador.
Clique em
CONCEDER ACESSO.A caixa de diálogo Adicionar principais é aberta.
No campo Novos principais, digite o ID da conta de serviço que você copiou anteriormente.
Clique em Selecionar papel.
Em Filtro, digite
Vertex AI Service Agent
e selecione esse papel.Clique em Salvar.
gcloud
Use o comando gcloud projects add-iam-policy-binding
(em inglês).
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.serviceAgent' --condition=None
Substitua:
PROJECT_NUMBER
: o ID do seu projetoMEMBER
: o ID da conta de serviço que você copiou anteriormente
A conta de serviço associada à sua conexão é uma instância do Agente de serviço da delegação de conexão do BigQuery. Portanto, não é aceitável atribuir um papel de agente de serviço a ela.
Criar tabelas de teste
Crie tabelas de dados de treinamento e avaliação com base no conjunto de dados público task955_wiki_auto_style_transfer do Hugging Face.
Abra o Cloud Shell.
No Cloud Shell, execute os seguintes comandos para criar tabelas de dados de teste e avaliação:
python3 -m pip install pandas pyarrow fsspec huggingface_hub python3 -c "import pandas as pd; df_train = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/train-00000-of-00001.parquet').drop('id', axis=1); df_train['output'] = [x[0] for x in df_train['output']]; df_train.to_json('wiki_auto_style_transfer_train.jsonl', orient='records', lines=True);" python3 -c "import pandas as pd; df_valid = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/valid-00000-of-00001.parquet').drop('id', axis=1); df_valid['output'] = [x[0] for x in df_valid['output']]; df_valid.to_json('wiki_auto_style_transfer_valid.jsonl', orient='records', lines=True);" bq rm -t bqml_tutorial.wiki_auto_style_transfer_train bq rm -t bqml_tutorial.wiki_auto_style_transfer_valid bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_train wiki_auto_style_transfer_train.jsonl input:STRING,output:STRING bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_valid wiki_auto_style_transfer_valid.jsonl input:STRING,output:STRING
Criar um modelo de referência
Crie um modelo remoto no modelo gemini-1.0-flash-002
da Vertex AI.
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução para criar um modelo remoto:
CREATE OR REPLACE MODEL `bqml_tutorial.gemini_baseline` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT ='gemini-1.5-flash-002');
Substitua:
LOCATION
: o local da conexão.CONNECTION_ID
: o ID da sua conexão do BigQuery.Quando você confere os detalhes da conexão no console Google Cloud , o
CONNECTION_ID
é o valor na última seção do ID da conexão totalmente qualificado, mostrado em ID da conexão, por exemplo,projects/myproject/locations/connection_location/connections/myconnection
.
A consulta leva alguns segundos para ser concluída. Depois disso, o modelo
gemini_baseline
aparece no conjunto de dadosbqml_tutorial
no painel Explorer. Como a consulta usa uma instruçãoCREATE MODEL
para criar um modelo, não há resultados de consulta.
Verificar o desempenho do modelo de referência
Execute a
função ML.GENERATE_TEXT
com o modelo remoto para ver como ele é executado nos dados de avaliação sem nenhum
ajuste.
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução:
SELECT ml_generate_text_llm_result, ground_truth FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_baseline`, ( SELECT input AS prompt, output AS ground_truth FROM `bqml_tutorial.wiki_auto_style_transfer_valid` LIMIT 10 ), STRUCT(TRUE AS flatten_json_output));
Se você examinar os dados de saída e comparar os valores
ml_generate_text_llm_result
eground_truth
, vai notar que, embora o modelo de referência gere texto que reflete com precisão os fatos fornecidos no conteúdo de verdade, o estilo do texto é bastante diferente.
Avaliar o modelo de referência
Para realizar uma avaliação mais detalhada do desempenho do modelo, use a
função ML.EVALUATE
.
Essa função calcula as métricas do modelo que medem a precisão e a qualidade do
texto gerado para comparar as respostas do modelo com as respostas
ideais.
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.gemini_baseline`, ( SELECT input AS input_text, output AS output_text FROM `bqml_tutorial.wiki_auto_style_transfer_valid` ), STRUCT('text_generation' AS task_type));
A saída será assim:
+---------------------+---------------------+-------------------------------------------+--------------------------------------------+ | bleu4_score | rouge-l_precision | rouge-l_recall | rouge-l_f1_score | evaluation_status | +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+ | 0.15289758194680161 | 0.24925921915413246 | 0.44622484204944518 | 0.30851122211104348 | { | | | | | | "num_successful_rows": 176, | | | | | | "num_total_rows": 176 | | | | | | } | +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
A performance do modelo de referência não é ruim, mas a semelhança do texto gerado com a verdade é baixa, com base nas métricas de avaliação. Isso indica que vale a pena realizar o ajuste supervisionado para saber se é possível melhorar o desempenho do modelo para este caso de uso.
Criar um modelo ajustado
Crie um modelo remoto semelhante ao criado em
Criar um modelo, mas desta vez especificando a
cláusula AS SELECT
para fornecer os dados de treinamento para ajustar o modelo.
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução para criar um modelo remoto:
CREATE OR REPLACE MODEL `bqml_tutorial.gemini_tuned` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS ( endpoint = 'gemini-1.5-flash-002', max_iterations = 500, data_split_method = 'no_split') AS SELECT input AS prompt, output AS label FROM `bqml_tutorial.wiki_auto_style_transfer_train`;
Substitua:
LOCATION
: o local da conexão.CONNECTION_ID
: o ID da sua conexão do BigQuery.Quando você confere os detalhes da conexão no console Google Cloud , o
CONNECTION_ID
é o valor na última seção do ID da conexão totalmente qualificado, mostrado em ID da conexão, por exemplo,projects/myproject/locations/connection_location/connections/myconnection
.
A consulta leva alguns minutos para ser concluída. Depois disso, o modelo
gemini_tuned
aparece no conjunto de dadosbqml_tutorial
no painel Explorer. Como a consulta usa uma instruçãoCREATE MODEL
para criar um modelo, não há resultados de consulta.
Verificar o desempenho do modelo ajustado
Execute a função ML.GENERATE_TEXT
para ver o desempenho do modelo ajustado nos
dados de avaliação.
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução:
SELECT ml_generate_text_llm_result, ground_truth FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_tuned`, ( SELECT input AS prompt, output AS ground_truth FROM `bqml_tutorial.wiki_auto_style_transfer_valid` LIMIT 10 ), STRUCT(TRUE AS flatten_json_output));
Se você examinar os dados de saída, vai notar que o modelo ajustado produz um texto com estilo muito mais semelhante ao conteúdo da informação verdadeira.
Avaliar o modelo ajustado
Use a função ML.EVALUATE
para ver como as respostas do modelo ajustado se comparam
às respostas ideais.
No console do Google Cloud , acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução:
SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.gemini_tuned`, ( SELECT input AS prompt, output AS label FROM `bqml_tutorial.wiki_auto_style_transfer_valid` ), STRUCT('text_generation' AS task_type));
A saída será assim:
+---------------------+---------------------+-------------------------------------------+--------------------------------------------+ | bleu4_score | rouge-l_precision | rouge-l_recall | rouge-l_f1_score | evaluation_status | +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+ | 0.19391708685890585 | 0.34170970869469058 | 0.46793189219384496 | 0.368190192211538 | { | | | | | | "num_successful_rows": 176, | | | | | | "num_total_rows": 176 | | | | | | } | +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
Você pode notar que, embora o conjunto de dados de treinamento tenha usado apenas 1.408 exemplos, há uma melhoria acentuada no desempenho, conforme indicado pelas métricas de avaliação mais altas.
Limpar
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.