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 CloudCONNECTION_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 em um projeto do Google Cloud, conclua 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 projeto do Google Cloud para ver os resultados. No console do Google Cloud, navegue até seus recursos na IU 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ê visualiza os detalhes da conexão no console do Google Cloud,
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 referência, 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ê visualiza os detalhes da conexão no console do Google Cloud,
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.