AI Platform Prediction はノードを割り当てて、モデル バージョンに送信されるオンライン予測リクエストを処理します。モデル バージョンをデプロイする際に、AI Platform Prediction がノードに使用する仮想マシンのタイプをカスタマイズできます。
マシンタイプによって、次の点が異なります。
- ノードあたりの仮想 CPU(vCPU)の数
- ノードあたりのメモリの量
- GPU のサポート(一部のマシンタイプに追加可能)
- 特定の AI Platform Prediction 機能のサポート
- 料金
- サービスレベル契約(SLA)の適用範囲
コンピューティング リソースの多いマシンタイプを選択すると、予測を処理する際のレイテンシの短縮や、同時に処理される予測リクエスト数の増加につながります。
使用可能なマシンタイプ
Compute Engine(N1)マシンタイプと mls1-c1-m2
マシンタイプは、オンライン予測用に一般提供されています。mls1-c4-m2
マシンタイプはベータ版で使用できます。
次の表は、使用可能なマシンタイプを比較したものです。
名前 | 提供状況 | vCPUs | メモリ(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 | 10 GB |
n1-standard-4 |
一般提供 | 4 | 15 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-standard-8 |
一般提供 | 8 | 30 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-standard-16 |
一般提供 | 16 | 60 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-standard-32 |
一般提供 | 32 | 120 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-highmem-2 |
一般提供 | 2 | 13 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-highmem-4 |
一般提供 | 4 | 26 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-highmem-8 |
一般提供 | 8 | 52 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-highmem-16 |
一般提供 | 16 | 104 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-highmem-32 |
一般提供 | 32 | 208 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-highcpu-2 |
一般提供 | 2 | 1.8 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-highcpu-4 |
一般提供 | 4 | 3.6 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-highcpu-8 |
一般提供 | 8 | 7.2 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-highcpu-16 |
一般提供 | 16 | 14.4 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
n1-highcpu-32 |
一般提供 | 32 | 28.8 | ○ | TensorFlow、XGBoost、scikit-learn | 10 GB |
マシンタイプごとの料金をご覧ください。Compute Engine(N1)マシンタイプの仕様の詳細については、Compute Engine のドキュメントをご覧ください。
マシンタイプの指定
モデル バージョンを作成する際に、マシンタイプを指定できます。マシンタイプの指定がなければ、モデル バージョンはデフォルトで、リージョン エンドポイントを使用する場合は n1-standard-2
、グローバル エンドポイントを使用する場合は mls1-c1-m2
になります。
次の手順で、モデル バージョンの作成時にマシンタイプを指定する方法を説明します。手順では例として n1-standard-4
マシンタイプを使用します。モデル バージョンを作成するプロセス全体については、モデルのデプロイガイドをご覧ください。
Google Cloud コンソール
[バージョンの作成] ページで [マシンタイプ] プルダウン リストを開き、[標準] > [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.11 \
--python-version 3.7 \
--framework ML_FRAMEWORK_NAME \
--region us-central1 \
--machine-type n1-standard-4
Python
この例では、Python 用 Google API クライアント ライブラリを使用します。次のサンプルコードを実行する前に、認証を設定する必要があります。
Cloud Storage にモデル アーティファクトをアップロードしてモデルリソースを作成した後、モデルの projects.models.versions.create
メソッドに、本文に machineType
フィールドを指定したリクエストを送信します。
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.11',
'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 の数はモデル バージョンを作成する際に固定されます。高度なユースケースがない限り、予測ノードごとに 1 つの GPU を構成する(アクセラレータの数を 1 に設定する)ことをおすすめします。
次の手順では、常に 2 つ以上の予測ノードで実行されるモデル バージョンを作成して、オンライン予測の GPU を指定する方法を説明します。各ノードは、n1-standard-4
マシンタイプと、1 つの NVIDIA Tesla T4 GPU を使用します。
この例では、すてに TensorFlow SavedModel を Cloud Storage にアップロードして、GPU をサポートするリージョン内にモデルリソースを作成していることを前提としています。
Google Cloud コンソール
ガイドに沿ってモデル バージョンを作成します。[バージョンの作成] ページで、次のオプションを指定します。
- [スケーリング] プルダウン リストで、[手動スケーリング] を選択します。
- [ノードの最小数] フィールドに「
2
」と入力します。 - [マシンタイプ] プルダウン リストで、[標準] > [n1-standard-4] を選択します。
- [アクセラレータ タイプ] プルダウン リストで、[NVIDIA_TESLA_T4] を選択します。
- [アクセラレータ数] プルダウン リストで、[1] を選択します。
gcloud
gcloud CLI を使用してモデル バージョンを作成します。この例では、バージョンがそれぞれ 1 つの NVIDIA Tesla T4 GPU を使用する n1-standard-4 予測ノードで実行されます。AI Platform Prediction は、任意の時点での GPU の使用状況に応じて、予測ノードの数を 2~4 の範囲に自動的スケーリングします。この例では、us-central1
リージョン エンドポイントを使用しています。
gcloud beta ai-platform versions create VERSION_NAME \
--model MODEL_NAME \
--origin gs://model-directory-uri \
--runtime-version 2.11 \
--python-version 3.7 \
--framework tensorflow \
--region us-central1 \
--machine-type n1-standard-4 \
--accelerator count=1,type=nvidia-tesla-t4 \
--min-nodes 2 \
--max-nodes 4 \
--metric-targets gpu-duty-cycle=60
アクセラレータ名は小文字の単語をハイフンでつなげた形式で指定します。
Python
この例では、Python 用 Google API クライアント ライブラリを使用します。次のサンプルコードを実行する前に、認証を設定する必要があります。
この例では、us-central1
リージョン エンドポイントを使用しています。
リクエストをモデルの projects.models.versions.create
メソッドに送信して、machineType
、acceleratorConfig
、manualScaling
フィールドをリクエスト本文に指定します。
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.11',
'pythonVersion': '3.7',
'framework': 'TENSORFLOW',
'machineType': 'n1-standard-4',
'acceleratorConfig': {
'count': 1,
'type': 'NVIDIA_TESLA_T4'
},
'autoScaling': {
'minNodes': 2,
'maxNodes': 4,
'metrics': [
{
'name': 'GPU_DUTY_CYCLE',
'target': 60
}
]
}
}
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 ランタイム バージョン |
カスタム コンテナのサポート | ○ | × |
モデルの最大サイズ | 10 GB | 500 MB |
自動スケーリング | 最小ノード数 = 1 | 最小ノード数 = 0 |
手動スケーリング | ノード数の更新が可能 | モデル バージョンの作成後のノード数の更新は不可能 |
GPU のサポート | ○(TensorFlow のみ) | × |
AI Explanations のサポート | ○(TensorFlow のみ) | × |
VPC Service Controls のサポート | ○ | × |
一般提供されているマシンタイプに対する SLA の適用 | ○(該当する場合) | ○ |
以降のセクションで、マシンタイプの違いについて詳しく説明します。
ご利用いただけるリージョン
Compute Engine(N1)マシンタイプは、モデルをリージョン エンドポイントにデプロイするときに使用できます。Compute Engine(N1)マシンタイプを使用する場合、グローバル エンドポイントにモデルをデプロイすることはできません。
Compute Engine(N1)マシンタイプを使用するモデル バージョンを 2 つ以上の予測ノードにスケールすると、ノードは同じリージョン内の複数のゾーンで実行されます。これにより、いずれかのゾーンでサービスが停止しても、継続的可用性が確保されます。詳細については、このドキュメントのスケーリング セクションをご覧ください。
なお、Compute Engine(N1)マシンタイプの GPU の可用性もリージョンによって異なります。
レガシー(MLS1)マシンタイプは、数多くのリージョンのグローバル エンドポイントで使用できます。レガシー(MLS1)マシンタイプはリージョン エンドポイントでは使用できません。
バッチ予測のサポート
mls1-c1-m2
マシンタイプを使用するモデル バージョンでは、バッチ予測がサポートされています。他のマシンタイプを使用するモデル バージョンでバッチ予測はサポートされません。
ML フレームワークのサポート
Compute Engine(N1)マシンタイプのいずれかを使用する場合は、予測モデルのエクスポートで説明されているすべてのモデル アーティファクトでモデル バージョンを作成できます。
- カスタムコードを使用する scikit-learn パイプラインは使用できません。
- カスタム予測ルーチンは使用できません。
レガシー(MLS1)マシンタイプの場合、カスタムコードやカスタム予測ルーチンを使用する scikit-learn パイプラインなど、AI Platform Prediction がサポートするあらゆるタイプのモデル アーティファクトを使用できます。
ランタイム バージョンのサポート
Compute Engine(N1)マシンタイプを使用する場合、モデル バージョンにはランタイム バージョン 1.11 以降を使用する必要があります。
レガシー(MLS1)マシンタイプを使用する場合、使用可能な AI Platform ランタイム バージョンをどれでも使用できます。
カスタム コンテナのサポート
カスタム コンテナを使用してオンライン予測を行うには、Compute Engine(N1)マシンタイプを使用する必要があります。
モデルの最大サイズ
レガシー(MLS1)マシンタイプを使用する場合、モデル バージョンの作成時に指定するモデル アーティファクトの合計ファイルサイズは 500 MB 未満でなければなりません。Compute Engine(N1)マシンタイプを使用する場合、合計ファイルサイズは 10 GB まで許容されます。
予測のロギング
Compute Engine(N1)マシンタイプでは、コンソール ロギングはプレビュー版です。以前の(MLS1)マシンタイプでは、コンソール ロギングは一般提供されています。
予測ノードのスケーリング
Compute Engine(N1)マシンタイプまたはレガシー(MLS1)マシンタイプのどちらを使用するかにより、予測ノードの自動スケーリングと手動スケーリングにはどちらも異なる制約が適用されます。
自動スケーリング
自動スケーリングを有効にした Compute Engine(N1)マシンタイプを使用する場合、モデル バージョンでは常に少なくとも 1 つのノードが実行されている必要があります。つまり、バージョンの autoScaling.minNodes
フィールドはデフォルトで 1 に設定され、1 未満の値を指定することはできません。 autoScaling.minNodes
を 2 以上に設定すると、予測ノードが同じリージョン内の複数のゾーンで実行されます。これにより、いずれかのゾーンでサービスが停止しても、継続的可用性が確保されます。
なお、機械学習モデルが必要とする以上の vCPU や RAM を割り当てると、自動スケーリングが適切に機能しない場合があります。これにより、モデルのパフォーマンスに問題が生じる可能性があります。モデルにさまざまなマシンタイプを試して、コンピューティング リソースを大量に使用しないようにします。
レガシー(MLS1)マシンタイプを使用する場合、トラフィックを受信していない間はモデル バージョンをゼロノードにまでスケールダウンできます。つまり、autoScaling.minNodes
を 0 に設定できます(デフォルトでは 0 に設定されています)。モデル バージョンが予測リクエストを受信していない場合、スケーリングをゼロにすることでコストを削減できます。ただし、ノードがゼロの期間の後、AI Platform Prediction でリクエストを処理するために新しいノードを割り当てる際には、レイテンシやエラーが発生する可能性があります。詳細は、ゼロにスケーリングするをご覧ください。
手動スケーリング
手動スケーリングで 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)マシンタイプを使用する必要があります。