モデルのデプロイ

このページでは、AI プラットフォームにモデルをデプロイして予測を取得する方法について説明します。

トレーニング済みのモデルを AI Platform にデプロイするには、次の作業を行う必要があります。

  • 保存済みモデルを Cloud Storage バケットにアップロードします。
  • AI Platform のモデルリソースを作成します。
  • AI Platform のバージョン リソースを作成し、保存済みモデルの Cloud Storage パスを指定します。

始める前に

機械学習モデルをトレーニングして、予測に使用するモデルのエクスポートのガイドに従って、AI Platform Prediction にデプロイできるモデル アーティファクトを作成します。

モデルを Cloud Storage に保存する

一般的には、AI Platform に使用しているのと同じプロジェクトで専用の Cloud Storage バケットを使用する方法が最も簡単です。

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

Cloud Storage バケットの設定

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

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

    BUCKET_NAME="your_bucket_name"

    たとえば、末尾に -mlengine を追加したプロジェクト名を使用します。

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

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

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

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

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

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

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

次の例は、さまざまなタイプのモデル アーティファクトを Cloud Storage のモデル ディレクトリにアップロードする方法を示しています。

TensorFlow SavedModel

SAVED_MODEL_DIR=$(ls ./your-export-dir-base | tail -1)
gsutil cp -r $SAVED_MODEL_DIR gs://your-bucket

SavedModel を tf.keras から、または TensorFlow Estimator からエクスポートすると、your-export-dir-base/1487877383942 のように、選択したベース エクスポート ディレクトリのタイムスタンプ付きサブディレクトリとして保存されます。この例は、最新のタイムスタンプが付されたディレクトリをアップロードする方法を示しています。SavedModel を別の方法で作成した場合は、ローカル ファイルシステムの別の場所にある可能性があります。

scikit-learn または XGBoost モデルファイル

トレーニング済みモデルのエクスポート方法に応じて、model.joblib ファイル、model.pkl ファイル、または model.bst ファイルをアップロードします。

次の例は、sklearn.externals.joblib によってエクスポートされたファイルをアップロードする方法を示しています。

gsutil cp ./model.joblib gs://your-bucket/model.joblib

次の例は、Python の pickle モジュールによってエクスポートされたファイルをアップロードする方法を示しています。

gsutil cp ./model.pkl gs://your-bucket/model.pkl

次の例は、xgboost.Boostersave_model メソッドによってエクスポートされたファイルをアップロードする方法を示しています。

gsutil cp ./model.bst gs://your-bucket/model.bst

カスタム予測ルーチン(ベータ版)をデプロイしている場合は、追加モデル アーティファクトのすべてもモデル ディレクトリにアップロードします。

モデル ディレクトリの合計ファイルサイズは、レガシー(MLS1)マシンタイプを使用している場合は 500 MB 以下、Compute Engine(N1)マシンタイプ(ベータ版)を使用している場合は 2 GB 以下でなければなりません。詳細については、オンライン予測用のマシンタイプをご覧ください。

モデルの後続のバージョンを作成する場合は、Cloud Storage バケット内の個別のディレクトリに各バージョンを配置するようにします。

カスタムコードをアップロードする

カスタムコードを使用した scikit-learn パイプラインまたはカスタム予測ルーチンをデプロイしている場合、カスタムコードを含むソース配布パッケージもアップロードする必要があります。例:

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

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

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

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

Console

  1. GCP Console で AI Platform モデルのページを開きます。

    GCP Console でモデルを開く

  2. 必要に応じて、新しいバージョンを追加するモデルを作成します。

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

    2. モデルの一意の名前を [モデル名] ボックスに入力します。必要に応じて、[説明] フィールドにモデルの説明を入力します。

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

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

gcloud

モデル バージョン用のモデルリソースを作成します。モデルの名前を(角かっこなしで)入力します。

gcloud ai-platform models create "[YOUR-MODEL-NAME]"

REST API

  1. リクエスト本文にモデル オブジェクトを配置して、リクエストの形式を整えます。少なくとも、モデルの名前を指定する必要があります。モデルの名前を(角かっこなしで)入力します。

    {"name": "[YOUR-MODEL-NAME]"}
    
  2. 次のパスに対する REST API 呼び出しを行います。[VALUES_IN_BRACKETS] は適切な値に置き換えます。

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

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

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "[YOUR-MODEL-NAME]"}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models"
    

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

    {
      "name": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]",
      "regions": [
        "us-central1"
      ]
    }
    

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

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

これで、Cloud Storage にアップロードされたトレーニング済みのモデルでモデル バージョンを作成する準備が整いました。バージョンを作成するには、次のパラメータを指定します。

  • name: AI Platform モデル内で一意にする必要があります。
  • 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 以降でなければなりません。

  • packageUris(省略可): Cloud Storage 内のカスタムコード配布パッケージ(.tar.gz ファイル)のパスのリスト。このパラメータは、カスタムコードを使用した scikit-learn パイプライン(ベータ版)またはカスタム予測ルーチン(ベータ版)をデプロイしている場合にのみ指定します。

  • predictionClass(省略可): 予測子クラスの名前(module_name.class_name 形式)。このパラメータは、カスタム予測ルーチン(ベータ版)をデプロイしている場合にのみ指定します。

  • serviceAccount(省略可): モデル バージョンが予測の実行中に GCP リソースにアクセスする場合、アクセスに使用するサービス アカウントを指定できます。詳しくは、サービス アカウントの指定をご覧ください。このパラメータは、カスタム予測ルーチン(ベータ版)をデプロイしている場合にのみ指定します。

  • pythonVersion: Python 3 でエクスポートされたモデルファイルと互換性を持たせるには、3.5 に設定する必要があります。設定しない場合、デフォルトで 2.7 になります。

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

上記の各パラメータの詳細については、バージョン リソースの AI Platform トレーニングと Prediction API をご覧ください。

各ランタイム バージョンの詳細をご覧ください。

Console

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

    GCP Console でモデルを開く

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

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

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

    • モデルのトレーニングに使用した Python のバージョンを選択します。
    • フレームワークとフレームワーク バージョンを選択します。カスタム予測ルーチン(ベータ版)をデプロイしている場合は、[フレームワーク] で [カスタム予測ルーチン(ベータ版)] を選択します。
    • ML ランタイムのバージョンを選択します。詳細については、AI Platform のランタイム バージョンをご覧ください。
  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. カスタムコードを使用した scikit-learn パイプライン(ベータ版)またはカスタム予測ルーチン(ベータ版)をデプロイする場合は、[カスタムコードと依存関係] で Cloud Storage 内のカスタムコード パッケージ(.tar.gz)のパスを指定します。カスタム予測ルーチンをデプロイする場合は、[予測クラス] フィールドで予測子クラスの名前を入力します。

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

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

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

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

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

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]"
    

    カスタムコードを使用した 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]"
    
  2. バージョンを作成します。

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

    カスタムコードを使用した 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=1.14 \
      --framework $FRAMEWORK \
      --python-version=3.5
      --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=1.14 \
      --python-version=3.5
      --package-uris=$CUSTOM_CODE_PATH
      --prediction-class=$PREDICTOR_CLASS
    

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

    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.5'
    runtimeVersion: '1.14'
    state: READY

REST API

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

      {
        "name": "[YOUR-VERSION-NAME]",
        "deploymentUri": "gs://your_bucket_name/"
        "runtimeVersion": "1.14"
        "framework": "[YOUR_FRAMEWORK_NAME]"
        "pythonVersion": "3.5"
      }
    
  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.14", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.5"}' \
          -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.14",
            "framework": "[YOUR_FRAMEWORK_NAME]",
            "machineType": "mls1-c1-m2",
            "pythonVersion": "3.5"
          }
        }
      }
    

モデル バージョンのサービス アカウントを指定する

デフォルトでは、モデル バージョンをデプロイすると、Cloud ML サービス エージェント IAM 役割が設定された Google 管理サービス アカウントの権限が付与されます。このデフォルト サービス アカウントでほとんどのユースケースに十分対応できます。たとえば、同じ Google Cloud Platform プロジェクト内の Cloud Storage バケットからの読み取りなどが可能です。

ただし、カスタム予測ルーチンをデプロイして、モデル バージョンに異なる権限セットを設定する必要がある場合、別のサービス アカウントを使用するように指定できます。たとえば、モデル バージョンが予測中に別の GCP プロジェクトから Cloud Storage バケットにアクセスする必要がある場合は、そのバケットからの読み取りの権限が付与されたサービス アカウントを指定できます。

  1. モデル バージョンのサービス アカウントを作成または選択します。モデル バージョンをデプロイするユーザーには、サービス アカウントのサービス アカウント トークン作成者の役割が必要です。

  2. モデル バージョンを作成するときに、サービス アカウント名を serviceAccount フィールドで指定します。gcloud ツールを使用してモデルをデプロイする場合は、次の例のように --service-account フラグを使用できます。

    gcloud components install beta
    
    gcloud beta ai-platform versions create your-version-name \
      --service-account your-service-account-name@your-project-id.iam.gserviceaccount.com
      ...
    

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Google Cloud 機械学習ドキュメント