Neste tutorial, mostramos como importar um modelo Open Neural Network Exchange (ONNX) treinado com scikit-learn. Você importa o modelo para um conjunto de dados do BigQuery e o usa para fazer previsões com uma consulta SQL.
O ONNX fornece um formato uniforme projetado para representar qualquer framework de machine learning (ML). Com o suporte do BigQuery ML para ONNX, é possível fazer o seguinte:
- Treine um modelo usando seu framework favorito.
- Converta o modelo no formato ONNX.
- Importe o modelo ONNX para o BigQuery e faça previsões usando o BigQuery ML.
Objetivos
- Crie e treine um modelo usando o scikit-learn.
- Converta o modelo para o formato ONNX usando sklearn-onnx.
- Use a instrução
CREATE MODEL
para importar o modelo ONNX para o BigQuery. - Use a função
ML.PREDICT
para fazer previsões com o modelo ONNX importado.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Cloud Storage APIs.
- Verifique se você tem as permissões necessárias para realizar as tarefas neste documento.
-
Make sure that you have the following role or roles on the project:
- BigQuery Studio Admin (
roles/bigquery.studioAdmin
) - Storage Object Creator (
roles/storage.objectCreator
)
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
Acessar o IAM - Selecione o projeto.
- Clique em Conceder acesso.
-
No campo Novos principais, digite seu identificador de usuário. Normalmente, é o endereço de e-mail de uma Conta do Google.
- Na lista Selecionar papel, escolha um.
- Para conceder outros papéis, clique em Adicionar outro papel e adicione cada papel adicional.
- Clique em Salvar.
- Crie um bucket do Cloud Storage para armazenar o modelo.
- Faça upload do modelo ONNX para seu bucket do Cloud Storage.
No console 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:
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).
Mantenha as configurações padrão restantes e clique em Criar conjunto de dados.
Crie um conjunto de dados chamado
bqml_tutorial
com o local dos dados definido comoUS
e uma descrição deBigQuery ML tutorial dataset
:bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Em vez de usar a flag
--dataset
, o comando usa o atalho-d
. Se você omitir-d
e--dataset
, o comando vai criar um conjunto de dados por padrão.Confirme se o conjunto de dados foi criado:
bq ls
No console do Google Cloud , acesse a página BigQuery Studio.
No editor de consultas, insira a seguinte instrução
CREATE MODEL
.CREATE OR REPLACE MODEL `bqml_tutorial.imported_onnx_model` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='BUCKET_PATH')
Substitua
BUCKET_PATH
pelo caminho para o modelo que você fez upload para o Cloud Storage. Se você estiver usando o modelo de exemplo, substituaBUCKET_PATH
pelo seguinte valor:gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
.Quando a operação for concluída, uma mensagem semelhante a esta será exibida:
Successfully created model named imported_onnx_model
.Seu novo modelo vai aparecer no painel Recursos. Os modelos são indicados pelo ícone:
Se você selecionar o novo modelo no painel Recursos, as informações sobre o modelo vão aparecer ao lado do Editor de consultas.
Importe o modelo ONNX do Cloud Storage inserindo a seguinte instrução
CREATE MODEL
.bq query --use_legacy_sql=false \ "CREATE OR REPLACE MODEL `bqml_tutorial.imported_onnx_model` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='BUCKET_PATH')"
Substitua
BUCKET_PATH
pelo caminho para o modelo que você fez upload para o Cloud Storage. Se você estiver usando o modelo de exemplo, substituaBUCKET_PATH
pelo seguinte valor:gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
.Quando a operação for concluída, uma mensagem semelhante a esta será exibida:
Successfully created model named imported_onnx_model
.Depois de importar o modelo, verifique se ele aparece no conjunto de dados.
bq ls bqml_tutorial
O resultado será assim:
tableId Type --------------------- ------- imported_onnx_model MODEL
sepal_length
sepal_width
petal_length
petal_width
Acesse a página do BigQuery Studio.
No editor de consultas, insira esta consulta que usa a função
ML.PREDICT
.SELECT * FROM ML.PREDICT(MODEL `bqml_tutorial.imported_onnx_model`, ( SELECT * FROM `bigquery-public-data.ml_datasets.iris` ) )
Os resultados da consulta são semelhantes a estes:
- 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.
- 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.
Opcional: exclua o conjunto de dados.
- Para mais informações sobre como importar modelos ONNX, consulte
A instrução
CREATE MODEL
para modelos ONNX. - Para mais informações sobre conversores e tutoriais ONNX disponíveis, consulte Como converter para o formato ONNX.
- Para uma visão geral sobre ML do BigQuery, consulte Introdução ao ML do BigQuery.
- Para começar a usar o BigQuery ML, consulte Criar modelos de machine learning no BigQuery ML.
Para mais informações sobre as permissões do IAM no BigQuery, consulte Permissões do IAM.
Opcional: treinar um modelo e convertê-lo para o formato ONNX
Os exemplos de código a seguir mostram como treinar um modelo de classificação com scikit-learn e como converter o pipeline resultante para o formato ONNX. Este tutorial usa um modelo de exemplo pré-criado armazenado em
gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
. Não é necessário concluir essas etapas se você estiver usando o modelo de amostra.Treinar um modelo de classificação com o scikit-learn
Use o exemplo de código a seguir para criar e treinar um pipeline do scikit-learn no conjunto de dados Iris. Para instruções sobre como instalar e usar o scikit-learn, consulte o guia de instalação do scikit-learn.
import numpy from sklearn.datasets import load_iris from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.ensemble import RandomForestClassifier data = load_iris() X = data.data[:, :4] y = data.target ind = numpy.arange(X.shape[0]) numpy.random.shuffle(ind) X = X[ind, :].copy() y = y[ind].copy() pipe = Pipeline([('scaler', StandardScaler()), ('clr', RandomForestClassifier())]) pipe.fit(X, y)
Converter o pipeline em um modelo ONNX
Use o exemplo de código a seguir em sklearn-onnx para converter o pipeline do scikit-learn em um modelo ONNX chamado
pipeline_rf.onnx
.from skl2onnx import convert_sklearn from skl2onnx.common.data_types import FloatTensorType # Disable zipmap as it is not supported in BigQuery ML. options = {id(pipe): {'zipmap': False}} # Define input features. scikit-learn does not store information about the # training dataset. It is not always possible to retrieve the number of features # or their types. That's why the function needs another argument called initial_types. initial_types = [ ('sepal_length', FloatTensorType([None, 1])), ('sepal_width', FloatTensorType([None, 1])), ('petal_length', FloatTensorType([None, 1])), ('petal_width', FloatTensorType([None, 1])), ] # Convert the model. model_onnx = convert_sklearn( pipe, 'pipeline_rf', initial_types=initial_types, options=options ) # And save. with open('pipeline_rf.onnx', 'wb') as f: f.write(model_onnx.SerializeToString())
Faça o upload do modelo ONNX para o Cloud Storage.
Depois de salvar o modelo, faça o seguinte:
crie um conjunto de dados
Crie um conjunto de dados do BigQuery para armazenar seu modelo de ML.
Console
bq
Para criar um novo conjunto de dados, utilize o comando
bq mk
com a sinalização--location
. Para obter uma lista completa de parâmetros, consulte a referência comandobq mk --dataset
.API
Chame o método
datasets.insert
com um recurso de conjunto de dados definido.{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.
Importar o modelo ONNX para o BigQuery
As etapas a seguir mostram como importar o modelo ONNX de exemplo do Cloud Storage usando uma instrução
CREATE MODEL
.Para importar o modelo do ONNX para seu conjunto de dados, selecione uma das seguintes opções:
Console
bq
BigQuery DataFrames
Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.
Importe o modelo usando o objeto
ONNXModel
.Para mais informações sobre como importar modelos ONNX para o BigQuery, incluindo requisitos de formato e armazenamento, consulte A instrução
CREATE MODEL
para importar modelos ONNX.Fazer previsões com o modelo ONNX importado
Depois de importar o modelo ONNX, use a função
ML.PREDICT
para fazer previsões com ele.A consulta nas etapas a seguir usa
imported_onnx_model
para fazer previsões com base nos dados de entrada da tabelairis
no conjunto de dados públicoml_datasets
. O modelo ONNX espera quatro valoresFLOAT
como entrada:Essas entradas correspondem às
initial_types
definidas quando você converteu o modelo para o formato ONNX.As saídas incluem as colunas
label
eprobabilities
, além das colunas da tabela de entrada.label
representa o rótulo de classe previsto.probabilities
é uma matriz de probabilidades que representa probabilidades para cada classe.Para fazer previsões com o modelo importado do TensorFlow, escolha uma das seguintes opções:
Console
bq
Execute a consulta que usa
ML.PREDICT
.bq query --use_legacy_sql=false \ 'SELECT * FROM ML.PREDICT( MODEL `example_dataset.imported_onnx_model`, (SELECT * FROM `bigquery-public-data.ml_datasets.iris`))'
BigQuery DataFrames
Antes de testar esta amostra, siga as instruções de configuração dos BigQuery DataFrames no Guia de início rápido do BigQuery: como usar os BigQuery DataFrames. Para mais informações, consulte a documentação de referência do BigQuery DataFrames.
Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local.
Use a função
predict
para executar o modelo remoto.O resultado será semelhante ao seguinte:
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
Console
gcloud
Excluir recursos individuais
Como alternativa, para remover os recursos individuais usados neste tutorial, faça o seguinte:
A seguir
- BigQuery Studio Admin (
Funções exigidas
Se você criar um projeto, será o proprietário dele e terá todas as permissões necessárias do Identity and Access Management (IAM) para concluir este tutorial.
Se você estiver usando um projeto atual, faça o seguinte: