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

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

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

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

使用可能なマシンタイプ

Compute Engine(N1)マシンタイプと mls1-c1-m2 マシンタイプは、オンライン予測用に一般提供されています。mls1-c4-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 を使用します。

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

Cloud Console

[バージョンの作成] ページで [マシンタイプ] プルダウン リストを開き、[標準] > [n1-standard-4] を選択します。

gcloud

Cloud Storage にモデル アーティファクトをアップロードしてモデルリソースを作成すると、n1-standard-4 マシンタイプを使用するモデル バージョンを作成できます。

gcloud ai-platform versions create version_name \
  --model model_name \
  --origin gs://model-directory-uri \
  --runtime-version 2.2 \
  --python-version 3.7 \
  --framework ml-framework-name \
  --machine-type n1-standard-4

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.2',
    'pythonVersion': '3.7',
    'framework': 'ML_FRAMEWORK_NAME',
    'machineType': 'n1-standard-4'
}
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 の自動スケーリングは使用できません。

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

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

Cloud Console

ガイドに従ってモデル バージョンを作成します。[バージョンの作成] ページで、次のオプションを指定します。

  1. [マシンタイプ] プルダウン リストで、[標準] > [n1-standard-4] を選択します。
  2. [アクセラレータ タイプ] プルダウン リストで、[NVIDIA_TESLA_T4] を選択します。
  3. [アクセラレータ数] プルダウン リストで、[1] を選択します。
  4. [スケーリング] プルダウン リストで、[手動スケーリング] を選択します。
  5. [ノードの数] フィールドに 2 を入力します。

gcloud

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

config.yaml

manualScaling:
  nodes: 2

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

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

gcloud ai-platform versions create version_name \
  --model model_name \
  --origin gs://model-directory-uri \
  --runtime-version 2.2 \
  --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.2',
    'pythonVersion': '3.7',
    'framework': 'TENSORFLOW',
    'machineType': 'n1-standard-4',
    'acceleratorConfig': {
      'count': 1,
      'type': 'NVIDIA_TESLA_T4'
    },
    'manualScaling': {
      'nodes': 2
    }
}
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 のみ) ×
VPC Service Controls のサポート ×
一般提供されているマシンタイプに対する SLA の適用 ○(該当する場合)

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

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

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

Compute Engine(N1)マシンタイプを使用するモデル バージョンを 2 つ以上の予測ノードにスケールすると、ノードは同じリージョン内の複数のゾーンで実行されます。これにより、いずれかのゾーンでサービスが停止しても、継続的可用性が確保されます。詳細については、このドキュメントのスケーリング セクションをご覧ください。

なお、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 ランタイム バージョンをどれでも使用できます。

カスタム コンテナのサポート

カスタム コンテナを使用してオンライン予測を行うには、Compute Engine(N1)マシンタイプを使用する必要があります。

モデルの最大サイズ

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

予測のロギング

Compute Engine(N1)マシンタイプでは、コンソール ロギングはプレビュー版です。以前の(MLS1)マシンタイプでは、コンソール ロギングは一般提供されています。

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

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

自動スケーリング

自動スケーリングを有効にした Compute Engine(N1)マシンタイプを使用する場合、モデル バージョンでは常に少なくとも 1 つのノードが実行されている必要があります。つまり、バージョンの autoScaling.minNodes フィールドはデフォルトで 1 に設定され、1 未満の値を指定することはできません。 autoScaling.minNodes を 2 以上に設定すると、予測ノードが同じリージョン内の複数のゾーンで実行されます。これにより、いずれかのゾーンでサービスが停止しても、継続的可用性が確保されます。

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

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

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

手動スケーリング

手動スケーリングで Compute Engine(N1)マシンタイプを使用する場合、いつでも projects.models.versions.patch API メソッドを使用して、実行される予測ノードの数を更新できます。manualScaling.nodes フィールドを 2 以上に設定すると、予測ノードは同じリージョン内の複数のゾーンで実行されます。これにより、いずれかのゾーンでサービスが停止しても、継続的可用性が確保されます。

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

VPC Service Controls のサポート

VPC Service Controls を使用して AI Platform Prediction を保護する場合、以前の(MLS1)マシンタイプを使用するバージョンは作成できません。Compute Engine(N1)マシンタイプを使用する必要があります。