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 Trusted Cloud by S3NS:
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
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Verify that billing is enabled for your Trusted 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 Trusted 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 Trusted Cloud console, go to the IAM page.
Acessar o IAM - Selecione o projeto.
- Clique em Conceder acesso.
-
No campo Novos principais, insira seu identificador de usuário. Normalmente, é o identificador de um usuário em um pool de identidades de força de trabalho. Saiba mais em Representar usuários do pool de força de trabalho nas políticas do IAM, ou fale com seu administrador.
- Na lista Selecionar um papel, escolha um.
- Para conceder outros papéis, adicione-os clicando em Adicionar outro papel.
- 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 Trusted 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 Trusted 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 Trusted 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 Trusted 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: