XGBoost によるオンライン予測の取得

このサンプルでは、国勢調査所得データセットに基づいて所得水準を予測する簡単なモデルをトレーニングします。モデルをローカルでトレーニングして保存したら、AI Platform Prediction にデプロイしてクエリでオンライン予測を取得します。

このコンテンツは、GitHub にも Jupyter ノートブックとして公開されています。

AI Platform Prediction にモデルを公開する方法

AI Platform Prediction にモデルを公開して予測を取得するには、次の 5 つのステップを行います。

  • モデルをファイルに保存する。
  • 保存したモデルを Cloud Storage にアップロードする。
  • AI Platform Prediction にモデルリソースを作成する。
  • モデル バージョンを作成して、保存したモデルをリンクする。
  • オンライン予測を行う。

始める前に

次の操作を行って GCP アカウントを設定し、AI Platform Prediction API を有効にします。さらに、Cloud SDK をインストールして有効にします。

GCP プロジェクトの設定

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

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

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

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

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

  4. AI Platform Training & Prediction and Compute Engine API を有効にします。

    API を有効にする

  5. Cloud SDK をインストールし、初期化します

環境の設定

以下のいずれかのオプションを選択して、macOS のローカル環境または Cloud Shell のリモート環境を設定します。

macOS の場合、以下の [MACOS] タブで環境を設定することをおすすめします。[CLOUD SHELL] タブに表示される Cloud Shell は、macOS、Linux、Windows で使用できます。Cloud Shell は、AI Platform Prediction の機能を試すような場合には便利ですが、継続的な開発作業には適していません。

macOS

  1. Python のインストールを確認する
    Python がインストールされていることを確認します。されていない場合はインストールします。

    python -V
  2. pip のインストールを確認する
    pip は、Python のパッケージ マネージャーであり、Python の現在のバージョンに含まれています。次のコマンドを実行して、pip がすでにインストールされているかどうかを確認します。pip --version。インストールされていない場合は、pip のインストール方法をご覧ください。

    次のコマンドを使用すると、pip をアップグレードできます。

    pip install -U pip

    詳細については、pip のドキュメントをご覧ください。

  3. virtualenv をインストールする
    virtualenv は隔離された Python 環境を作成するツールです。次のコマンドを実行して、virtualenv がすでにインストールされているかどうかを確認します。virtualenv --version。インストールされていない場合は、virtualenv をインストールします。

    pip install --user --upgrade virtualenv

    このガイド用に隔離された開発環境を作成するために、virtualenv で新しい仮想環境を作成します。たとえば、次のコマンドは、cmle-env という名前の環境をアクティブにします。

    virtualenv cmle-env
    source cmle-env/bin/activate
  4. このチュートリアルでは、仮想環境内で残りのコマンドを実行します。

    virtualenv の使用方法の詳細をご覧ください。virtualenv を終了するには、deactivate を実行します。

Cloud Shell

  1. Google Cloud Console を開きます。

    Google Cloud Console

  2. コンソール ウィンドウの上部にある「Cloud Shell をアクティブにする」ボタンをクリックします。

    Google Cloud Shell の有効化

    コンソールの下部の新しいフレーム内で Cloud Shell セッションが開き、コマンドライン プロンプトが表示されます。シェル セッションが初期化されるまで、数秒かかる場合があります。

    Cloud Shell セッション

    Cloud Shell セッションが使用できる状態になります。

  3. 選択したプロジェクトを使用するように gcloud コマンドライン ツールを構成します。

    gcloud config set project [selected-project-id]

    ここで、[selected-project-id] はプロジェクト ID ですID を囲んでいる角かっこは不要です。

フレームワークをインストールする

macOS

仮想環境内で次のコマンドを実行して、AI Platform Prediction ランタイム バージョン 1.15 で使用する scikit-learn、XGBoost、pandas をインストールします。

(cmle-env)$ pip install scikit-learn==0.20.2 xgboost==0.81 pandas==0.24.0

上記のコマンドでバージョン番号を指定して、仮想環境内の依存関係とランタイム バージョン内の依存関係を一致させます。これにより、AI Platform Prediction でコードを実行中に予期せぬ動作が起こらないようにします。

インストール オプションやトラブルシューティング情報などの詳細については、各フレームワークのインストール手順をご覧ください。

Cloud Shell

次のコマンドを実行して、scikit-learn、XGBoost、pandas をインストールします。

pip install --user scikit-learn xgboost pandas

インストール オプションやトラブルシューティング情報などの詳細については、各フレームワークのインストール手順をご覧ください。

データをダウンロードする

このサンプルでトレーニングに使用している国勢調査所得データセットは、UC Irvine Machine Learning Repository でホストされています。詳しくは、データについてをご覧ください。

  • トレーニング ファイルは adult.data です
  • 評価ファイルは adult.test です

モデルのトレーニングと保存

モデルをトレーニングして保存するには、次の手順を完了します。

  1. pandas DataFrame にデータを読み込み、XGBoost で使用できるように準備します。
  2. XGBoost で単純なモデルをトレーニングします。
  3. AI Platform Prediction にアップロード可能なファイルにモデルを保存します。

アップロードするモデルのトレーニングが完了している場合は、モデルをエクスポートする方法をご覧ください。

データを読み込んで変換する

このステップでは、トレーニング用のデータセットとテスト用のデータセットを pandas DataFrame に読み込み、カテゴリデータを数値特徴に変換して、モデルで使用する準備を行います。

import json
import numpy as np
import os
import pandas as pd
import pickle
import xgboost as xgb
from sklearn.preprocessing import LabelEncoder

# these are the column labels from the census data files
COLUMNS = (
    'age',
    'workclass',
    'fnlwgt',
    'education',
    'education-num',
    'marital-status',
    'occupation',
    'relationship',
    'race',
    'sex',
    'capital-gain',
    'capital-loss',
    'hours-per-week',
    'native-country',
    'income-level'
)

# categorical columns contain data that need to be turned into numerical
# values before being used by XGBoost
CATEGORICAL_COLUMNS = (
    'workclass',
    'education',
    'marital-status',
    'occupation',
    'relationship',
    'race',
    'sex',
    'native-country'
)

# load training set
with open('./census_data/adult.data', 'r') as train_data:
    raw_training_data = pd.read_csv(train_data, header=None, names=COLUMNS)
# remove column we are trying to predict ('income-level') from features list
train_features = raw_training_data.drop('income-level', axis=1)
# create training labels list
train_labels = (raw_training_data['income-level'] == ' >50K')

# load test set
with open('./census_data/adult.test', 'r') as test_data:
    raw_testing_data = pd.read_csv(test_data, names=COLUMNS, skiprows=1)
# remove column we are trying to predict ('income-level') from features list
test_features = raw_testing_data.drop('income-level', axis=1)
# create training labels list
test_labels = (raw_testing_data['income-level'] == ' >50K.')

# convert data in categorical columns to numerical values
encoders = {col:LabelEncoder() for col in CATEGORICAL_COLUMNS}
for col in CATEGORICAL_COLUMNS:
    train_features[col] = encoders[col].fit_transform(train_features[col])
for col in CATEGORICAL_COLUMNS:
    test_features[col] = encoders[col].fit_transform(test_features[col])

モデルをトレーニングしてエクスポートする

モデルをエクスポートするには、Booster オブジェクトの save_model メソッド、または Python pickle ライブラリを使用できます。

# load data into DMatrix object
dtrain = xgb.DMatrix(train_features, train_labels)
dtest = xgb.DMatrix(test_features)

# train XGBoost model
bst = xgb.train({}, dtrain, 20)
bst.save_model('./model.bst')

モデルファイルの命名規則

Cloud Storage にアップロードした保存されたモデルのファイルの名前は、使用したライブラリに応じて、model.pklmodel.joblib、または model.bst のいずれかにしてください。この制限により、AI Platform Prediction はエクスポート時と同じパターンを使用して、インポート時にモデルを再構築できます。

モデルのエクスポートに使用するライブラリ 正しいモデル名
pickle model.pkl
sklearn.exeternals.joblib model.joblib
xgboost.Booster model.bst

モデルを今後繰り返し利用する場合は、それぞれの新しいモデルに専用のディレクトリが存在するよう Cloud Storage バケットを整理してください。

モデルを Cloud Storage に保存する

このチュートリアルでは、AI Platform Prediction に使用しているのと同じプロジェクトで専用の Cloud Storage バケットを使用する方法が最も簡単です。

別のプロジェクトのバケットを使用している場合は、AI Platform Prediction サービス アカウントで Cloud Storage のモデルにアクセスできるようにする必要があります。適切な権限がないと、AI Platform Prediction モデル バージョンの作成リクエストが失敗します。詳しくは、ストレージの権限の付与をご覧ください。

Cloud Storage バケットの設定

このセクションでは、新しいバケットの作成方法を説明します。既存のバケットを使用することもできますが、AI Platform ジョブを実行する予定のリージョンと同じリージョンにある必要があります。また、AI Platform Prediction を実行するプロジェクトに含まれていない場合は、明示的に AI Platform Prediction サービス アカウントへのアクセスを許可する必要があります

  1. 新しいバケットに名前を指定します。名前は Cloud Storage のすべてのバケット全体で重複しないようにする必要があります。

    BUCKET_NAME="your_bucket_name"

    たとえば、プロジェクト名に -aiplatform を追加したものを使います。

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    BUCKET_NAME=${PROJECT_ID}-aiplatform
  2. 作成したバケット名を確認します。

    echo $BUCKET_NAME
  3. バケットのリージョンを選択して、REGION 環境変数を設定します。

    AI Platform Prediction ジョブを実行する予定のリージョンと同じリージョンを使用してください。詳しくは、AI Platform Prediction サービスの利用可能なリージョンをご覧ください。

    たとえば、次のコードは REGION を作成し、us-central1 に設定します。

    REGION=us-central1
  4. 新しいバケットを作成します。

    gsutil mb -l $REGION gs://$BUCKET_NAME

エクスポートしたモデルファイルを Cloud Storage にアップロードする

次のコマンドを使用して、このチュートリアルの前半でエクスポートしたモデルを Cloud Storage バケットにアップロードします。

gsutil cp ./model.bst gs://$BUCKET_NAME/model.bst

複数のモデルファイルに同じ Cloud Storage バケットを使用できます。それぞれのモデルファイルは、バケット内の独自のディレクトリに配置する必要があります。

予測で使用するデータのフォーマット

オンライン予測のリクエストを送信する前に、AI Platform Prediction 予測サービスで使用できるようにテストデータをフォーマットする必要があります。入力インスタンスの形式は、モデルの想定と一致させる必要があります。

gcloud

1 行に 1 つの入力インスタンスを記述して input.json ファイルを作成します。次の例では、上の手順で定義した test_features リストにある最初の 10 個のデータ インスタンスを使用します。

    [25, "Private", 226802, "11th", 7, "Never-married", "Machine-op-inspct", "Own-child", "Black", "Male", 0, 0, 40, "United-States"]
    [38, "Private", 89814, "HS-grad", 9, "Married-civ-spouse", "Farming-fishing", "Husband", "White", "Male", 0, 0, 50, "United-States"]
    [28, "Local-gov", 336951, "Assoc-acdm", 12, "Married-civ-spouse", "Protective-serv", "Husband", "White", "Male", 0, 0, 40, "United-States"]
    [44, "Private", 160323, "Some-college", 10, "Married-civ-spouse", "Machine-op-inspct", "Husband", "Black", "Male", 7688, 0, 40, "United-States"]
    [18, "?", 103497, "Some-college", 10, "Never-married", "?", "Own-child", "White", "Female", 0, 0, 30, "United-States"]
    [34, "Private", 198693, "10th", 6, "Never-married", "Other-service", "Not-in-family", "White", "Male", 0, 0, 30, "United-States"]
    [29, "?", 227026, "HS-grad", 9, "Never-married", "?", "Unmarried", "Black", "Male", 0, 0, 40, "United-States"]
    [63, "Self-emp-not-inc", 104626, "Prof-school", 15, "Married-civ-spouse", "Prof-specialty", "Husband", "White", "Male", 3103, 0, 32, "United-States"]
    [24, "Private", 369667, "Some-college", 10, "Never-married", "Other-service", "Unmarried", "White", "Female", 0, 0, 40, "United-States"]
    [55, "Private", 104996, "7th-8th", 4, "Married-civ-spouse", "Craft-repair", "Husband", "White", "Male", 0, 0, 10, "United-States"]

入力インスタンスの形式は、モデルの想定と一致させる必要があります。この例では、Census モデルに 14 個の特徴が必要なため、入力は形状の行列(num_instances, 14)でなければなりません。

REST API

1 行に 1 つの入力インスタンスを記述して input.json ファイルを作成します。次の例では、上の手順で定義した test_features リストにある最初の 10 個のデータ インスタンスを使用します。

{
  "instances": [

    [25, "Private", 226802, "11th", 7, "Never-married", "Machine-op-inspct", "Own-child", "Black", "Male", 0, 0, 40, "United-States"],
    [38, "Private", 89814, "HS-grad", 9, "Married-civ-spouse", "Farming-fishing", "Husband", "White", "Male", 0, 0, 50, "United-States"],
    [28, "Local-gov", 336951, "Assoc-acdm", 12, "Married-civ-spouse", "Protective-serv", "Husband", "White", "Male", 0, 0, 40, "United-States"],
    [44, "Private", 160323, "Some-college", 10, "Married-civ-spouse", "Machine-op-inspct", "Husband", "Black", "Male", 7688, 0, 40, "United-States"],
    [18, "?", 103497, "Some-college", 10, "Never-married", "?", "Own-child", "White", "Female", 0, 0, 30, "United-States"],
    [34, "Private", 198693, "10th", 6, "Never-married", "Other-service", "Not-in-family", "White", "Male", 0, 0, 30, "United-States"],
    [29, "?", 227026, "HS-grad", 9, "Never-married", "?", "Unmarried", "Black", "Male", 0, 0, 40, "United-States"],
    [63, "Self-emp-not-inc", 104626, "Prof-school", 15, "Married-civ-spouse", "Prof-specialty", "Husband", "White", "Male", 3103, 0, 32, "United-States"],
    [24, "Private", 369667, "Some-college", 10, "Never-married", "Other-service", "Unmarried", "White", "Female", 0, 0, 40, "United-States"],
    [55, "Private", 104996, "7th-8th", 4, "Married-civ-spouse", "Craft-repair", "Husband", "White", "Male", 0, 0, 10, "United-States"]
  ]
}

入力インスタンスの形式は、モデルの想定と一致させる必要があります。この例では、Census モデルに 14 個の特徴が必要なため、入力は形状の行列(num_instances, 14)でなければなりません。

詳細については、オンライン予測の入力形式をご覧ください。

ローカル予測でモデルをテストする

モデルを AI Platform Prediction にデプロイする前に、gcloud ai-platform local predict コマンドを使用してモデルがどのように予測に対応するかをテストできます。このコマンドは、ローカル環境の依存関係を使用して予測を実行し、結果を gcloud ai-platform predict オンライン予測を実行するときに使用されます。予測をローカルでテストすると、オンライン予測で費用が発生する前にエラーを見つけることができます。

--model-dir 引数で、エクスポートした機械学習モデルが含まれた、ローカルマシン上あるいは Cloud Storage 内のディレクトリを指定します。--framework 引数には、tensorflowscikit-learn、または xgboost を指定します。gcloud ai-platform local predict コマンドをカスタム予測ルーチンで使用することはできません。

次の例は、ローカル予測を実行する方法を示しています。

gcloud ai-platform local predict --model-dir local-or-cloud-storage-path-to-model-directory/ \
  --json-instances local-path-to-prediction-input.json \
  --framework name-of-framework

モデルとバージョンをデプロイする

AI Platform Prediction は、モデルリソースとバージョン リソースを使用してトレーニング済みモデルを整理します。AI Platform Prediction モデルは、機械学習モデルの複数のバージョンを格納するコンテナに相当します。

モデルをデプロイするには、AI Platform Prediction でモデルリソースを作成し、そのモデルのバージョンを作成して Cloud Storage に格納されたモデルファイルにリンクします。

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

AI Platform Prediction はモデルリソースを使用して、さまざまなバージョンのモデルを整理します。

Console

  1. Cloud Console で AI Platform Prediction の [モデル] ページを開きます。

    Cloud Console でモデルを開く

  2. [モデル] ページの上部にある [新しいモデル] ボタンをクリックします。[モデルの作成] ページが表示されます。

  3. モデルの一意の名前を [モデル名] フィールドに入力します。[リージョン] プルダウン リストを使用して、予測ノードのロケーションを選択します。

  4. [作成] をクリックします。

  5. [モデル] ページに戻り、新しいモデルがリストに表示されていることを確認します。

gcloud

次のコマンドで、MODEL_NAME を目的のモデルの名前に置き換えます。REGION を、予測ノードを実行するリージョンに置き換えます。オンライン予測をサポートするリージョンを選択する必要があります。

gcloud ai-platform models create MODEL_NAME \
  --regions REGION

このコマンドは、グローバル エンドポイントにモデルを作成します。あるいは、リージョン エンドポイントにモデルを作成することもできます。

REST API

グローバル エンドポイントにモデルを作成するには、次の手順を行います。リージョン エンドポイントでモデルを作成することもできます。

  1. リクエスト本文にモデル オブジェクトを配置して、リクエストの形式を整えます。少なくとも、次のサンプルの MODEL_NAME を置き換えてモデルの名前を指定し、REGIONオンライン予測をサポートするリージョンに置き換えてリージョンを指定します。

    {
      "name": "MODEL_NAME",
      "regions": ["REGION"]
    }
    
  2. PROJECT_ID を Google Cloud プロジェクト ID に置き換えて、REST API で次のパスを呼び出します。

    POST https://ml.googleapis.com/v1/projects/PROJECT_ID/models/
    

    たとえば、cURL を使用して次のリクエストを行うことができます。

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "MODEL_NAME", "regions": ["REGION"]}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://ml.googleapis.com/v1/projects/PROJECT_ID/models"
    

    API により、次のようなレスポンスが返されます。

    {
      "name": "projects/PROJECT_ID/models/MODEL_NAME",
      "regions": [
        "REGION"
      ]
    }
    

詳細については、AI Platform Prediction モデル API をご覧ください。

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

これで、Cloud Storage にアップロードされたトレーニング済みのモデルでモデル バージョンを作成する準備が整いました。バージョンを作成するときに、いくつかのパラメータを指定できます。一般的なパラメータを次に示します。一部は必須のパラメータです。

  • name: AI Platform Prediction モデル内で一意にする必要があります。
  • deploymentUri: Cloud Storage のモデル ディレクトリのパス。

    • TensorFlow モデルをデプロイしている場合、これは SavedModel ディレクトリです。
    • scikit-learn または XGBoost モデルをデプロイしている場合は、model.joblib ファイル、model.pkl ファイル、または model.bst ファイルが格納されているディレクトリです。
    • カスタム予測ルーチンをデプロイしている場合、これはすべてのモデル アーティファクトが格納されたディレクトリです。このディレクトリの合計サイズは 500 MB 以下にする必要があります。
  • framework: TENSORFLOWSCIKIT_LEARN、または XGBOOST

  • runtimeVersion: モデルに必要な依存関係に基づくランタイム バージョン。scikit-learn モデルまたは XGBoost モデルをデプロイしている場合は 1.4 以上である必要があります。

  • pythonVersion: Python 3 を使用してエクスポートされたモデルファイルとの互換性を持たせるには、3.5(ランタイム バージョン 1.4~1.14)または 3.7(ランタイム バージョン 1.15 以降)に設定する必要があります。ランタイム バージョン 1.15 以前で使用する場合は「2.7」に設定することもできます。

  • machineType(省略可): AI Platform 予測が予測を提供するノードに使用する仮想マシンの種類。詳細については、マシンタイプをご覧ください。設定しない場合、デフォルトで mls1-c1-m2 になります。

これらの各パラメータの詳細と、あまり一般的でないその他のパラメータについては、バージョン リソースの API リファレンスをご覧ください。

また、モデルをリージョン エンドポイントで作成した場合は、必ず同じリージョン エンドポイントでバージョンを作成してください。

Console

  1. [モデル] ページで、バージョンの作成に使用するモデルリソースの名前を選択します。[モデルの詳細] ページが表示されます。

    Cloud Console でモデルを開く

  2. [モデルの詳細] ページの上部にある [新しいバージョン] ボタンをクリックします。[バージョンの作成] ページが表示されます。

  3. [名前] フィールドにバージョン名を入力します。必要に応じて、[説明] フィールドにバージョンの説明を入力します。

  4. 対応するプルダウン ボックスに、モデルのトレーニング方法に関連する次の情報を入力します。

    • モデルのトレーニングに使用した Python のバージョンを選択します。
    • フレームワークフレームワーク バージョンを選択します。
    • ML ランタイムのバージョンを選択します。詳しくは、AI Platform Prediction のランタイム バージョンをご覧ください。
  5. 必要であれば、オンライン予測を実行するマシンタイプを選択します。このフィールドのデフォルトは「シングルコア CPU」です。

  6. [モデル URI] フィールドに、モデルファイルをアップロードした Cloud Storage バケットの場所を入力します。[参照] ボタンを使用すると、正しいパスを見つけることができます。

    モデルファイル自体のパスではなく、ファイルを含むディレクトリへのパスを指定してください。たとえば、gs://your_bucket_name/model-dir/saved_model.pbgs://your_bucket_name/model-dir/model.pkl ではなく gs://your_bucket_name/model-dir/ を使用します。

  7. オンライン予測デプロイの [スケーリング] オプションを選択します。

    • 自動スケーリングを選択すると、オプションの [ノードの最小数] フィールドが表示されます。サービスがスケールダウンしたときにも稼働し続けるノードの最小数を入力できます。このフィールドのデフォルトは 0 です。

    • 手動スケーリングを選択すると、常に稼働し続ける [ノードの数] を入力する必要があります。

      詳細については、予測費用の料金をご覧ください。

  8. モデル バージョンの作成を終了するには、[保存] をクリックします。

gcloud

  1. モデルバイナリが配置されている Cloud Storage ディレクトリへのパス、モデル名、バージョン名、使用するフレームワークを格納する環境変数を設定します。

    gcloud ツールを使用してバージョンを作成する場合、フレームワーク名の入力には大文字とアンダースコアを使用することも(例: SCIKIT_LEARN)、小文字とハイフンを使用することもできます(例: scikit-learn)。どちらのオプションを使用するのでも同じ動作になります。

    [VALUES_IN_BRACKETS] は適切な値に置き換えます。

    MODEL_DIR="gs://your_bucket_name/"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    MODEL_NAME="[YOUR-MODEL-NAME]"
    FRAMEWORK="[YOUR-FRAMEWORK_NAME]"
    

  2. バージョンを作成します。

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

    バージョンの作成には数分かかります。完了すると次の出力が表示されます。

    Creating version (this might take a few minutes)......done.

  3. 新しいバージョンに関する情報を取得します。

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

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

    createTime: '2018-02-28T16:30:45Z'
    deploymentUri: gs://your_bucket_name
    framework: [YOUR-FRAMEWORK-NAME]
    machineType: mls1-c1-m2
    name: projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]
    pythonVersion: '3.7'
    runtimeVersion: '1.15'
    state: READY

REST API

  1. リクエスト本文の形式を整え、バージョン オブジェクトを追加します。次の例は、バージョン namedeploymentUriruntimeVersionframework を指定します。[VALUES_IN_BRACKETS] を適切な値と置き換えます。

      {
        "name": "[YOUR-VERSION-NAME]",
        "deploymentUri": "gs://your_bucket_name/"
        "runtimeVersion": "1.15"
        "framework": "[YOUR_FRAMEWORK_NAME]"
        "pythonVersion": "3.7"
      }
    
  2. 次のパスに対する REST API 呼び出しを行います。[VALUES_IN_BRACKETS] は適切な値に置き換えます。

      POST https://ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions
    

    たとえば、cURL を使用して次のリクエストを行うことができます。

        curl -X POST -H "Content-Type: application/json" \
          -d '{"name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "1.15", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.7"}' \
          -H "Authorization: Bearer `gcloud auth print-access-token`" \
          "https://ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions"
    

    バージョンの作成には数分かかります。完了すると次のような出力が表示されます。

      {
        "name": "projects/[YOUR-PROJECT-ID]/operations/create_[YOUR-MODEL-NAME]_[YOUR-VERSION-NAME]-[TIMESTAMP]",
        "metadata": {
          "@type": "type.googleapis.com/google.cloud.ml.v1.OperationMetadata",
          "createTime": "2018-07-07T02:51:50Z",
          "operationType": "CREATE_VERSION",
          "modelName": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]",
          "version": {
            "name": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]",
            "deploymentUri": "gs://your_bucket_name",
            "createTime": "2018-07-07T02:51:49Z",
            "runtimeVersion": "1.15",
            "framework": "[YOUR_FRAMEWORK_NAME]",
            "machineType": "mls1-c1-m2",
            "pythonVersion": "3.7"
          }
        }
      }
    

オンライン予測リクエストを送信する

バージョンが正常に作成されると、AI Platform Prediction が予測リクエストを処理する新しいサーバーを起動します。

gcloud

  1. モデル名、バージョン名、入力ファイル名を環境変数に設定します。[VALUES_IN_BRACKETS] を適切な値に置き換えます。

    MODEL_NAME="[YOUR-MODEL-NAME]"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    INPUT_FILE="input.json"
    
  2. 予測リクエストを送信します。

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

Python

このサンプルでは、Python クライアント ライブラリを使用して Census データセット全体に対する予測リクエストを送信し、最初の 10 個の結果を出力します。ライブラリの使用方法については、Python クライアント ライブラリをご覧ください。

[VALUES_IN_BRACKETS] を適切な値に置き換えます。

import googleapiclient.discovery

# Fill in your PROJECT_ID, VERSION_NAME and MODEL_NAME before running
# this code.

PROJECT_ID = [YOUR PROJECT_ID HERE]
VERSION_NAME = [YOUR VERSION_NAME HERE]
MODEL_NAME = [YOUR MODEL_NAME HERE]

service = googleapiclient.discovery.build('ml', 'v1')
name = 'projects/{}/models/{}'.format(PROJECT_ID, MODEL_NAME)
name += '/versions/{}'.format(VERSION_NAME)

response = service.projects().predict(
    name=name,
    body={'instances': data}
).execute()

if 'error' in response:
  print (response['error'])
else:
  online_results = response['predictions']

XGBoost の場合、結果は浮動小数点です。この場合、モデルに適したしきい値でブール値に変換する必要があります。例:

# convert floats to booleans
converted_responses = [x > 0.5 for x in online_results]

予測入力パラメータの詳細については、AI Platform Prediction API の予測リクエストの詳細をご覧ください。

データについて

このサンプルでトレーニングに使用している国勢調査所得データセットは、UC Irvine Machine Learning Repository でホストされています。

国勢調査データ転載元: Lichman, M.2013。UCI Machine Learning Repository http://archive.ics.uci.edu/ml。Irvine, CA: University of California, School of Information and Computer Science。このデータセットは、データセット ソース(http://archive.ics.uci.edu/ml)で指定される次の条件の下ですべてのユーザーが使用できるように公開されています。Google はこのデータセットを「現状有姿」で提供し、明示または黙示を問わず、いかなる保証も行いません。Google は、このデータセットの使用で、直接または間接の損害が発生したとしても一切の責任を負いません。

次のステップ