モデルのデプロイ

Cloud ML Engine でトレーニングしたモデルをクラウドでホストし、それらを使用して予測を取得することができます。このページでは、モデルをデプロイする方法を説明します。詳しい説明については、予測の概要ページを参照してください。

始める前に

モデル バージョンをデプロイするには、Google Cloud Storage に保存された TensorFlow SavedModel が必要になります。

次のようにしてモデルを取得できます。

  • Cloud ML Engine のトレーニング ステップに沿って、クラウドでトレーニングします。

  • 他の場所でトレーニングし、SavedModel にエクスポートします。

デプロイ パラメータの収集

モデルをデプロイするために必要なパラメータの詳細については、予測の概念ページを参照してください。

モデル バージョンの作成

モデルをデプロイする場合はモデル バージョンとしてデプロイします。開始する前に、Google Cloud Storage の場所に、トレーニング アーティファクトがあることが必要です。

Console

  1. Google Cloud Platform Console で Cloud ML Engine ページを開きます。

    Cloud Platform Console でモデルを開く

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

    1. [モデルを作成] をクリックします。

    2. モデルの名前を、[モデル名] ボックスに入力します。

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

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

  3. リストからモデルを選択します。

  4. [モデルの詳細] ページの [バージョン] の下で、[バージョンの作成] をクリックします。

  5. [バージョンの作成] ページ上のフォームに入力します。

    1. [名前] ボックスにモデル名を入力します。

    2. トレーニング アーティファクトへの Cloud Storage のパスを、[ソース] ボックスに入力します。

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

    4. [モデルの詳細] ページに戻り、新しいバージョンが [バージョン] リストに表示されていることを確認してください。

gcloud

  1. 必要な場合は、新しいバージョンをデプロイするモデルを作成します。

    gcloud ml-engine models create "model_name"
    
  2. 任意で次のコマンドを入力して Cloud Storage のパスを保存するための環境変数を設定します。

    DEPLOYMENT_SOURCE="bucket_path"
    
  3. バージョンを作成します。

    gcloud ml-engine versions create "version_name"\
        --model "model_name" --origin $DEPLOYMENT_SOURCE
    
  4. 新しいバージョンに関する情報を取得します。

    gcloud ml-engine versions describe "your_version_name" \
        --model "your_model_name"
    

    次のような出力が表示されるはずです。

    createTime: '2016-09-29T16:30:45Z'
    deploymentUri: gs://your_bucket_path
    isDefault: true
    name: projects/project_name/models/model_name/versions/version_name
    

Python

  1. 認証トークンを取得し、Google API クライアントから Cloud ML Engine API を使用するために必要なパッケージをインポートします。

    from oauth2client.client import GoogleCredentials
    from googleapiclient import discovery
    from googleapiclient import errors
    # Time is for waiting until the request finishes.
    import time
    
  2. プロジェクトおよびモデルの変数を、API に必要な形式(projects/project/models/model/versions/version)を使用して設定します。同様に、トレーニング アーティファクトを入れるストレージの場所のために変数を作成します。

    projectID = 'projects/{}'.format('project_name')
    modelName = 'model_name'
    modelID = '{}/models/{}'.format(projectID, modelName)
    versionName = 'version_name'
    versionDescription = 'version_description'
    trainedModelLocation = 'gs://bucket_path'
    
  3. アプリケーションのデフォルトの認証情報を取得し、Cloud ML Engine API の Python 表現を作成します。

    credentials = GoogleCredentials.get_application_default()
    ml = discovery.build('ml', 'v1', credentials=credentials)
    
  4. 必要に応じて、このバージョンが属するモデルを作成します。

    # Create a dictionary with the fields from the request body.
    requestDict = {'name': modelName,
        'description': 'Another model for testing.'}
    
    # Create a request to call projects.models.create.
    request = ml.projects().models().create(parent=projectID,
                                body=requestDict)
    
    # Make the call.
    try:
        response = request.execute()
    
        # Any additional code on success goes here (logging, etc.)
    
    except errors.HttpError as err:
        # Something went wrong, print out some information.
        print('There was an error creating the model.' +
            ' Check the details:')
        print(err._get_reason())
    
        # Clear the response for next time.
        response = None
    
  5. ジョブ リクエストの作成のバージョンのエントリによって、辞書を作成します。

    requestDict = {'name': versionName,
        'description': versionDescription,
        'deploymentUri': trainedModelLocation}
    
  6. リクエストを作成し、サービスコールを行ってバージョンを作成します。

    # Create a request to call projects.models.versions.create
    request = ml.projects().models().versions().create(parent=modelID,
                  body=requestDict)
    
    # Make the call.
    try:
        response = request.execute()
    
        # Get the operation name.
        operationID = response['name']
    
        # Any additional code on success goes here (logging, etc.)
    
    except errors.HttpError as err:
        # Something went wrong, print out some information.
        print('There was an error creating the version.' +
              ' Check the details:')
        print(err._get_reason())
    
        # Handle the exception as makes sense for your application.
    
  7. 作成オペレーションのステータスをモニタリングします。

    done = False
    request = ml.projects().operations().get(name=operationID)
    
    while not done:
        response = None
    
    # Wait for 300 milliseconds.
    time.sleep(0.3)
    
    # Make the next call.
    try:
        response = request.execute()
    
        # Check for finish.
        done = response.get('done', False)
    
    except errors.HttpError as err:
        # Something went wrong, print out some information.
        print('There was an error getting the operation.' +
              'Check the details:')
        print(err._get_reason())
        done = True
    

    この例では、バージョンの作成が完了するまで待ちますが、アプリケーションの処理をブロックしたくない場合もあるでしょう。

次のステップ

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

Cloud Machine Learning Engine(Cloud ML Engine)