モデルのデプロイ

このページでは、Cloud ML Engine にモデルをデプロイして予測を取得する方法について説明します。

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

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

始める前に

  1. スタートガイドの手順に沿って開発環境を構成します。
  2. モデルをトレーニングし、以下に示す適切なファイル名を使用して保存します。

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

Cloud Storage にアップロードする保存済みモデルのファイル名は、使用したライブラリに応じて、model.pklmodel.joblibmodel.bst のいずれかにする必要があります。この制限により、Cloud ML Engine はエクスポート時と同じパターンを使用して、インポート時にモデルを再構築できます。

scikit-learn

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

XGBoost

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

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

モデルを Cloud Storage に保存する

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

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

Cloud Storage バケットの設定

このセクションでは、新しいバケットを作成する方法を説明します。既存のバケットを使用することもできますが、Cloud ML Engine の実行に使用するプロジェクトに属していないバケットの場合は、明示的に Cloud ML Engine サービス アカウントにアクセス権を付与する必要があります。

  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 環境変数を設定します。

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

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

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

    注: 使用するリージョンは、Cloud ML Engine ジョブを実行するリージョンと同一にしてください。この例では us-central1 を使用しています。スタートガイドの説明でこのリージョンが使用されているためです。

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

次のコマンドを実行して、保存したモデルファイルを Cloud Storage のバケットにアップロードします。

gsutil cp ./model.joblib gs://your_bucket/model.joblib

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

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

gcloud を使用して、ローカル予測用にモデルをデプロイできます。このオプションの手順を実行することにより、モデルを Cloud ML Engine にデプロイする前にモデルのサニティ チェックを行うことができます。これは時間を節約するのに役立ちます。Cloud Storage にアップロードしたモデルファイルを使用すると、オンライン予測をローカルで実行し、Cloud ML Engine 予測サーバーから返される結果のプレビューを取得できます。

トレーニング機能とサービング機能の不一致をデバッグするには、テストデータの小規模なサブセットを使用してローカル予測を行います。たとえば、予測リクエストで送信したデータがモデルでの想定と一致しない場合は、クラウドのオンライン予測リクエストのコストが発生する前に、そのことを検出できます。

詳しくは、gcloud local predict の使用法をご覧ください。

  1. モデル("gs://your-bucket/")、フレームワーク、入力ファイル名が含まれる、Cloud Storage ディレクトリ用の環境変数をまだ設定していない場合は、設定します。

    MODEL_DIR="gs://your-bucket/"
    INPUT_FILE="input.json"
    FRAMEWORK="SCIKIT_LEARN"
    
  2. 予測リクエストを送信します。

    gcloud ml-engine local predict --model-dir=$MODEL_DIR \
        --json-instances $INPUT_FILE \
        --framework $FRAMEWORK
    

モデルとバージョンのデプロイ

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

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

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

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

Console

  1. GCP Console で Cloud ML Engine モデルのページを開きます。

    GCP Console でモデルを開く

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

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

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

    3. [保存] をクリックします。

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

gcloud

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

    gcloud ml-engine 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"
        ]
      }
    

詳細については、Cloud ML Engine モデルの API をご覧ください。

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

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

  • name: Cloud ML Engine モデル内で一意にする必要があります。
  • deploymentUri: エクスポートされたモデルファイルが保存されているディレクトリのパス。モデルファイル自体のパスではなく、ファイルを含むディレクトリへのパスを指定してください。
    • モデルのパス - gs://your_bucket_name/model.pkl
    • モデルを含むディレクトリのパス - gs://your_bucket_name/
  • framework: SCIKIT_LEARN または XGBOOST
  • runtimeVersion: scikit-learn と XGBoost をサポートするため、Cloud ML Engine のバージョンを 1.4 以上に設定する必要があります。
  • pythonVersion: Python 3 でエクスポートされたモデルファイルと互換性を持たせるには、3.5 に設定します。設定しない場合、デフォルトで 2.7 になります。

パラメータの詳細については、バージョン リソース用の Cloud ML Engine API をご覧ください。

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

Console

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

    GCP Console でモデルを開く

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

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

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

  5. 必要であれば、オンライン予測を実行するマシンタイプを選択します。このフィールドのデフォルトは「シングルコア CPU」です。

  6. [モデル URI] フィールドに、モデルファイルをアップロードした Cloud Storage バケットの場所を入力します。[参照] ボタンを使用すると、正しいパスを見つけることができます。モデルファイル自体のパスではなく、ファイルを含むディレクトリへのパスを指定してください。たとえば、gs://your_bucket_name/model.pkl ではなく、gs://your_bucket_name/ を使用します。

  7. オンライン予測デプロイのスケーリング オプション(自動スケーリングまたは手動スケーリング)を選択します。

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

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

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

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

gcloud

  1. モデルバイナリが存在する Cloud Storage ディレクトリのパス、モデル名、バージョン名、フレームワーク(SCIKIT_LEARN または XGBOOST)を保存する環境変数を設定します。[VALUES_IN_BRACKETS] は適切な値に置き換えます。

      MODEL_DIR="gs://your_bucket_name/"
      VERSION_NAME="[YOUR-VERSION-NAME]"
      MODEL_NAME="[YOUR-MODEL-NAME]"
      FRAMEWORK="SCIKIT_LEARN"
    
  2. バージョンを作成します。

      gcloud ml-engine versions create $VERSION_NAME \
          --model $MODEL_NAME --origin $MODEL_DIR \
          --runtime-version=1.12 --framework $FRAMEWORK \
          --python-version=3.5
    

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

      Creating version (this might take a few minutes)......done.
    
  3. 新しいバージョンに関する情報を取得します。

      gcloud ml-engine versions describe $VERSION_NAME \
          --model $MODEL_NAME
    

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

      createTime: '2018-02-28T16:30:45Z'
      deploymentUri: gs://your_bucket_name
      framework: SCIKIT_LEARN
      machineType: mls1-highmem-1
      name: projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]
      pythonVersion: '3.5'
      runtimeVersion: '1.12'
      state: READY
    

REST API

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

      {
        "name": "[YOUR-VERSION-NAME]",
        "deploymentUri": "gs://your_bucket_name/"
        "runtimeVersion": "1.12"
        "framework": "SCIKIT_LEARN"
        "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.12", "framework": "SCIKIT_LEARN", "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.12",
            "framework": "SCIKIT_LEARN",
            "machineType": "mls1-highmem-1",
            "pythonVersion": "3.5"
          }
        }
      }
    

次のステップ

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

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

scikit-learn と XGBoost の Cloud ML Engine