Como gerar embeddings de imagens usando a função ML.GENERATE_CoordinateDING
Neste documento, mostramos como criar um
modelo remoto
do BigQuery ML
que faz referência a um
modelo de incorporação da Vertex AI.
Em seguida, use esse modelo com a função ML.GENERATE_EMBEDDING
para criar embeddings de imagem usando dados de uma tabela de objetos do BigQuery.
Funções exigidas
Para criar uma conexão, você precisa da associação no seguinte papel do Identity and Access Management (IAM):
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 uma tabela de objetos, você precisa das seguintes permissões:
bigquery.tables.create
bigquery.tables.update
bigquery.connections.delegate
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, Cloud Storage, and Vertex AI APIs.
Criar um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar a tabela de objetos e o modelo.
Console
No Console do Google Cloud, acesse a página 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:
Em ID do conjunto de dados, digite um nome para o conjunto de dados.
Em Tipo de local, selecione um local para o conjunto de dados.
Clique em Criar conjunto de dados.
bq
Crie uma conexão
Crie uma Conexão de recursos do Cloud e tenha acesso à 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.
No painel Explorer, clique em
Adicionar dados.A caixa de diálogo Adicionar dados é aberta.
No painel Filtrar por, na seção Tipo de fonte de dados, selecione Bancos de dados.
Como alternativa, no campo Pesquisar fontes de dados, insira
Vertex AI
.Na seção Fontes de dados em destaque, clique em Vertex AI.
Clique no card da solução Vertex AI Models: BigQuery Federation.
Na lista Tipo de conexão, selecione Modelos remotos da Vertex AI, funções remotas e BigLake (recurso do Cloud).
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
Conceda à conta de serviço da conexão as funções de usuário da Vertex AI e de leitor de objetos do Storage.
Para conceder os papéis, siga estas etapas:
Console
Acesse a página IAM e administrador.
Clique em
Adicionar.A caixa de diálogo Adicionar principais é aberta.
No campo Novos principais, digite o ID da conta de serviço que você copiou anteriormente.
No campo Selecionar um papel, selecione Vertex AI e, em seguida, selecione Usuário da Vertex AI.
Clique em Adicionar outro papel.
No campo Selecionar papel, escolha Cloud Storage e, em seguida, Visualizador de objetos do Storage.
Clique em Salvar.
gcloud
Use o
comando gcloud projects add-iam-policy-binding
.
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/storage.objectViewer' --condition=None
Substitua:
PROJECT_NUMBER
: o número do projeto em que a função será concedida.MEMBER
: o ID da conta de serviço que você copiou anteriormente.
criar uma tabela de objetos
Para analisar imagens sem movê-las do Cloud Storage, crie uma tabela de objetos.
Para criar uma tabela de objetos:
SQL
Use a
instrução CREATE EXTERNAL TABLE
.
No console do Google Cloud, acesse a página BigQuery Studio.
No editor de consultas, digite a seguinte instrução:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET_ID.TABLE_NAME` WITH CONNECTION {`PROJECT_ID.REGION.CONNECTION_ID`| DEFAULT} OPTIONS( object_metadata = 'SIMPLE', uris = ['BUCKET_PATH'[,...]], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE');
Substitua:
PROJECT_ID
: o ID do projeto.DATASET_ID
: o ID do conjunto de dados que você criou.TABLE_NAME
: o nome da tabela de objetos.REGION
: a região ou multirregião que contém a conexão.CONNECTION_ID
: o ID da conexão que você criou.Quando você visualiza os detalhes da conexão no console do Google Cloud, esse é 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
.Para usar uma conexão padrão, especifique
DEFAULT
em vez da string de conexão que contémPROJECT_ID.REGION.CONNECTION_ID
.BUCKET_PATH
: o caminho para o bucket do Cloud Storage que contém as imagens, no formato['gs://bucket_name/[folder_name/]*']
.O bucket do Cloud Storage usado precisa estar no mesmo projeto em que você planeja criar o modelo e chamar a função
ML.GENERATE_EMBEDDING
. Se você quiser chamar a funçãoML.GENERATE_EMBEDDING
em um projeto diferente daquele que contém o bucket do Cloud Storage usado pela tabela de objetos, é preciso conceder o papel de Administrador do Storage no nível do bucket para a conta de serviçoservice-A@gcp-sa-aiplatform.iam.gserviceaccount.com
.STALENESS_INTERVAL
: especifica se os metadados em cache são usados pelas operações na tabela de objetos e se eles precisam ser atualizados para que possam ser usados pela operação. Para mais informações sobre considerações de armazenamento em cache de metadados, consulte Armazenamento em cache de metadados para desempenho.Para desativar o armazenamento em cache de metadados, especifique 0. Esse é o padrão.
Para ativar o armazenamento em cache de metadados, especifique um valor de literal de intervalo entre 30 minutos e 7 dias. Por exemplo, especifique
INTERVAL 4 HOUR
para um intervalo de inatividade de 4 horas. Com esse valor, as operações na tabela usarão metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem anteriores a isso, a operação recuperará os metadados do Cloud Storage.CACHE_MODE
: especifica se o cache de metadados é atualizado de forma automática ou manual. Para mais informações sobre considerações de armazenamento em cache de metadados, consulte Armazenamento em cache de metadados para desempenho.Defina como
AUTOMATIC
para que o cache de metadados seja atualizado em um intervalo definido pelo sistema, geralmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar o cache de metadados com uma programação que você determinar. Nesse caso, chame o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar o cache.Defina
CACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor maior que 0.
Clique em
Executar.
Para mais informações sobre como executar consultas, acesse Executar uma consulta interativa.
bq
Use o
comando bq mk
.
bq mk --table \ --external_table_definition=BUCKET_PATH@REGION.CONNECTION_ID \ --object_metadata=SIMPLE \ --max_staleness=STALENESS_INTERVAL \ --metadata_cache_mode=CACHE_MODE \ PROJECT_ID:DATASET_ID.TABLE_NAME
Substitua:
BUCKET_PATH
: o caminho para o bucket do Cloud Storage que contém as imagens, no formato['gs://bucket_name/[folder_name/]*']
.O bucket do Cloud Storage usado precisa estar no mesmo projeto em que você planeja criar o modelo e chamar a função
ML.GENERATE_EMBEDDING
. Se você quiser chamar a funçãoML.GENERATE_EMBEDDING
em um projeto diferente daquele que contém o bucket do Cloud Storage usado pela tabela de objetos, é preciso conceder o papel de Administrador do Storage no nível do bucket para a conta de serviçoservice-A@gcp-sa-aiplatform.iam.gserviceaccount.com
.REGION
: a região ou multirregião que contém a conexão.CONNECTION_ID
: o ID da conexão que você criou.Quando você visualiza os detalhes da conexão no console do Google Cloud, esse é 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
.STALENESS_INTERVAL
: especifica se os metadados em cache são usados pelas operações na tabela de objetos e se eles precisam ser atualizados para que possam ser usados pela operação. Para mais informações sobre considerações de armazenamento em cache de metadados, consulte Armazenamento em cache de metadados para desempenho.Para desativar o armazenamento em cache de metadados, especifique 0. Esse é o padrão.
Para ativar o armazenamento em cache de metadados, especifique um valor de literal de intervalo entre 30 minutos e 7 dias. Por exemplo, especifique
INTERVAL 4 HOUR
para um intervalo de inatividade de 4 horas. Com esse valor, as operações na tabela usarão metadados em cache se tiverem sido atualizados nas últimas 4 horas. Se os metadados em cache forem anteriores a isso, a operação recuperará os metadados do Cloud Storage.CACHE_MODE
: especifica se o cache de metadados é atualizado de forma automática ou manual. Para mais informações sobre considerações de armazenamento em cache de metadados, consulte Armazenamento em cache de metadados para desempenho.Defina como
AUTOMATIC
para que o cache de metadados seja atualizado em um intervalo definido pelo sistema, geralmente entre 30 e 60 minutos.Defina como
MANUAL
se quiser atualizar o cache de metadados com uma programação que você determinar. Nesse caso, chame o procedimento do sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para atualizar o cache.Defina
CACHE_MODE
seSTALENESS_INTERVAL
estiver definido como um valor maior que 0.PROJECT_ID
: o ID do projeto.DATASET_ID
: o ID do conjunto de dados que você criou.TABLE_NAME
: o nome da tabela de objetos.
Criar um modelo
No Console do Google Cloud, acesse a página BigQuery.
Usando o editor de SQL, crie um modelo remoto:
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS (ENDPOINT = 'ENDPOINT');
Substitua:
PROJECT_ID
: o ID do projeto.DATASET_ID
: o ID do conjunto de dados que você criou anteriormente.MODEL_NAME
: o nome do modeloREGION
: a região ou multirregião que contém a conexão.CONNECTION_ID
: o ID da conexão que você criou.Quando você visualiza os detalhes da conexão no console do Google Cloud, esse é 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
.ENDPOINT
: o modelo de embedding a ser usado. Neste caso,multimodalembedding@001
.Se você especificar um URL como o endpoint ao criar o modelo remoto, por exemplo,
endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/text-embedding-004'
, verifique se o projeto especificado no URL é aquele em que você concedeu o papel de usuário da Vertex AI à conexão. conta de serviço.O modelo
multimodalembedding@001
precisa estar disponível no local em que você está criando o modelo remoto. Saiba mais em Locais.
Gerar embeddings de imagem
Gere embeddings de imagens com a função ML.GENERATE_EMBEDDING
usando dados de imagem de uma tabela de objetos:
SELECT * FROM ML.GENERATE_EMBEDDING( MODEL<var>PROJECT_ID</var>.<var>DATASET_ID</var>.<var>MODEL_NAME</var>
, TABLE<var>PROJECT_ID</var>.<var>DATASET_ID</var>.<var>TABLE_NAME</var>
, STRUCT(FLATTEN_JSON AS flatten_json_output, OUTPUT_DIMENSIONALITY AS output_dimensionality) );
Substitua:
PROJECT_ID
: o ID do projeto.DATASET_ID
: o ID do conjunto de dados que contém o modelo.MODEL_NAME
: o nome do modelo remoto em um modelomultimodalembedding@001
.TABLE_NAME
: o nome da tabela de objetos que contém as imagens a serem incorporadas.FLATTEN_JSON
: um valorBOOL
que indica se é necessário analisar a incorporação em uma coluna separada. O valor padrão éTRUE
.OUTPUT_DIMENSIONALITY
: umINT64
valor que especifica o número de dimensões a serem usadas ao gerar os embeddings de vários tipos. Os valores válidos são:128
,256
,512
e1408
. O valor padrão é1408
. Por exemplo, se você especificar256 AS output_dimensionality
, oml_generate_embedding_result
a coluna de saída contém 256 embeddings para cada valor de entrada.
Exemplo
O exemplo a seguir mostra como criar embeddings para as imagens na tabela de objetos images
:
SELECT * FROM ML.GENERATE_EMBEDDING( MODEL `mydataset.embedding_model`, TABLE `mydataset.images`, STRUCT(TRUE AS flatten_json_output, 512 AS output_dimensionality) );