オンライン予測用のマシンタイプの選択

AI Platform Prediction はノードを割り当てて、モデル バージョンに送信されるオンライン予測リクエストを処理します。モデル バージョンをデプロイする際に、AI Platform Prediction がノードに使用する仮想マシンのタイプをカスタマイズできます。

マシンタイプによって、次の点が異なります。

コンピューティング リソースの多いマシンタイプを選択すると、予測を処理する際のレイテンシの短縮や、同時に処理される予測リクエスト数の増加につながります。

使用可能なマシンタイプ

通常、オンライン予測にはデフォルトのマシンタイプ mls1-c1-m2 を使用できます。ベータ版として利用できる他のマシンタイプのいずれかを使用して、モデル バージョンをデプロイすることもできます。

次の表は、使用可能なマシンタイプを比較したものです。

名前 可用性 vCPU メモリ(GB) GPU のサポート ML フレームワークのサポート モデルの最大サイズ
mls1-c1-m2(デフォルト) 一般提供 1 2 × TensorFlow、XGBoost、scikit-learn(カスタムコードを使用するパイプラインを含む)、カスタム予測ルーチン 500 MB
mls1-c4-m2 ベータ版 4 2 × TensorFlow、XGBoost、scikit-learn(カスタムコードを使用するパイプラインを含む)、カスタム予測ルーチン 500 MB
n1-standard-2 ベータ版 2 7.5 TensorFlow、XGBoost、scikit-learn 2 GB
n1-standard-4 ベータ版 4 15 TensorFlow、XGBoost、scikit-learn 2 GB
n1-standard-8 ベータ版 8 30 TensorFlow、XGBoost、scikit-learn 2 GB
n1-standard-16 ベータ版 16 60 TensorFlow、XGBoost、scikit-learn 2 GB
n1-standard-32 ベータ版 32 120 TensorFlow、XGBoost、scikit-learn 2 GB
n1-highmem-2 ベータ版 2 13 TensorFlow、XGBoost、scikit-learn 2 GB
n1-highmem-4 ベータ版 4 26 TensorFlow、XGBoost、scikit-learn 2 GB
n1-highmem-8 ベータ版 8 52 TensorFlow、XGBoost、scikit-learn 2 GB
n1-highmem-16 ベータ版 16 104 TensorFlow、XGBoost、scikit-learn 2 GB
n1-highmem-32 ベータ版 32 208 TensorFlow、XGBoost、scikit-learn 2 GB
n1-highcpu-2 ベータ版 2 1.8 TensorFlow、XGBoost、scikit-learn 2 GB
n1-highcpu-4 ベータ版 4 3.6 TensorFlow、XGBoost、scikit-learn 2 GB
n1-highcpu-8 ベータ版 8 7.2 TensorFlow、XGBoost、scikit-learn 2 GB
n1-highcpu-16 ベータ版 16 14.4 TensorFlow、XGBoost、scikit-learn 2 GB
n1-highcpu-32 ベータ版 32 28.8 TensorFlow、XGBoost、scikit-learn 2 GB

マシンタイプごとの料金をご覧ください。Compute Engine(N1)マシンタイプの仕様の詳細については、Compute Engine のドキュメントをご覧ください。

マシンタイプの指定

モデル バージョンを作成する際に、マシンタイプを指定できます。マシンタイプを指定しない場合、モデル バージョンはノードにデフォルトの mls1-c1-m2 を使用します。

次の手順で、モデル バージョンの作成時にマシンタイプを指定する方法を説明します。手順では例として mls1-c4-m2 マシンタイプを使用します。モデル バージョンを作成するプロセス全体については、モデルのデプロイガイドをご覧ください。

Cloud Console

[バージョンの作成] ページで [マシンタイプ] プルダウン リストを開き、[AI Platform のマシンタイプ] > [クアッドコア CPU(ベータ版)] を選択します。

gcloud

Cloud Storage にモデル アーティファクトをアップロードしてモデルリソースを作成した後、mls1-c4-m2 マシンタイプを使用するモデル バージョンを、gcloud コマンドライン ツールのベータ版コンポーネントを使って作成できます。

gcloud beta ai-platform versions create version_name \
  --model model_name \
  --origin gs://model-directory-uri \
  --runtime-version 2.1 \
  --python-version 3.7 \
  --framework ml-framework-name \
  --machine-type mls1-c4-m2

Python

この例では、Python 用 Google API クライアント ライブラリを使用します。次のサンプルコードを実行する前に、認証を設定する必要があります。

Cloud Storage にモデル アーティファクトをアップロードしてモデルリソースを作成した後、モデルの projects.models.versions.create メソッドに、本文に machineType フィールドを指定したリクエストを送信します。

from googleapiclient import discovery

ml = discovery.build('ml', 'v1')
request_dict = {
    'name': 'version_name',
    'deploymentUri': 'gs://model-directory-uri',
    'runtimeVersion': '2.1',
    'pythonVersion': '3.7',
    'framework': 'ML_FRAMEWORK_NAME',
    'machineType': 'mls1-c4-m2'
}
request = ml.projects().models().versions().create(
    parent='projects/project-name/models/model_name',
    body=request_dict
)
response = request.execute()

オンライン予測に GPU を使用する

一部の構成では、必要に応じて GPU を追加して各予測ノードを加速させることができます。GPU を使用するには、いくつかの要件を考慮する必要があります。

  • GPU は Compute Engine(N1)マシンタイプでのみ使用できます。レガシー(MLS1)マシンタイプは GPU をサポートしていません。
  • GPU は、TensorFlow SavedModel をデプロイするときにのみ使用できます。scikit-learn モデル、XGBoost モデルには GPU を使用できません。
  • GPU の各タイプの可用性は、モデルで使用するリージョンによって異なります。どのタイプの GPU がどのリージョンで使用可能かを確認してください。
  • 1 つのモデル バージョンで使用できる GPU タイプは 1 つだけです。また、使用するマシンタイプに応じて、追加できる GPU の数が制限されます。次の表では、これらの制限について示しています。

次の表に、オンライン予測に使用できる GPU と、各 Compute Engine マシンタイプで使用できるタイプ別 GPU の最大数を記載します。

各マシンタイプに有効な GPU の数
マシンタイプ NVIDIA Tesla K80 NVIDIA Tesla P4 NVIDIA Tesla P100 NVIDIA Tesla T4 NVIDIA Tesla V100
n1-standard-2 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-standard-4 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-standard-8 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-standard-16 2、4、8 1、2、4 1、2、4 1、2、4 2、4、8
n1-standard-32 4、8 2、4 2、4 2、4 4、8
n1-highmem-2 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-highmem-4 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-highmem-8 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-highmem-16 2、4、8 1、2、4 1、2、4 1、2、4 2、4、8
n1-highmem-32 4、8 2、4 2、4 2、4 4、8
n1-highcpu-2 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-highcpu-4 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-highcpu-8 1、2、4、8 1、2、4 1、2、4 1、2、4 1、2、4、8
n1-highcpu-16 2、4、8 1、2、4 1、2、4 1、2、4 2、4、8
n1-highcpu-32 4、8 2、4 2、4 2、4 4、8

GPU はオプションであり、追加費用が発生します。

GPU の指定

GPU はモデル バージョンの作成時に指定します。AI Platform Prediction は、予測ノードごとに指定された数とタイプの GPU を割り当てます。GPU を使用する場合、バージョンの予測ノードは手動でスケーリングする必要があります。実行するノードの数は後で変更できますが、現在のところ、GPU の自動スケーリングは使用できません。

次の手順では、1 つの予測ノードで実行するモデルのバージョンを作成して、オンライン予測に GPU を指定します。このノードでは、1 つの NVIDIA Tesla T4 GPU を使用する n1-standard-4 マシンタイプを使用します。

この例では、すてに TensorFlow SavedModel を Cloud Storage にアップロードして、GPU をサポートするリージョン内にモデルリソースを作成していることを前提としています。

gcloud

gcloud コマンドライン ツールのベータ版コンポーネントを使用してバージョンを作成します。

まず、バージョンに手動スケーリングを構成するため、YAML 構成ファイル(従来の名前は config.yaml)を作成します。AI Platform Prediction はデフォルトで自動スケーリングを使用するため、この設定をコマンドライン フラグで上書きすることはできません。次の構成ファイルの例では、モデル バージョンで 1 つの予測ノードを使用するように指定しています。

config.yaml

manualScaling:
  nodes: 1

構成ファイルにバージョン パラメータを指定することもできますが、gcloud ツールでコマンドライン フラグを指定すると、ファイル内のパラメータが上書きされます。

次に、gcloud ツールと構成ファイルを使用してモデル バージョンを作成します。この例では、NVIDIA Tesla T4 GPU を 1 つ使用する n1-standard-4 予測ノードでバージョンが実行されます。この例では、us-central1 リージョン エンドポイントを使用しています。

gcloud beta ai-platform versions create version_name \
  --model model_name \
  --origin gs://model-directory-uri \
  --runtime-version 2.1 \
  --python-version 3.7 \
  --framework tensorflow \
  --region us-central1 \
  --machine-type n1-standard-4 \
  --accelerator count=1,type=nvidia-tesla-t4 \
  --config config.yaml

アクセラレータ名は小文字の単語をハイフンでつなげた形式で指定します。

Python

この例では、Python 用 Google API クライアント ライブラリを使用します。次のサンプルコードを実行する前に、認証を設定する必要があります。

この例では、us-central1 リージョン エンドポイントを使用しています。

リクエストをモデルの projects.models.versions.create メソッドに送信して、machineTypeacceleratorConfigmanualScaling フィールドをリクエスト本文に指定します。

from google.api_core.client_options import ClientOptions
from googleapiclient import discovery

endpoint = 'https://us-central1-ml.googleapis.com'
client_options = ClientOptions(api_endpoint=endpoint)
ml = discovery.build('ml', 'v1', client_options=client_options)

request_dict = {
    'name': 'version_name',
    'deploymentUri': 'gs://model-directory-uri',
    'runtimeVersion': '2.1',
    'pythonVersion': '3.7',
    'framework': 'TENSORFLOW',
    'machineType': 'n1-standard-4',
    'acceleratorConfig': {
      'count': 1,
      'type': 'NVIDIA_TESLA_T4'
    },
    'manualScaling': {
      'nodes': 1
    }
}
request = ml.projects().models().versions().create(
    parent='projects/project-name/models/model_name',
    body=request_dict
)
response = request.execute()

アクセラレータ名は大文字の単語をアンダースコアでつなげた形式で指定します。

マシンタイプ間の違い

マシンタイプによって、異なる量のコンピューティング リソースが提供されるだけでなく、特定の AI Platform Prediction 機能のサポート状況も異なります。次の表に、Compute Engine(N1)マシンタイプとレガシー(MLS1)マシンタイプの違いの概要を記載します。

Compute Engine(N1)マシンタイプ レガシー(MLS1)マシンタイプ
リージョン すべてのリージョン エンドポイント リージョン すべてのグローバル エンドポイント リージョン
ML アーティファクトのタイプ
ランタイム バージョン 1.11 以降 使用可能なすべての AI Platform ランタイム バージョン
モデルの最大サイズ 2 GB 500 MB
ログ ストリーム ロギングはサポート対象外 すべてのロギングタイプ
自動スケーリング 最小ノード数 = 1 最小ノード数 = 0
手動スケーリング ノード数の更新が可能 モデル バージョンの作成後のノード数の更新は不可能
GPU のサポート ○(TensorFlow のみ) ×
AI Explanations のサポート ○(TensorFlow のみ) ×

以降のセクションで、マシンタイプの違いについて詳しく説明します。

ご利用いただけるリージョン

Compute Engine(N1)マシンタイプは、モデルをリージョン エンドポイントにデプロイするときに使用できます。現在のところ、us-central1europe-west4asia-east1 リージョン エンドポイントで使用可能です。

なお、Compute Engine(N1)マシンタイプの GPU の可用性もリージョンによって異なります

レガシー(MLS1)マシンタイプは、数多くのリージョンのグローバル エンドポイントで使用できます。レガシー(MLS1)マシンタイプはリージョン エンドポイントでは使用できません。

バッチ予測のサポート

mls1-c1-m2 マシンタイプを使用するモデル バージョンでは、バッチ予測がサポートされています。他のマシンタイプを使用するモデル バージョンでバッチ予測はサポートされません。

ML フレームワークのサポート

Compute Engine(N1)マシンタイプのいずれかを使用する場合は、予測モデルのエクスポートで説明されているすべてのモデル アーティファクトでモデル バージョンを作成できます。

レガシー(MLS1)マシンタイプの場合、カスタムコードやカスタム予測ルーチンを使用する scikit-learn パイプラインなど、AI Platform Prediction がサポートするあらゆるタイプのモデル アーティファクトを使用できます。

ランタイム バージョンのサポート

Compute Engine(N1)マシンタイプを使用する場合、モデル バージョンではランタイム バージョン 1.11 以降を使用する必要があります。

レガシー(MLS1)マシンタイプを使用する場合、使用可能な AI Platform ランタイム バージョンをどれでも使用できます。

モデルの最大サイズ

レガシー(MLS1)マシンタイプを使用する場合、モデル バージョンの作成時に指定するモデル アーティファクトの合計ファイルサイズは 500 MB 未満でなければなりません。Compute Engine(N1)マシンタイプを使用する場合、合計ファイルサイズは 2 GB まで許容されます。

予測のロギング

Compute Engine(N1)マシンタイプでは、予測ノードの stderr ストリームと stdout ストリームのストリーム ロギングはサポートされません。

レガシー(MLS1)マシンタイプでは、すべてのタイプのオンライン予測ロギングがサポートされます。

予測ノードのスケーリング

Compute Engine(N1)マシンタイプまたはレガシー(MLS1)マシンタイプのどちらを使用するかにより、予測ノードの自動スケーリングと手動スケーリングにはどちらも異なる制約が適用されます。

自動スケーリング

自動スケーリングを有効にした Compute Engine(N1)マシンタイプを使用する場合、モデル バージョンでは常に少なくとも 1 つのノードが実行されている必要があります。つまり、バージョンの autoScaling.minNodes フィールドはデフォルトで 1 に設定され、1 未満の値を指定することはできません。

なお、機械学習モデルが必要とする以上の vCPU や RAM を割り当てると、自動スケーリングが適切に機能しない場合があります。これにより、モデルのパフォーマンスに問題が生じる可能性があります。モデルにさまざまなマシンタイプを試して、コンピューティング リソースを大量に使用しないようにします。

モデル バージョンで GPU を使用する場合、自動スケーリングを使用することはできません。手動スケーリングを使用する必要があります。

レガシー(MLS1)マシンタイプを使用する場合、トラフィックを受信していない間はモデル バージョンをゼロノードにまでスケールダウンできます(autoScaling.minNodes に 0 を設定できます。デフォルトでは 0 に設定されます)。

手動スケーリング

手動スケーリングで Compute Engine(N1)マシンタイプを使用する場合、いつでも projects.models.versions.patch API メソッドを使用して、実行される予測ノードの数を更新できます。

手動スケーリングでレガシー(MLS1)マシンタイプを使用する場合、モデル バージョンの作成後に予測ノードの数を更新することはできません。ノードの数を変更するには、バージョンを削除してから新しく作成する必要があります。