このチュートリアルでは、scikit-learn でトレーニングされた Open Neural Network Exchange(ONNX)モデルをインポートする方法について説明します。モデルを BigQuery データセットにインポートし、SQL クエリを使用して予測を行います。
ONNX は、任意の ML フレームワークを表すように設計された統一された形式を提供します。ONNX に対する BigQuery ML サポートにより、次のことが可能になります。
- 使い慣れたフレームワークを使用してモデルをトレーニングします。
- モデルを ONNX 形式に変換します。
- ONNX モデルを BigQuery にインポートし、BigQuery ML を使用して予測を行います。
目標
- scikit-learn を使用してモデルを作成してトレーニングします。
- sklearn-onnx を使用してモデルを ONNX 形式に変換します。
CREATE MODEL
ステートメントを使用して、ONNX モデルを BigQuery にインポートします。ML.PREDICT
関数を使用して、インポートした ONNX モデルで予測を行います。
料金
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and Cloud Storage APIs.
- このドキュメントのタスクを実行するために必要な権限が付与されていることを確認します。
必要なロール
新しいプロジェクトを作成すると、そのプロジェクトのオーナーになります。また、このチュートリアルの完了に必要な Identity and Access Management(IAM)権限がすべて付与されます。
既存のプロジェクトを使用している場合は、次の操作を行います。
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
省略可: モデルをトレーニングして ONNX 形式に変換する
次のコードサンプルは、scikit-learn で分類モデルをトレーニングする方法と、生成されたパイプラインを ONNX 形式に変換する方法を示しています。このチュートリアルでは、gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
に保存されている事前構築済みのサンプルモデルを使用します。サンプルモデルを使用している場合は、これらの手順を完了する必要はありません。
scikit-learn で分類モデルをトレーニングする
次のサンプルコードを使用して、Iris データセットで scikit-learn パイプラインを作成してトレーニングします。scikit-learn のインストールと使用方法については、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)
パイプラインを ONNX モデルに変換する
sklearn-onnx の次のサンプルコードを使用して、scikit-learn パイプラインを pipeline_rf.onnx
という名前の 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())
ONNX モデルを Cloud Storage にアップロードする
モデルを保存したら、次の操作を行います。
- モデルを保存する Cloud Storage バケットを作成します。
- ONNX モデルを Cloud Storage バケットにアップロードします。
データセットを作成する
ML モデルを保存する BigQuery データセットを作成します。
Console
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
「アクションを表示」> [データセットを作成] をクリックします。
[データセットを作成する] ページで、次の操作を行います。
[データセット ID] に「
bqml_tutorial
」と入力します。[ロケーション タイプ] で [マルチリージョン] を選択してから、[US (米国の複数のリージョン)] を選択します。
一般公開データセットは
US
マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。- 残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。
bq
新しいデータセットを作成するには、--location
フラグを指定した bq mk
コマンドを使用します。使用可能なパラメータの一覧については、bq mk --dataset
コマンドのリファレンスをご覧ください。
データの場所を
US
、説明をBigQuery ML tutorial dataset
に設定して、bqml_tutorial
という名前のデータセットを作成します。bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
このコマンドでは、
--dataset
フラグの代わりに-d
ショートカットを使用しています。-d
と--dataset
を省略した場合、このコマンドはデフォルトでデータセットを作成します。データセットが作成されたことを確認します。
bq ls
API
定義済みのデータセット リソースを使用して datasets.insert
メソッドを呼び出します。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
ONNX モデルを BigQuery にインポートする
次の手順では、CREATE MODEL
ステートメントを使用して、Cloud Storage からサンプル ONNX モデルをインポートする方法を示します。
ONNX モデルをデータセットにインポートするには、次のいずれかのオプションを選択します。
Console
Google Cloud コンソールで [BigQuery Studio] ページに移動します。
クエリエディタで、次の
CREATE MODEL
ステートメントを入力します。CREATE OR REPLACE MODEL `bqml_tutorial.imported_onnx_model` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='BUCKET_PATH')
BUCKET_PATH
は、Cloud Storage にアップロードしたモデルのパスに置き換えます。サンプルモデルを使用している場合は、BUCKET_PATH
を次の値gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
に置き換えます。オペレーションが完了すると、
Successfully created model named imported_onnx_model
のようなメッセージが表示されます。新しいモデルが [リソース] パネルに表示されます。モデルにはモデルアイコン
がついています。[リソース] パネルで新しいモデルを選択すると、そのモデルに関する情報が [クエリエディタ] の横に表示されます。
bq
次の
CREATE MODEL
ステートメントを入力して、Cloud Storage から ONNX モデルをインポートします。bq query --use_legacy_sql=false \ "CREATE OR REPLACE MODEL `bqml_tutorial.imported_onnx_model` OPTIONS (MODEL_TYPE='ONNX', MODEL_PATH='BUCKET_PATH')"
BUCKET_PATH
は、Cloud Storage にアップロードしたモデルのパスに置き換えます。サンプルモデルを使用している場合は、BUCKET_PATH
を次の値gs://cloud-samples-data/bigquery/ml/onnx/pipeline_rf.onnx
に置き換えます。オペレーションが完了すると、
Successfully created model named imported_onnx_model
のようなメッセージが表示されます。モデルをインポートしたら、モデルがデータセットに表示されていることを確認します。
bq ls bqml_tutorial
出力は次のようになります。
tableId Type --------------------- ------- imported_onnx_model MODEL
BigQuery DataFrames
このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
ONNXModel
オブジェクトを使用してモデルをインポートします。
形式やストレージの要件など、ONNX モデルを BigQuery にインポートする方法については、ONNX モデルをインポートする CREATE MODEL
ステートメントをご覧ください。
インポートした ONNX モデルを使用して予測を行う
ONNX モデルをインポートしたら、ML.PREDICT
関数を使用してモデルで予測を行います。
次の手順のクエリでは、imported_onnx_model
を使用して、ml_datasets
一般公開データセットの iris
テーブルの入力データから予測を行います。ONNX モデルは、4 つの FLOAT
値を入力として想定しています。
sepal_length
sepal_width
petal_length
petal_width
これらの入力は、モデルを ONNX 形式に変換したときに定義された initial_types
と一致します。
出力には、label
列と probabilities
列、入力テーブルの列が含まれます。label
は予測されたクラスラベルを表します。probabilities
は、各クラスの確率を表す配列です。
インポートした TensorFlow モデルで予測を行うには、次のいずれかのオプションを選択します。
Console
[BigQuery Studio] ページに移動します。
クエリエディタで、
ML.PREDICT
関数を使用する次のクエリを入力します。SELECT * FROM ML.PREDICT(MODEL `bqml_tutorial.imported_onnx_model`, ( SELECT * FROM `bigquery-public-data.ml_datasets.iris` ) )
クエリ結果は次のようになります。
bq
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
このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
predict
関数を使用して、リモートモデルを実行します。
次のような結果になります。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
Console
- 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.
gcloud
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
リソースを個別に削除する
または、このチュートリアルで使用した個々のリソースを削除するには、次の操作を行います。
省略可: データセットを削除します。
次のステップ
- ONNX モデルのインポートの詳細については、ONNX モデルの
CREATE MODEL
ステートメントをご覧ください。 - 利用可能な ONNX コンバータとチュートリアルの詳細については、ONNX 形式への変換をご覧ください。
- BigQuery ML の概要で BigQuery ML の概要を確認する。
- BigQuery ML の使用を開始するには、BigQuery ML で機械学習モデルを作成するをご覧ください。