オンライン予測の BigQuery ML モデルをエクスポートする

このチュートリアルでは、BigQuery ML モデルをエクスポートしてから、AI Platform またはローカルマシンにモデルをデプロイする方法を説明します。BigQuery 一般公開データセットの iris テーブルを使用して、次のエンドツーエンドのシナリオを実施します。

  • ロジスティック回帰モデルのトレーニングとデプロイ。線形回帰、K 平均法、行列分解モデルにも適用されます。

費用

このチュートリアルでは、Google Cloud の課金対象となる以下のコンポーネントを使用します。

  • BigQuery ML
  • Cloud Storage
  • AI Platform(オプション。オンライン予測に使用)

BigQuery ML の費用の詳細については、BigQuery ML の料金ページをご覧ください。

Cloud Storage の費用の詳細については、Cloud Storage の料金ページをご覧ください。

AI Platform の費用の詳細については、予測ノードとリソース割り当てページをご覧ください。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Cloud Console のプロジェクト セレクタページで、Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud プロジェクトに対して課金が有効になっていることを確認します。 プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. 新しいプロジェクトでは、BigQuery が自動的に有効になります。既存のプロジェクトで BigQuery を有効にするには、 BigQuery API を有効にします。

    API を有効にする

    にアクセスします。
  5. AI Platform Training and Prediction API and Compute Engine API を有効にします。

    API を有効にする

  6. Google Cloud SDKgcloud コマンドライン ツールをインストールします。

データセットの作成

まず、ML モデルを格納する BigQuery データセットを作成します。データセットを作成するには、次の操作を行います。

  1. Google Cloud Console で、BigQuery ウェブ UI に移動します。

    BigQuery ウェブ UI に移動

  2. ナビゲーション パネルの [リソース] セクションで、プロジェクト名をクリックします。

  3. 右側の詳細パネルで、[データセットを作成] をクリックします。

    データセットを作成する

  4. [データセットを作成] ページで次の操作を行います。

    • [データセット ID] に「bqml_tutorial」を入力します。
    • [データのロケーション] で [米国(US)] を選択します。現在、一般公開データセットは US マルチ リージョン ロケーションに保存されています。わかりやすくするため、データセットを同じロケーションに配置します。

      データセットの作成ページ

  5. その他のデフォルト設定はすべてそのままにし、[データセットを作成] をクリックします。

ロジスティック回帰モデルのトレーニングとデプロイ

モデルのトレーニング

BigQuery ML の CREATE MODEL ステートメントを使用して Iris タイプを予測するロジスティック回帰モデルをトレーニングします。このトレーニング ジョブは約 1 分で完了します。

bq query --use_legacy_sql=false \
  'CREATE MODEL `bqml_tutorial.iris_model`
  OPTIONS (model_type="logistic_reg",
      max_iterations=10, input_label_cols=["species"])
  AS SELECT
    *
  FROM
    `bigquery-public-data.ml_datasets.iris`;'

モデルをエクスポートする

bq コマンドライン ツールを使用して、モデルを Cloud Storage バケットにエクスポートします。モデルをエクスポートするその他の方法については、BigQuery ML モデルのエクスポートをご覧ください。この抽出ジョブは 1 分以内に完了します。

bq extract -m bqml_tutorial.iris_model gs://some/gcs/path/iris_model

ローカルでのデプロイと提供

エクスポートした TensorFlow モデルは、TensorFlow Serving Docker コンテナを使用してデプロイできます。次のステップでは、Docker をインストールする必要があります。

エクスポートしたモデルファイルを一時ディレクトリにダウンロードする

mkdir tmp_dir
gsutil cp -r gs://some/gcs/path/iris_model tmp_dir

バージョン サブディレクトリを作成する

このステップでは、モデルのバージョン番号(この場合は 1)を設定します。

mkdir -p serving_dir/iris_model/1
cp -r tmp_dir/iris_model/* serving_dir/iris_model/1
rm -r tmp_dir

Docker イメージを pull する

docker pull tensorflow/serving

Docker コンテナを実行する

docker run -p 8500:8500 --network="host" --mount type=bind,source=`pwd`/serving_dir/iris_model,target=/models/iris_model -e MODEL_NAME=iris_model -t tensorflow/serving &

予測を実行する

curl -d '{"instances": [{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}]}' -X POST http://localhost:8501/v1/models/iris_model:predict

オンラインでのデプロイと提供

このセクションでは、gcloud コマンドライン ツールを使用して、エクスポートしたモデルに対してデプロイと予測を実行します。

オンライン / バッチ予測のためにモデルを AI Platform にデプロイする方法の詳細については、モデルのデプロイをご覧ください。

モデルリソースを作成する

MODEL_NAME="IRIS_MODEL"
gcloud ai-platform models create $MODEL_NAME

モデル バージョンを作成する

1)環境変数の設定

MODEL_DIR="gs://some/gcs/path/iris_model"
// Select a suitable version for this model
VERSION_NAME="v1"
FRAMEWORK="TENSORFLOW"

2)バージョンの作成

gcloud ai-platform versions create $VERSION_NAME --model=$MODEL_NAME --origin=$MODEL_DIR --runtime-version=1.15 --framework=$FRAMEWORK

このステップが完了するまで数分かかることがあります。Creating version (this might take a few minutes)...... というメッセージが表示されます。

3)(省略可)新しいバージョンに関する情報の取得

gcloud ai-platform versions describe $VERSION_NAME --model $MODEL_NAME

次のような出力が表示されます。

createTime: '2020-02-28T16:30:45Z'
deploymentUri: gs://your_bucket_name
framework: TENSORFLOW
machineType: mls1-c1-m2
name: projects/[YOUR-PROJECT-ID]/models/IRIS_MODEL/versions/v1
pythonVersion: '2.7'
runtimeVersion: '1.15'
state: READY

オンライン予測

デプロイされたモデルに対してオンライン予測を実行する方法についての詳細は、https://cloud.google.com/ai-platform/prediction/docs/online-predict#requesting_predictions をご覧ください。

1)入力用の改行区切りの JSON ファイルを作成する(例: 次の内容の instances.json ファイル)

{"sepal_length":5.0, "sepal_width":2.0, "petal_length":3.5, "petal_width":1.0}
{"sepal_length":5.3, "sepal_width":3.7, "petal_length":1.5, "petal_width":0.2}

2)予測用の環境変数を設定する

INPUT_DATA_FILE="instances.json"

3)予測を実行する

gcloud ai-platform predict --model $MODEL_NAME --version $VERSION_NAME --json-instances $INPUT_DATA_FILE

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

  • 作成したプロジェクトを削除する。
  • または、プロジェクトを保持し、データセットと Cloud Storage バケットを削除する。

Docker コンテナの停止

1)実行中のすべての Docker コンテナを一覧表示する。

docker ps

2)コンテナリストから該当するコンテナ ID のコンテナを停止する。

docker stop container_id

AI Platform リソースの削除

1)モデル バージョンを削除する。

gcloud ai-platform versions delete $VERSION_NAME --model=$MODEL_NAME

2)モデルを削除する。

gcloud ai-platform models delete $MODEL_NAME

データセットの削除

プロジェクトを削除すると、プロジェクト内のデータセットとテーブルがすべて削除されます。プロジェクトを再利用する場合は、このチュートリアルで作成したデータセットを削除できます。

  1. 必要に応じて、BigQuery ウェブ UI を開きます。

    BigQuery ウェブ UI に移動

  2. ナビゲーションで、作成した bqml_tutorial データセットをクリックします。

  3. ウィンドウの右側にある [データセットを削除] をクリックします。この操作を行うと、データセット、テーブル、すべてのデータが削除されます。

  4. [データセットの削除] ダイアログ ボックスでデータセットの名前(bqml_tutorial)を入力し、[削除] をクリックして確定します。

Cloud Storage バケットを削除する

プロジェクトを削除すると、プロジェクト内のすべての Cloud Storage バケットが削除されます。プロジェクトを再利用する場合は、このチュートリアルで作成したバケットを削除できます。

  1. Google Cloud Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. 削除するバケットのチェックボックスをオンにします。

  3. [削除] をクリックします。

  4. 上に重なったウィンドウで、[削除] をクリックして、バケットとそのコンテンツを削除することを確認します。

プロジェクトの削除

プロジェクトを削除するには:

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ