このページでは、モデルを AI Platform Prediction にデプロイして予測を取得する方法を説明します。
トレーニング済みのモデルを AI Platform Prediction にデプロイするには、次の作業を行う必要があります。
- 保存済みモデルを Cloud Storage バケットにアップロードします。
- AI Platform Prediction のモデルリソースを作成します。
- AI Platform Prediction のバージョン リソースを作成し、保存済みモデルの Cloud Storage パスを指定します。
始める前に
機械学習モデルをトレーニングして、予測に使用するモデルのエクスポートのガイドに従って、AI Platform の予測にデプロイできるモデル アーティファクトを作成します。
モデルを 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 サービス アカウントへのアクセスを許可する必要があります。
-
新しいバケットに名前を指定します。名前は Cloud Storage のすべてのバケット全体で重複しないようにする必要があります。
BUCKET_NAME="YOUR_BUCKET_NAME"
たとえば、プロジェクト名に
-aiplatform
を追加したものを使います。PROJECT_ID=$(gcloud config list project --format "value(core.project)") BUCKET_NAME=${PROJECT_ID}-aiplatform
-
作成したバケット名を確認します。
echo $BUCKET_NAME
-
バケットのリージョンを選択して、
REGION
環境変数を設定します。AI Platform Prediction ジョブを実行する予定のリージョンと同じリージョンを使用してください。詳しくは、AI Platform Prediction サービスの利用可能なリージョンをご覧ください。
たとえば、次のコードは
REGION
を作成し、us-central1
に設定します。REGION=us-central1
-
新しいバケットを作成します。
gcloud storage buckets create gs://$BUCKET_NAME --location=$REGION
エクスポートしたモデルを Cloud Storage にアップロードする
次の例は、さまざまなタイプのモデル アーティファクトを Cloud Storage のモデル ディレクトリにアップロードする方法を示しています。
TensorFlow SavedModel
SAVED_MODEL_DIR=$(ls ./YOUR_EXPORT_DIR_BASE | tail -1)
gcloud storage cp $SAVED_MODEL_DIR gs://YOUR_BUCKET --recursive
SavedModel を tf.keras
から、または TensorFlow Estimator からエクスポートすると、YOUR_EXPORT_DIR_BASE/1487877383942
のように、選択したベース エクスポート ディレクトリのタイムスタンプ付きサブディレクトリとして保存されます。この例は、最新のタイムスタンプが付されたディレクトリをアップロードする方法を示しています。SavedModel を別の方法で作成した場合は、ローカル ファイルシステムの別の場所にある可能性があります。
scikit-learn または XGBoost モデルファイル
トレーニング済みモデルのエクスポート方法に応じて、model.joblib
ファイル、model.pkl
ファイル、または model.bst
ファイルをアップロードします。
次の例は、sklearn.externals.joblib
によってエクスポートされたファイルをアップロードする方法を示しています。
gcloud storage cp ./model.joblib gs://YOUR_BUCKET/model.joblib
次の例は、Python の pickle
モジュールによってエクスポートされたファイルをアップロードする方法を示しています。
gcloud storage cp ./model.pkl gs://YOUR_BUCKET/model.pkl
次の例は、xgboost.Booster
の save_model
メソッドによってエクスポートされたファイルをアップロードする方法を示しています。
gcloud storage cp ./model.bst gs://YOUR_BUCKET/model.bst
カスタム予測ルーチン(ベータ版)をデプロイしている場合は、追加モデル アーティファクトのすべてもモデル ディレクトリにアップロードします。
モデル ディレクトリの合計ファイルサイズは、レガシー(MLS1)マシンタイプを使用している場合は 500 MB 以下、Compute Engine(N1)マシンタイプを使用している場合は 10 GB 以下とする必要があります。詳細については、オンライン予測用のマシンタイプをご覧ください。
モデルの後続のバージョンを作成する場合は、Cloud Storage バケット内の個別のディレクトリに各バージョンを配置するようにします。
カスタムコードをアップロードする
カスタムコードを使用した scikit-learn パイプラインまたはカスタム予測ルーチンをデプロイしている場合、カスタムコードを含むソース配布パッケージもアップロードする必要があります。次に例を示します。
gcloud storage cp dist/my_custom_code-0.1.tar.gz gs://YOUR_BUCKET/my_custom_code-0.1.tar.gz
この tarball は、モデルファイルと同じ Cloud Storage のディレクトリにアップロードできますが、必須ではありません。実際、それらを別々にしておくと、特にモデルとコードの多くのバージョンをデプロイする場合は、整理しやすいことがあります。
ローカル予測でモデルをテストする
モデルを AI Platform Prediction にデプロイする前に、gcloud ai-platform local predict
コマンドを使用してモデルがどのように予測に対応するかをテストできます。このコマンドは、ローカル環境の依存関係を使用して予測を実行し、結果を gcloud ai-platform predict
オンライン予測を実行するときに使用されます。予測をローカルでテストすると、オンライン予測で費用が発生する前にエラーを見つけることができます。
--model-dir
引数で、エクスポートした機械学習モデルが含まれた、ローカルマシン上あるいは Cloud Storage 内のディレクトリを指定します。--framework
引数には、tensorflow
、scikit-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 はモデルリソースを使用して、さまざまなバージョンのモデルを整理します。
この段階で、このモデルに属するモデル バージョンがリージョン エンドポイントとグローバル エンドポイントのどちらを使用するかを決める必要があります。ほとんどの場合、リージョン エンドポイントを選択します。以前の(MLS1)マシンタイプでのみ使用できる機能が必要な場合は、グローバル エンドポイントを使用します。
また、このモデルに属するモデル バージョンで予測を行う際に、そのモデル バージョンでログをエクスポートするかどうかもこの段階で決める必要があります。次の例では、ロギングを有効にしていません。ロギングを有効にする方法については、こちらをご覧ください。
コンソール
Google Cloud コンソールで、AI Platform Prediction の [モデル] ページを開きます。
[モデル] ページの上部にある [新しいモデル] ボタンをクリックします。[モデルの作成] ページが表示されます。
一意のモデル名を、[モデル名] フィールドに入力します。
[リージョン エンドポイントを使用する] チェックボックスがオンの場合、AI Platform Prediction はリージョン エンドポイントを使用します。代わりにグローバル エンドポイントを使用するには、[リージョン エンドポイントを使用する] チェックボックスをオフにします。
[リージョン] プルダウン リストで、予測ノードのロケーションを選択します。使用可能なリージョンは、リージョン エンドポイントとグローバル エンドポイントのどちらを使用するかによって異なります。
[作成] をクリックします。
[モデル] ページに戻り、新しいモデルがリストに表示されていることを確認してください。
gcloud
リージョン エンドポイント
次のコマンドを実行します。
gcloud ai-platform models create MODEL_NAME \
--region=REGION
以下のように置き換えます。
- MODEL_NAME: モデルに付ける名前。
- REGION: 予測ノードを実行するリージョン エンドポイントのリージョン。Compute Engine(N1)マシンタイプをサポートしているリージョンである必要があります。
--region
フラグを指定しない場合、gcloud CLI のプロンプトが表示され、リージョン エンドポイントを選択するか、グローバル エンドポイントで us-central
を使用するように指示されます。
また、特定のリージョンに ai_platform/region
プロパティを設定すると、--region
フラグを指定していない場合であっても、gcloud CLI で常に AI Platform Prediction 対応のリージョン エンドポイントが使用されるようになります(この構成は、gcloud ai-platform operations
コマンド グループのコマンドには適用されません)。
グローバル エンドポイント
次のコマンドを実行します。
gcloud ai-platform models create MODEL_NAME \
--regions=REGION
以下のように置き換えます。
- MODEL_NAME: モデルに付ける名前。
- REGION: 予測ノードを実行するグローバル エンドポイントのリージョン。以前の(MLS1)マシンタイプをサポートしているリージョンである必要があります。
--regions
フラグを指定しない場合、gcloud CLI のプロンプトが表示され、リージョン エンドポイントを選択するか、グローバル エンドポイントで us-central1
を使用するように指示されます。
REST API
リージョン エンドポイント
リクエスト本文にモデル オブジェクトを配置して、リクエストの形式を整えます。少なくとも、次のサンプルの MODEL_NAME を置き換えてモデルの名前を指定します。
{ "name": "MODEL_NAME" }
PROJECT_ID を Google Cloud プロジェクト ID に置き換えた次の URL に対して REST API 呼び出しを実行します。
POST https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models/
以下のように置き換えます。
REGION: モデルをデプロイするリージョン エンドポイントのリージョン。Compute Engine(N1)マシンタイプをサポートしているリージョンである必要があります。
PROJECT_ID: Google Cloud プロジェクト ID
たとえば、
curl
コマンドを使用して次のリクエストを行えます。このコマンドでは、インストールされている Google Cloud CLI に関連付けられた認証情報を使用してリクエストを承認します。curl -X POST -H "Content-Type: application/json" \ -d '{"name": "MODEL_NAME"}' \ -H "Authorization: Bearer `gcloud auth print-access-token`" \ "https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models"
API により、次のようなレスポンスが返されます。
{ "name": "projects/PROJECT_ID/models/MODEL_NAME", "regions": [ "REGION" ] }
グローバル エンドポイント
リクエスト本文にモデル オブジェクトを配置して、リクエストの形式を整えます。少なくとも、次のサンプルの MODEL_NAME を置き換えてモデルの名前を指定し、REGION を従来の(MLS1)マシンタイムをサポートするリージョンに置き換えてリージョンを指定します。
{ "name": "MODEL_NAME", "regions": ["REGION"] }
PROJECT_ID を Google Cloud プロジェクト ID に置き換えた次の URL に対して REST API 呼び出しを実行します。
POST https://ml.googleapis.com/v1/projects/PROJECT_ID/models/
たとえば、
curl
コマンドを使用して次のリクエストを行えます。このコマンドでは、インストールされている Google Cloud CLI に関連付けられた認証情報を使用してリクエストを承認します。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
:TENSORFLOW
、SCIKIT_LEARN
、またはXGBOOST
。カスタム予測ルーチンをデプロイしている場合は、このパラメータを省略します。runtimeVersion
: モデルに必要な依存関係に基づくランタイム バージョン。scikit-learn モデル、XGBoost モデル、またはカスタム予測ルーチンをデプロイしている場合、バージョンは 1.4 以降でなければなりません。バッチ予測にこのモデル バージョンを使用する場合は、ランタイム バージョン 2.1 以前を使用する必要があります。packageUris
(省略可): Cloud Storage 内のカスタムコード配布パッケージ(.tar.gz
ファイル)のパスのリスト。このパラメータは、カスタムコードを使用した scikit-learn パイプライン(ベータ版)またはカスタム予測ルーチン(ベータ版)をデプロイしている場合にのみ指定します。predictionClass
(省略可): 予測子クラスの名前(module_name.class_name
形式)。このパラメータは、カスタム予測ルーチン(ベータ版)をデプロイしている場合にのみ指定します。serviceAccount
(省略可): モデル バージョンが予測の実行中に Google Cloud リソースにアクセスする場合、アクセスに使用するサービス アカウントを指定できます。詳しくは、サービス アカウントの指定をご覧ください。このパラメータは、カスタム コンテナまたはカスタム予測ルーチンを使用している場合にのみ指定します。pythonVersion
: Python 3 を使用してエクスポートされたモデルファイルとの互換性を持たせるには、3.5(ランタイム バージョン 1.4~1.14)または 3.7(ランタイム バージョン 1.15 以降)に設定する必要があります。ランタイム バージョン 1.15 以前で使用する場合は「2.7」に設定することもできます。machineType
(省略可): AI Platform Prediction が予測を提供するノードに使用する仮想マシンの種類。詳細については、マシンタイプをご覧ください。設定しない場合、デフォルトでリージョン エンドポイントにn1-standard-2
、グローバル エンドポイントにmls1-c1-m2
が設定されます。
これらの各パラメータの詳細と、あまり一般的でないその他のパラメータについては、バージョン リソースの API リファレンスをご覧ください。
また、モデルをリージョン エンドポイントで作成した場合は、必ず同じリージョン エンドポイントでバージョンを作成してください。
コンソール
Google Cloud コンソールで、AI Platform Prediction の [モデル] ページを開きます。
[モデル] ページで、バージョンの作成に使用するモデルリソースの名前を選択します。[モデルの詳細] ページが表示されます。
[モデルの詳細] ページの上部にある [新しいバージョン] ボタンをクリックします。[バージョンの作成] ページが表示されます。
[名前] フィールドにバージョン名を入力します。必要に応じて、[説明] フィールドにバージョンの説明を入力します。
対応するプルダウン ボックスに、モデルのトレーニング方法に関連する次の情報を入力します。
- モデルのトレーニングに使用した Python のバージョンを選択します。
- フレームワークとフレームワーク バージョンを選択します。カスタム予測ルーチン(ベータ版)をデプロイしている場合は、[フレームワーク] で [カスタム予測ルーチン(ベータ版)] を選択します。
- ML ランタイムのバージョンを選択します。詳しくは、AI Platform Prediction のランタイム バージョンをご覧ください。
オンライン予測を行うマシンタイプを選択します。
[モデル URI] フィールドに、モデルファイルをアップロードした Cloud Storage バケットの場所を入力します。[参照] ボタンを使用すると、正しいパスを見つけることができます。
モデルファイル自体のパスではなく、ファイルを含むディレクトリへのパスを指定してください。たとえば、
gs://your_bucket_name/model-dir/saved_model.pb
やgs://your_bucket_name/model-dir/model.pkl
ではなくgs://your_bucket_name/model-dir/
を使用します。カスタムコードを使用した scikit-learn パイプライン(ベータ版)またはカスタム予測ルーチン(ベータ版)をデプロイする場合は、[カスタムコードと依存関係] で Cloud Storage 内のカスタムコード パッケージ(
.tar.gz
)のパスを指定します。カスタム予測ルーチンをデプロイする場合は、[予測クラス] フィールドで予測子クラスの名前を入力します。オンライン予測デプロイの [スケーリング] オプションを選択します。
自動スケーリングを選択すると、オプションの [ノードの最小数] フィールドが表示されます。サービスがスケールダウンしたときにも稼働し続けるノードの最小数を入力できます。
手動スケーリングを選択すると、常に稼働し続ける [ノードの数] を入力する必要があります。
マシンタイプごとのスケーリング オプションの違いについては、こちらをご覧ください。
Prediction の料金については、こちらをご覧ください。
モデル バージョンの作成を終了するには、[保存] をクリックします。
gcloud
モデルバイナリが配置されている Cloud Storage ディレクトリへのパス、モデル名、バージョン名、使用するフレームワークを格納する環境変数を設定します。
gcloud CLI を使用してバージョンを作成する場合、フレームワーク名の入力には大文字とアンダースコアを使用することも(例:
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]"
カスタムコードを使用した scikit-learn パイプライン(ベータ版)の場合、カスタムコード tarball のパスを格納する追加の変数を設定します。
MODEL_DIR="gs://your_bucket_name/" VERSION_NAME="[YOUR-VERSION-NAME]" MODEL_NAME="[YOUR-MODEL-NAME]" FRAMEWORK="scikit-learn" CUSTOM_CODE_PATH="gs://your_bucket_name/my_custom_code-0.1.tar.gz"
カスタム予測ルーチン(ベータ版)の場合、
FRAMEWORK
変数を省略し、カスタムコード tarball のパスを格納する変数と、予測子クラスの名前を格納する変数を追加で設定します。MODEL_DIR="gs://your_bucket_name/" VERSION_NAME="[YOUR-VERSION-NAME]" MODEL_NAME="[YOUR-MODEL-NAME]" CUSTOM_CODE_PATH="gs://your_bucket_name/my_custom_code-0.1.tar.gz" PREDICTOR_CLASS="[MODULE_NAME].[CLASS_NAME]"
バージョンを作成します。
gcloud ai-platform versions create $VERSION_NAME \ --model=$MODEL_NAME \ --origin=$MODEL_DIR \ --runtime-version=2.11 \ --framework=$FRAMEWORK \ --python-version=3.7 \ --region=REGION \ --machine-type=MACHINE_TYPE
以下のように置き換えます。
REGION: モデルを作成したリージョン エンドポイントのリージョン。グローバル エンドポイントにモデルを作成した場合、
--region
フラグは省略します。MACHINE_TYPE: マシンタイプ。予測ノードで使用できるコンピューティング リソースを指定します。
カスタムコードを使用した scikit-learn パイプライン(ベータ版)の場合、
gcloud beta
コンポーネントを使用し、--package-uris
フラグを設定します。カスタムコードをデプロイするには、グローバル エンドポイントを使用する必要があります。gcloud components install beta gcloud beta ai-platform versions create $VERSION_NAME \ --model=$MODEL_NAME \ --origin=$MODEL_DIR \ --runtime-version=2.11 \ --framework=$FRAMEWORK \ --python-version=3.7 \ --machine-type=mls1-c1-m2 \ --package-uris=$CUSTOM_CODE_PATH
カスタム予測ルーチン(ベータ版)の場合、
gcloud beta
コンポーネントを使用し、--framework
フラグを省略して--package-uris
フラグと--prediction-class
フラグを設定します。カスタムコードをデプロイするには、グローバル エンドポイントを使用する必要があります。gcloud components install beta gcloud beta ai-platform versions create $VERSION_NAME \ --model=$MODEL_NAME \ --origin=$MODEL_DIR \ --runtime-version=2.11 \ --python-version=3.7 \ --machine-type=mls1-c1-m2 \ --package-uris=$CUSTOM_CODE_PATH \ --prediction-class=$PREDICTOR_CLASS
バージョンの作成には数分かかります。完了すると次の出力が表示されます。
Creating version (this might take a few minutes)......done.
新しいバージョンに関する情報を取得します。
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: '2.11' state: READY
REST API
リクエスト本文の形式を整え、バージョン オブジェクトを追加します。次の例では、バージョンの
name
、deploymentUri
、runtimeVersion
、framework
、machineType
を指定しています。[VALUES_IN_BRACKETS]
は適切な値に置き換えます。{ "name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "2.11", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.7", "machineType": "[YOUR_MACHINE_TYPE]" }
[VALUES_IN_BRACKETS]
を適切な値に置き換えた次のパスに対して REST API 呼び出しを実行します。POST https://REGION-ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions
REGION は、モデルを作成したリージョン エンドポイントのリージョンに置き換えます。グローバル エンドポイントにモデルを作成した場合は、
ml.googleapis.com
を使用します。たとえば、
curl
コマンドを使用して次のリクエストを行えます。curl -X POST -H "Content-Type: application/json" \ -d '{"name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "2.11", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.7", "machineType": "[YOUR_MACHINE_TYPE]"}' \ -H "Authorization: Bearer `gcloud auth print-access-token`" \ "https://REGION-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": "2.11", "framework": "[YOUR_FRAMEWORK_NAME]", "machineType": "[YOUR_MACHINE_TYPE]", "pythonVersion": "3.7" } } }