Eseguire previsioni con i modelli scikit-learn in formato ONNX


Questo tutorial mostra come importare un modello Open Neural Network Exchange (ONNX) addestrato con scikit-learn. Importa il modello in un set di dati BigQuery e lo utilizza per fare previsioni utilizzando una query SQL.

ONNX fornisce un formato uniforme progettato per rappresentare qualsiasi framework di machine learning (ML). Il supporto di BigQuery ML per ONNX ti consente di:

  • Addestra un modello utilizzando il tuo framework preferito.
  • Converti il modello nel formato ONNX.
  • Importa il modello ONNX in BigQuery ed esegui previsioni utilizzando BigQuery ML.

Obiettivi

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Trusted Cloud by S3NS:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

I nuovi utenti di Trusted Cloud potrebbero avere diritto a una prova gratuita.

Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per ulteriori informazioni, vedi Pulizia.

Prima di iniziare

  1. In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.

    Go to project selector

  2. Verify that billing is enabled for your Trusted Cloud project.

  3. Enable the BigQuery and Cloud Storage APIs.

    Enable the APIs

  4. Assicurati di disporre delle autorizzazioni necessarie per eseguire le attività descritte in questo documento.
  5. Ruoli obbligatori

    Se crei un nuovo progetto, ne sei il proprietario e ti vengono concesse tutte le autorizzazioni Identity and Access Management (IAM) necessarie per completare questo tutorial.

    Se utilizzi un progetto esistente, procedi nel seguente modo.

  6. Make sure that you have the following role or roles on the project:

    Check for the roles

    1. In the Trusted Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. 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.

    4. 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

    1. In the Trusted Cloud console, go to the IAM page.

      Vai a IAM
    2. Seleziona il progetto.
    3. Fai clic su Concedi l'accesso.
    4. Nel campo Nuove entità, inserisci il tuo identificatore utente. In genere, si tratta dell'identificatore di un utente in un pool di identità della forza lavoro. Per maggiori dettagli, vedi Rappresentare gli utenti del pool di forza lavoro nelle norme IAM o contatta l'amministratore.

    5. Nell'elenco Seleziona un ruolo, seleziona un ruolo.
    6. Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo aggiuntivo.
    7. Fai clic su Salva.
    8. Per saperne di più sulle autorizzazioni IAM in BigQuery, consulta Autorizzazioni IAM.

      (Facoltativo) Addestra un modello e convertilo nel formato ONNX

      I seguenti esempi di codice mostrano come addestrare un modello di classificazione con scikit-learn e come convertire la pipeline risultante nel formato ONNX. Questo tutorial utilizza un modello di esempio predefinito archiviato in gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx. Non devi completare questi passaggi se utilizzi il modello di esempio.

      Addestrare un modello di classificazione con scikit-learn

      Utilizza il seguente codice campione per creare e addestrare una pipeline scikit-learn sul set di dati Iris. Per istruzioni sull'installazione e l'utilizzo di scikit-learn, consulta la guida all'installazione di 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)
      

      Converti la pipeline in un modello ONNX

      Utilizza il seguente codice campione in sklearn-onnx per convertire la pipeline scikit-learn in un modello ONNX denominato 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())
      

      Carica il modello ONNX su Cloud Storage

      Dopo aver salvato il modello:

      Crea un set di dati

      Crea un set di dati BigQuery per archiviare il tuo modello ML.

      Console

      1. Nella console Trusted Cloud , vai alla pagina BigQuery.

        Vai alla pagina BigQuery

      2. Nel riquadro Explorer, fai clic sul nome del progetto.

      3. Fai clic su Visualizza azioni > Crea set di dati.

        L'opzione di menu Crea set di dati.

      4. Nella pagina Crea set di dati:

        • In ID set di dati, inserisci bqml_tutorial.

        • Per Tipo di località, seleziona Multi-regione e poi Stati Uniti (più regioni negli Stati Uniti).

        • Lascia invariate le restanti impostazioni predefinite e fai clic su Crea set di dati.

      bq

      Per creare un nuovo set di dati, utilizza il comando bq mk con il flag --location. Per un elenco completo dei possibili parametri, consulta la documentazione di riferimento del comando bq mk --dataset.

      1. Crea un set di dati denominato bqml_tutorial con la località dei dati impostata su US e una descrizione di BigQuery ML tutorial dataset:

        bq --location=US mk -d \
         --description "BigQuery ML tutorial dataset." \
         bqml_tutorial

        Anziché utilizzare il flag --dataset, il comando utilizza la scorciatoia -d. Se ometti -d e --dataset, il comando crea per impostazione predefinita un dataset.

      2. Verifica che il set di dati sia stato creato:

        bq ls

      API

      Chiama il metodo datasets.insert con una risorsa dataset definita.

      {
        "datasetReference": {
           "datasetId": "bqml_tutorial"
        }
      }

      BigQuery DataFrames

      Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames nella guida rapida di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.

      Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.

      import google.cloud.bigquery
      
      bqclient = google.cloud.bigquery.Client()
      bqclient.create_dataset("bqml_tutorial", exists_ok=True)

      Importa il modello ONNX in BigQuery

      I passaggi seguenti mostrano come importare il modello ONNX di esempio da Cloud Storage utilizzando un'istruzione CREATE MODEL.

      Per importare il modello ONNX nel set di dati, seleziona una delle seguenti opzioni:

      Console

      1. Nella console Trusted Cloud , vai alla pagina BigQuery Studio.

        Vai a BigQuery Studio

      2. Nell'editor di query, inserisci la seguente istruzione CREATE MODEL.

         CREATE OR REPLACE MODEL `bqml_tutorial.imported_onnx_model`
          OPTIONS (MODEL_TYPE='ONNX',
           MODEL_PATH='BUCKET_PATH')

        Sostituisci BUCKET_PATH con il percorso del modello che hai caricato su Cloud Storage. Se utilizzi il modello di esempio, sostituisci BUCKET_PATH con il seguente valore: gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx.

        Al termine dell'operazione, viene visualizzato un messaggio simile al seguente: Successfully created model named imported_onnx_model.

        Il nuovo modello viene visualizzato nel riquadro Risorse. I modelli sono indicati dall'icona del modello: L'icona del modello nel pannello Risorse Se selezioni il nuovo modello nel riquadro Risorse, le informazioni sul modello vengono visualizzate accanto all'editor query.

        Il riquadro informativo per `imported_onnx_model`

      bq

      1. Importa il modello ONNX da Cloud Storage inserendo la seguente istruzione 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')"

        Sostituisci BUCKET_PATH con il percorso del modello che hai caricato su Cloud Storage. Se utilizzi il modello di esempio, sostituisci BUCKET_PATH con il seguente valore: gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx.

        Al termine dell'operazione, viene visualizzato un messaggio simile al seguente: Successfully created model named imported_onnx_model.

      2. Dopo aver importato il modello, verifica che venga visualizzato nel set di dati.

        bq ls bqml_tutorial

        L'output è simile al seguente:

        tableId               Type
        --------------------- -------
        imported_onnx_model  MODEL

      BigQuery DataFrames

      Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames nella guida rapida di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.

      Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.

      Importa il modello utilizzando l'oggetto ONNXModel.

      import bigframes
      from bigframes.ml.imported import ONNXModel
      
      bigframes.options.bigquery.project = PROJECT_ID
      # You can change the location to one of the valid locations: https://cloud.google.com/bigquery/docs/locations#supported_locations
      bigframes.options.bigquery.location = "US"
      
      imported_onnx_model = ONNXModel(
          model_path="gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx"
      )

      Per ulteriori informazioni sull'importazione di modelli ONNX in BigQuery, inclusi i requisiti di formato e archiviazione, consulta l'istruzione CREATE MODEL per l'importazione di modelli ONNX.

      Fare previsioni con il modello ONNX importato

      Dopo aver importato il modello ONNX, utilizza la funzione ML.PREDICT per fare previsioni con il modello.

      La query nei passaggi successivi utilizza imported_onnx_model per fare previsioni utilizzando i dati di input della tabella iris nel set di dati pubblico ml_datasets. Il modello ONNX prevede quattro valori FLOAT come input:

      • sepal_length
      • sepal_width
      • petal_length
      • petal_width

      Questi input corrispondono a initial_types definiti durante la conversione del modello in formato ONNX.

      Gli output includono le colonne label e probabilities e le colonne della tabella di input. label rappresenta l'etichetta della classe prevista. probabilities è un array di probabilità che rappresentano le probabilità per ogni classe.

      Per fare previsioni con il modello TensorFlow importato, scegli una delle seguenti opzioni:

      Console

      1. Vai alla pagina BigQuery Studio.

        Vai a BigQuery Studio

      2. Nell'editor di query, inserisci questa query che utilizza la funzione ML.PREDICT.

        SELECT *
          FROM ML.PREDICT(MODEL `bqml_tutorial.imported_onnx_model`,
            (
            SELECT * FROM `bigquery-public-data.ml_datasets.iris`
            )
        )

        I risultati della query sono simili ai seguenti:

        L'output della query ML.PREDICT

      bq

      Esegui la query che utilizza 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

      Prima di provare questo esempio, segui le istruzioni di configurazione di BigQuery DataFrames nella guida rapida di BigQuery che utilizza BigQuery DataFrames. Per ulteriori informazioni, consulta la documentazione di riferimento di BigQuery DataFrames.

      Per eseguire l'autenticazione in BigQuery, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, vedi Configurare ADC per un ambiente di sviluppo locale.

      Utilizza la funzione predict per eseguire il modello remoto.

      import bigframes.pandas as bpd
      
      df = bpd.read_gbq("bigquery-public-data.ml_datasets.iris")
      predictions = imported_onnx_model.predict(df)
      predictions.peek(5)

      Il risultato è simile al seguente:

      L'output della funzione predict

      Esegui la pulizia

      Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

      Elimina il progetto

      Console

      1. In the Trusted Cloud console, go to the Manage resources page.

        Go to Manage resources

      2. In the project list, select the project that you want to delete, and then click Delete.
      3. In the dialog, type the project ID, and then click Shut down to delete the project.

      gcloud

      1. In the Trusted Cloud console, go to the Manage resources page.

        Go to Manage resources

      2. In the project list, select the project that you want to delete, and then click Delete.
      3. In the dialog, type the project ID, and then click Shut down to delete the project.

      Elimina singole risorse

      In alternativa, per rimuovere le singole risorse utilizzate in questo tutorial:

      1. Elimina il modello importato.

      2. (Facoltativo) Elimina il set di dati.

      Passaggi successivi