Fazer previsões com modelos do scikit-learn no formato ONNX
O Open Neural Network Exchange (ONNX) fornece um formato uniforme projetado para representar qualquer framework de machine learning. O suporte do BigQuery ML para ONNX permite que você:
- Treine um modelo usando seu framework favorito.
- Converta o modelo no formato de modelo ONNX. Para mais informações, consulte Como converter para o formato ONNX.
- Importe o modelo ONNX para o BigQuery e faça previsões usando o BigQuery ML.
Neste tutorial, mostramos como importar modelos ONNX treinados com scikit-learn para um conjunto de dados do BigQuery e usá-los para fazer predições com base em uma consulta SQL. Importe modelos do ONNX usando estas interfaces:
- Console do Google Cloud
- o comando
bq query
na ferramenta de linha de comando bq; - API BigQuery
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.
Objetivos
Com este tutorial, você vai:
- Crie e treine modelos com o scikit-learn.
- Converta os modelos para o formato ONNX usando sklearn-onnx.
- Importe os modelos ONNX para o BigQuery e faça previsões.
Treinar um modelo de classificação com o scikit-learn
Crie e treine um pipeline do scikit-learn no conjunto de dados Iris:
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 modelo no formato ONNX e salvar
Use 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.
Crie um bucket do Cloud Storage para armazenar o arquivo de modelo ONNX e, em seguida, faça upload do arquivo de modelo ONNX salvo no bucket do Cloud Storage. Para mais informações, consulte Fazer upload de objetos de um sistema de arquivos.
Importar o modelo ONNX para o BigQuery
Esta etapa pressupõe que você fez upload do modelo ONNX para o bucket do Cloud Storage. Um modelo de exemplo é armazenado em gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
.
Console
No console do Google Cloud, acesse a página do BigQuery.
No editor de consultas, insira uma instrução
CREATE MODEL
como a seguinte.CREATE OR REPLACE MODEL `mydataset.mymodel` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='gs://bucket/path/to/onnx_model/*')
Exemplo:
CREATE OR REPLACE MODEL `example_dataset.imported_onnx_model` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx')
A consulta anterior importa o modelo ONNX localizado em
gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
como um modelo do BigQuery chamadoimported_onnx_model
.Agora, seu novo modelo aparecerá no painel Recursos. À medida que você expande cada um dos conjuntos de dados em um projeto, os modelos são listados junto a outros recursos do BigQuery nos conjuntos de dados. Os modelos são indicados pelo ícone do modelo: .
Se você selecionar o novo modelo no painel Recursos, as informações sobre o modelo serão exibidas abaixo do Editor de consultas.
bq
Para importar um modelo ONNX do Cloud Storage, execute uma consulta em lote inserindo um comando como este:
bq query \
--use_legacy_sql=false \
"CREATE MODEL
`mydataset.mymodel`
OPTIONS
(MODEL_TYPE='ONNX',
MODEL_PATH='gs://bucket/path/to/onnx_model/*')"
Exemplo:
bq query --use_legacy_sql=false \
"CREATE OR REPLACE MODEL
`example_dataset.imported_onnx_model`
OPTIONS
(MODEL_TYPE='ONNX',
MODEL_PATH='gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx')"
Depois de importar o modelo, ele deve aparecer na saída de bq ls [dataset_name]
:
$ bq ls example_dataset
tableId Type Labels Time Partitioning
--------------------- ------- -------- -------------------
imported_onnx_model MODEL
API
Insira um novo job e preencha a propriedade jobs#configuration.query como no corpo da solicitação a seguir:
{
"query": "CREATE MODEL project_id:mydataset.mymodel OPTIONS(MODEL_TYPE='ONNX' MODEL_PATH='gs://bucket/path/to/onnx_model/*')"
}
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
.
Fazer previsões com o modelo ONNX importado
Console
No console do Google Cloud, acesse a página do BigQuery.
No Editor de consultas, insira uma consulta usando
ML.PREDICT
(em inglês) da seguinte maneira.SELECT * FROM ML.PREDICT(MODEL
example_dataset.imported_onnx_model
, ( SELECT * FROMbigquery-public-data.ml_datasets.iris
) )A consulta anterior usa o modelo chamado
imported_onnx_model
no conjunto de dadosexample_dataset
no projeto atual para fazer predições de dados de entrada na tabela públicairis
do conjunto de dadosml_datasets
no projetobigquery-public-data
. . Nesse caso, o modelo ONNX espera quatro entradas flutuantes:sepal_length
,sepal_width
,petal_length
,petal_width
, que correspondem aoinitial_types
definido na etapa. 2, portanto, a subconsultaSELECT
de toda a tabelabigquery-public-data
, que contém essas quatro colunas de entrada.O modelo gera as colunas
label
eprobabilities
, bem como as colunas da tabela de entrada.label
representa o rótulo de classe previsto.probabilities
é uma matriz de probabilidades que representa probabilidades para cada classe.
O resultado é semelhante a este:
bq
Para fazer previsões a partir de dados de entrada na tabela input_data
, insira um
comando como este a seguir, usando o modelo importado
my_model
do ONNX:
bq query \
--use_legacy_sql=false \
'SELECT *
FROM ML.PREDICT(
MODEL `my_project.my_dataset.my_model`,
(SELECT * FROM input_data))'
Exemplo:
bq query \
--use_legacy_sql=false \
'SELECT *
FROM ML.PREDICT(
MODEL `example_dataset.imported_onnx_model`,
(SELECT * FROM `bigquery-public-data.ml_datasets.iris`))'
API
Insira um novo job e preencha a propriedade jobs#configuration.query como no corpo da solicitação a seguir:
{
"query": "SELECT * FROM ML.PREDICT(MODEL `my_project.my_dataset.my_model`, (SELECT * FROM input_data))"
}
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:
A seguir
- 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 como trabalhar com modelos, consulte estes recursos: