モデルをデプロイする

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

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

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

始める前に

モデルをトレーニングした後、予測のために AI プラットフォームにデプロイする前に、重要な調整を行う必要があります。

カスタム予測ルーチン(ベータ版)を使用することにした場合は、カスタム予測ルーチンのガイドをご覧になり、Cloud Storage へのアップロードが必要な追加のアーティファクトおよびコードと、バージョンを作成する際に指定する追加のパラメータを把握してください。

モデルの Cloud Storage への保存

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

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

Cloud Storage バケットの設定

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

  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

    注: 使用するリージョンは、AI プラットフォーム ジョブを実行するリージョンと同一にしてください。この例では us-central1 を使用しています。「使ってみる」の説明でこのリージョンが使用されているためです。

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

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

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

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

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

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

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

は、

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

gsutil cp dist/my_custom_code-0.1.tar.gz gs://your-bucket/my_custom_code-0.1.tar.gz

この tarball を Cloud Storage のモデルファイルと同じディレクトリにアップロードできますが、必須ではありません。実際、それらを別々にしておくと、特にモデルとコードの多くのバージョンをデプロイする場合は、整理しやすいことがあります。

ローカル予測を使用したモデルのテスト

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

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

gcloud ai-platform local predict の使用に関する詳細をご覧ください。

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

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

    gcloud ai-platform local predict --model-dir=$MODEL_DIR \
        --json-instances $INPUT_FILE \
        --framework $FRAMEWORK
    

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

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

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

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

AI プラットフォームはモデルリソースを使用して、さまざまなバージョンのモデルを整理します。

Console

  1. GCP Console で AI プラットフォーム モデルのページを開きます。

    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 プラットフォーム モデル API をご覧ください。

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

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

  • name: AI プラットフォーム モデル内で一意にする必要があります。
  • deploymentUri: Cloud Storage 内の SavedModel ディレクトリへのパス。多くの場合、gs://your_bucket_name/job_20190321/export/1553208972357/ のようなタイムスタンプ付きのディレクトリとなります。

    カスタム予測ルーチンをデプロイしている場合は、すべてのモデル アーティファクトを含むモデル ディレクトリとなります。

  • framework: TENSORFLOW。カスタム予測ルーチンをデプロイしている場合は、このパラメータを省略します。

  • runtimeVersion: モデルに必要な TensorFlow のバージョンと他の依存関係に基づくランタイム バージョン。カスタム予測ルーチンをデプロイしている場合、1.4 以上である必要があります。

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

  • predictionClass(省略可): module_name.class_name フォーマットの Predictor クラスの名前。カスタム予測ルーチン(ベータ版)をデプロイしている場合にのみ、このパラメータを指定してください。

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

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

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

Console

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

    GCP Console でモデルを開く

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

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

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

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

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

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

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

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

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

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

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

gcloud

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

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

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

    カスタム予測ルーチン(ベータ版)の場合、FRAMEWORK 変数を省略し、カスタムコードの tarball と predictor クラスの名前へのパスを持つ追加の変数を設定します。

    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.13 \
      --framework $FRAMEWORK \
      --python-version=3.5
    

    カスタム予測ルーチン(ベータ版)の場合、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.13 \
      --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: TENSORFLOW
    machineType: mls1-highmem-1
    name: projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]
    pythonVersion: '3.5'
    runtimeVersion: '1.13'
    state: READY

REST API

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

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

次のステップ

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

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

TensorFlow 用 AI Platform