このドキュメントでは、画像処理装置(GPU)を使用するジョブを作成して実行する方法について説明します。GPU の機能と制限事項の詳細については、Compute Engine ドキュメントの GPU についてをご覧ください。
Batch ジョブを作成するときに、必要に応じて GPU を使用して特定のワークロードを高速化できます。GPU を使用するジョブの一般的なユースケースには、集中的なデータ処理と人工知能ワークロード(AI)(機械学習(ML)など)が含まれています。
始める前に
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトのバッチジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
-
プロジェクトのバッチジョブ編集者(
GPU を使用するジョブを作成する
GPU を使用するジョブを作成するには、次の操作を行います。
- GPU を使用するジョブの要件を計画する。
- 特定した要件と方法を使用してジョブを作成します。推奨されるオプションを使用してジョブを作成する方法の例については、このドキュメントの GPU を使用するジョブの例を作成するをご覧ください。
GPU を使用するジョブの要件を計画する
GPU を使用するジョブを作成する前に、次のセクションで説明するように、ジョブの要件を計画します。
ステップ 1: GPU マシンタイプとプロビジョニング方法を選択する
ジョブの要件は、使用する GPU マシンタイプとプロビジョニング方法によって異なり、それぞれのオプションは相互に依存している場合があります。要件と優先度に基づいて、最初に GPU マシンタイプを選択するか、最初にプロビジョニング方法を選択します。一般に、GPU マシンタイプは主にパフォーマンスと基本料金に影響し、プロビジョニング方法は主にリソースの可用性と追加費用または割引に影響します。
GPU マシンタイプを選択する
使用可能な GPU マシンタイプ(GPU タイプ、GPU の数、マシンタイプ(vCPU とメモリ)の有効な組み合わせ)とそのユースケースについては、Compute Engine ドキュメントの GPU マシンタイプのページをご覧ください。
ジョブで GPU マシンタイプを指定するために必要なフィールドは、次の表のカテゴリによって異なります。
GPU マシンタイプとそのジョブ要件 | |
---|---|
アクセラレータ最適化 VM の GPU: アクセラレータ最適化マシン ファミリーのマシンタイプを使用する VM には、特定のタイプと数の GPU が自動的に接続されます。 |
アクセラレータ最適化 VM で GPU を使用するには、マシンタイプを指定することをおすすめします。各アクセラレータ最適化マシンタイプは、特定のタイプと数の GPU のみをサポートしているため、アクセラレータ最適化マシンタイプに加えてこれらの値を指定しても、機能的には同等です。 具体的には、Batch はアクセラレータ最適化 VM の GPU のタイプと数のみを指定するサポートも行いますが、その場合、vCPU とメモリのオプションが非常に制限されることがあります。そのため、使用可能な vCPU とメモリのオプションがジョブのタスク要件と互換性があることを確認することをおすすめします。 |
N1 VM の GPU: これらの GPU では、各 VM にアタッチするタイプと量を指定する必要があります。また、N1 マシンシリーズのマシンタイプを持つ VM にアタッチする必要があります。 |
N1 VM で GPU を使用するには、少なくとも GPU のタイプと GPU の数を指定することをおすすめします。値の組み合わせが、N1 マシンタイプの有効な GPU オプションのいずれかに一致していることを確認します。特定の種類と数の GPU を使用する N1 VM の vCPU とメモリのオプションは非常に柔軟であるため、必要に応じて、ジョブのタスク要件を満たすマシンタイプをバッチに選択させることができます。 |
プロビジョニング方法を選択する
Batch は、ジョブがリクエストするリソースのタイプに基づいて、GPU を使用するジョブの VM リソースをプロビジョニングするためにさまざまな方法を使用します。使用可能なプロビジョニング方法とその要件については、次の表をご覧ください。この表には、ユースケースに基づいて、リソースの可用性が最も高い順にリストされています。
要約すると、ほとんどのユーザーには次のことをおすすめします。
予約なしで A3 GPU マシンタイプを使用する場合は、Dynamic Workload Scheduler for Batch(プレビュー版)を使用します。
他のすべての GPU マシンタイプには、デフォルトのプロビジョニング方法を使用します。デフォルトのプロビジョニング方法は通常オンデマンドです。ただし、プロジェクトにジョブが自動的に使用できる未使用の予約がある場合は例外です。
プロビジョニング方法とそのジョブ要件 | |
---|---|
予約
|
バッチは、未使用の予約を使用できるジョブに予約を使用します。予約とその要件の詳細については、VM 予約を使用してリソースの可用性を確保するをご覧ください。 |
バッチ用の動的ワークロード スケジューラ(プレビュー)
|
バッチは、次のすべての処理を行う Job に Dynamic Workload Scheduler を使用します。
|
オンデマンド
|
Batch は、他のすべてのジョブにオンデマンドを使用します。 |
Spot VM
|
Batch は、 |
ステップ 2: GPU ドライバをインストールする
必要な GPU ドライバをインストールするには、以下のいずれかの方法を選択します。
GPU ドライバを自動的にインストールする(可能であれば推奨): 例に示すように、Batch でサードパーティのロケーションから必要な GPU ドライバをフェッチさせ、ユーザーに代わってインストールする場合は、ジョブの
installGpuDrivers
フィールドをtrue
に設定します。この方法は、ジョブでドライバを手動でインストールする必要がない場合に推奨されます。必要に応じて、Batch がインストールする GPU ドライバのバージョンを指定する場合は、
driverVersion
フィールドも設定します。GPU ドライバを手動でインストールする: 次のいずれかに該当する場合は、この方法が必要です。
- ジョブがスクリプトと実行可能なコンテナの両方を使用し、インターネットのアクセス権を持っていません。ジョブが持つアクセス権の詳細については、バッチ ネットワーキングの概要をご覧ください。
- ジョブはカスタム VM イメージを使用します。VM OS イメージと使用できる VM OS イメージの詳細については、VM OS 環境の概要をご覧ください。
必要な GPU ドライバを手動でインストールするには、次の方法をおすすめします。
GPU ドライバを含むカスタム VM イメージを作成します。
GPU ドライバをインストールするには、使用する OS に基づいてインストール スクリプトを実行します。
ジョブにコンテナで実行可能なファイルがあり、Container-Optimized OS を使用していない場合は、NVIDIA Container Toolkit もインストールする必要があります。
GPU を使用するジョブを作成して送信する場合は、GPU ドライバを含むカスタム VM イメージを指定し、ジョブの
installGpuDrivers
フィールドをfalse
(デフォルト)に設定します。
ステップ 3: 互換性のある VM リソースを定義する
ジョブの VM リソースを定義するための要件とオプションについては、ジョブリソースをご覧ください。
要約すると、GPU を使用するジョブの VM リソースを定義するときに、次のすべての操作を行う必要があります。
ジョブの VM のロケーションで GPU マシンタイプを使用できることを確認します。
GPU マシンタイプを使用できる場所については、Compute Engine ドキュメントの リージョンとゾーン別の GPU の可用性をご覧ください。
ジョブのマシンタイプを指定する場合は、ジョブのタスク要件に十分な vCPU とメモリがマシンタイプに含まれていることを確認してください。アクセラレータ最適化 VM で GPU を使用する場合は、ジョブのマシンタイプを指定することをおすすめします。N1 VM で GPU を使用する場合は、省略可能です。
有効な方法を使用して、ジョブの VM リソースを定義してください。
instances[].policy
フィールドを使用して VM リソースを直接定義します(可能であれば推奨)。この方法は例で説明しています。instances[].instanceTemplate
フィールドを使用して、テンプレートで VM リソースを定義します。この方法は、カスタム イメージから GPU ドライバを手動でインストールする場合に必要です。詳細については、VM インスタンス テンプレートを使用したジョブリソースの定義をご覧ください。
GPU を使用するジョブの例を作成する
以降のセクションでは、推奨されるオプションを使用して、各 GPU マシンタイプのサンプルジョブを作成する方法について説明します。具体的には、サンプルジョブはすべて GPU ドライバを自動的にインストールし、すべて VM リソースを直接定義し、プロビジョニング方法を指定するか、デフォルトのプロビジョニング方法を使用します。
- Dynamic Workload Scheduler を介して A3 VM に GPU を使用する(プレビュー)
- アクセラレータ最適化 VM に GPU を使用する
- N1 VM で GPU を使用する
Dynamic Workload Scheduler for Batch(プレビュー版)で A3 VM に GPU を使用する
gcloud CLI または Batch API を使用して、Dynamic Workload Scheduler を介して A3 VM に GPU を使用するジョブを作成できます。
gcloud
GPU ドライバをインストールし、A3 マシンシリーズのマシンタイプを指定し、予約をブロックし、GPU マシンタイプがあるロケーションで実行する JSON ファイルを作成します。
たとえば、Dynamic Workload Scheduler を介して A3 VM の GPU を使用する基本的なスクリプト ジョブを作成するには、次の内容の JSON ファイルを作成します。
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "reservation": "NO_RESERVATION" } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
次のように置き換えます。
INSTALL_GPU_DRIVERS
:true
に設定すると、Batch はpolicy
フィールドで指定した GPU タイプに必要なドライバをサードパーティの場所からフェッチし、Batch がユーザーに代わってインストールします。このフィールドをfalse
(デフォルト)に設定した場合、このジョブに対して GPU を使用するために GPU ドライバを手動でインストールする必要があります。MACHINE_TYPE
: A3 マシンシリーズのマシンタイプ。ALLOWED_LOCATIONS
: 必要に応じて、allowedLocations[]
フィールドを使用して、ジョブの VM の実行が許可されるリージョンまたはリージョン内の特定のゾーンを指定できます。たとえば、regions/us-central1
はリージョンus-central1
内のすべてのゾーンを許可します。このジョブに必要な GPU マシンタイプを提供するロケーションを指定してください。それ以外の場合は、このフィールドを省略する場合は、ジョブのロケーションで GPU マシンタイプが提供されていることを確認してください。
ジョブを作成して実行するには、
gcloud batch jobs submit
コマンドを使用します:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
以下を置き換えます。
JOB_NAME
: ジョブの名前。LOCATION
: ジョブのロケーション。JSON_CONFIGURATION_FILE
: ジョブの構成の詳細を含む JSON ファイルへのパス。
API
jobs.create
メソッドに対して POST
リクエストを送信して、GPU ドライバをインストールし、A3 マシンシリーズのマシンタイプを指定し、予約をブロックし、GPU マシンタイプがあるロケーションで実行します。
たとえば、Dynamic Workload Scheduler を介して A3 VM の GPU を使用する基本的なスクリプト ジョブを作成するには、次のリクエストを行います。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"machineType": "MACHINE_TYPE",
"reservation": "NO_RESERVATION"
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
次のように置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDLOCATION
: ジョブのロケーション。JOB_NAME
: ジョブの名前。INSTALL_GPU_DRIVERS
:true
に設定すると、Batch はpolicy
フィールドで指定した GPU タイプに必要なドライバをサードパーティの場所からフェッチし、Batch がユーザーに代わってインストールします。このフィールドをfalse
(デフォルト)に設定した場合、このジョブに対して GPU を使用するために GPU ドライバを手動でインストールする必要があります。MACHINE_TYPE
: A3 マシンシリーズのマシンタイプ。ALLOWED_LOCATIONS
: 必要に応じて、allowedLocations[]
フィールドを使用して、ジョブの VM の実行が許可されるリージョンまたはリージョン内の特定のゾーンを指定できます。たとえば、regions/us-central1
はリージョンus-central1
内のすべてのゾーンを許可します。このジョブに必要な GPU マシンタイプを提供するロケーションを指定してください。それ以外の場合は、このフィールドを省略する場合は、ジョブのロケーションで GPU マシンタイプが提供されていることを確認してください。
アクセラレータ最適化 VM に GPU を使用する
アクセラレータ最適化 VM に GPU を使用するジョブは、gcloud CLI、Batch API、Java、Node.js、Python を使用して作成できます。
gcloud
GPU ドライバをインストールし、アクセラレータ最適化マシン ファミリーからマシンタイプを指定し、GPU マシンタイプがあるロケーションで実行する JSON ファイルを作成します。
たとえば、アクセラレータ用に最適化された VM に GPU を使用する基本的なスクリプト ジョブを作成するには、次の内容の JSON ファイルを作成します。
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE" } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
次のように置き換えます。
INSTALL_GPU_DRIVERS
:true
に設定すると、Batch はpolicy
フィールドで指定した GPU タイプに必要なドライバをサードパーティの場所からフェッチし、Batch がユーザーに代わってインストールします。このフィールドをfalse
(デフォルト)に設定した場合、このジョブに対して GPU を使用するために GPU ドライバを手動でインストールする必要があります。MACHINE_TYPE
: アクセラレータ最適化マシン ファミリーのマシンタイプ。ALLOWED_LOCATIONS
: 必要に応じて、allowedLocations[]
フィールドを使用して、ジョブの VM の実行が許可されるリージョンまたはリージョン内の特定のゾーンを指定できます。たとえば、regions/us-central1
はリージョンus-central1
内のすべてのゾーンを許可します。このジョブに必要な GPU マシンタイプを提供するロケーションを指定してください。それ以外の場合は、このフィールドを省略する場合は、ジョブのロケーションで GPU マシンタイプが提供されていることを確認してください。
ジョブを作成して実行するには、
gcloud batch jobs submit
コマンドを使用します:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
以下を置き換えます。
JOB_NAME
: ジョブの名前。LOCATION
: ジョブのロケーション。JSON_CONFIGURATION_FILE
: ジョブの構成の詳細を含む JSON ファイルへのパス。
API
jobs.create
メソッドに POST
リクエストを送信して GPU ドライバをインストールし、アクセラレータ最適化マシン ファミリーからマシンタイプを指定し、GPU マシンタイプがあるロケーションで実行します。
たとえば、アクセラレータ用に最適化された VM で GPU を使用する基本的なスクリプト ジョブを作成するには、次のリクエストを行います。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"machineType": "MACHINE_TYPE"
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
次のように置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDLOCATION
: ジョブのロケーション。JOB_NAME
: ジョブの名前。INSTALL_GPU_DRIVERS
:true
に設定すると、Batch はpolicy
フィールドで指定した GPU タイプに必要なドライバをサードパーティの場所からフェッチし、Batch がユーザーに代わってインストールします。このフィールドをfalse
(デフォルト)に設定した場合、このジョブに対して GPU を使用するために GPU ドライバを手動でインストールする必要があります。MACHINE_TYPE
: アクセラレータ最適化マシン ファミリーのマシンタイプ。ALLOWED_LOCATIONS
: 必要に応じて、allowedLocations[]
フィールドを使用して、ジョブの VM の実行が許可されるリージョンまたはリージョン内の特定のゾーンを指定できます。たとえば、regions/us-central1
はリージョンus-central1
内のすべてのゾーンを許可します。このジョブに必要な GPU マシンタイプを提供するロケーションを指定してください。それ以外の場合は、このフィールドを省略する場合は、ジョブのロケーションで GPU マシンタイプが提供されていることを確認してください。
Java
Node.js
Python
N1 VM で GPU を使用する
N1 VM で GPU を使用するジョブは、gcloud CLI、Batch API、Java、Node.js、Python を使用して作成できます。
gcloud
GPU ドライバをインストールし、
accelerators[]
フィールドのtype
とcount
のサブフィールドを定義し、GPU マシンタイプがあるロケーションで実行する JSON ファイルを作成します。たとえば、N1 VM で GPU を使用し、Batch が正確な N1 マシンタイプを選択できるようにする基本的なスクリプト ジョブを作成するには、次の内容の JSON ファイルを作成します。
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ] } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
次のように置き換えます。
INSTALL_GPU_DRIVERS
:true
に設定すると、Batch はpolicy
フィールドで指定した GPU タイプに必要なドライバをサードパーティの場所からフェッチし、Batch がユーザーに代わってインストールします。このフィールドをfalse
(デフォルト)に設定した場合、このジョブに対して GPU を使用するために GPU ドライバを手動でインストールする必要があります。GPU_TYPE
: GPU タイプ。使用可能な GPU タイプのリストは、gcloud compute accelerator-types list
コマンドを使用することで表示できます。このフィールドは、N1 VM の GPU にのみ使用します。GPU_COUNT
: 指定したタイプの GPU の数。有効なオプションの詳細については、N1 マシンシリーズの GPU マシンタイプをご覧ください。このフィールドは、N1 VM の GPU にのみ使用します。ALLOWED_LOCATIONS
: 必要に応じて、allowedLocations[]
フィールドを使用して、ジョブの VM の実行が許可されるリージョンまたはリージョン内の特定のゾーンを指定できます。たとえば、regions/us-central1
はリージョンus-central1
内のすべてのゾーンを許可します。このジョブに必要な GPU マシンタイプを提供するロケーションを指定してください。それ以外の場合は、このフィールドを省略する場合は、ジョブのロケーションで GPU マシンタイプが提供されていることを確認してください。
ジョブを作成して実行するには、
gcloud batch jobs submit
コマンドを使用します:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
以下を置き換えます。
JOB_NAME
: ジョブの名前。LOCATION
: ジョブのロケーション。JSON_CONFIGURATION_FILE
: ジョブの構成の詳細を含む JSON ファイルへのパス。
API
GPU ドライバをインストールし、accelerators[]
フィールドの type
と count
サブフィールドを定義し、GPU マシンタイプがあるロケーションを使用する jobs.create
メソッドに対して POST
リクエストを作成します。
たとえば、N1 VM で GPU を使用し、Batch が正確な N1 マシンタイプを選択できるようにする基本的なスクリプト ジョブを作成するには、次のリクエストを行います。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"accelerators": [
{
"type": "GPU_TYPE",
"count": GPU_COUNT
}
]
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
次のように置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDLOCATION
: ジョブのロケーション。JOB_NAME
: ジョブの名前。INSTALL_GPU_DRIVERS
:true
に設定すると、Batch はpolicy
フィールドで指定した GPU タイプに必要なドライバをサードパーティの場所からフェッチし、Batch がユーザーに代わってインストールします。このフィールドをfalse
(デフォルト)に設定した場合、このジョブに対して GPU を使用するために GPU ドライバを手動でインストールする必要があります。GPU_TYPE
: GPU タイプ。使用可能な GPU タイプのリストは、gcloud compute accelerator-types list
コマンドを使用することで表示できます。このフィールドは、N1 VM の GPU にのみ使用します。GPU_COUNT
: 指定したタイプの GPU の数。有効なオプションの詳細については、N1 マシンシリーズの GPU マシンタイプをご覧ください。このフィールドは、N1 VM の GPU にのみ使用します。ALLOWED_LOCATIONS
: 必要に応じて、allowedLocations[]
フィールドを使用して、ジョブの VM の実行が許可されるリージョンまたはリージョン内の特定のゾーンを指定できます。たとえば、regions/us-central1
はリージョンus-central1
内のすべてのゾーンを許可します。このジョブに必要な GPU マシンタイプを提供するロケーションを指定してください。それ以外の場合は、このフィールドを省略する場合は、ジョブのロケーションで GPU マシンタイプが提供されていることを確認してください。
Java
Node.js
Python
次のステップ
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。