このドキュメントでは、グラフィック プロセッシング ユニット(GPU)を使用するジョブを作成して実行する方法について説明します。
必要に応じて、1 つ以上の GPU をジョブで実行されている VM に追加するバッチジョブを作成できます。GPU を使用するジョブの一般的なユースケースには、集中的なデータ処理と機械学習(ML)のワークロードが含まれています。
始める前に
- バッチを以前に使用したことがなかった場合は、バッチを開始するを確認し、プロジェクトとユーザーの前提条件を完了してバッチを有効にします。
-
ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトのバッチジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
ロールの付与の詳細については、アクセスの管理をご覧ください。
-
プロジェクトのバッチジョブ編集者(
GPU を使用するジョブを作成する
必要に応じて、ジョブを実行する各 VM に 1 つ以上のグラフィック プロセッシング ユニット(GPU)を追加するジョブを作成することもできます。GPU を使用するジョブを作成するには、次のようにします。
- GPU を使用するジョブの要件を確認して、ジョブの作成に使用できるメソッドを決定します。
- 選択したメソッドを使用してジョブを作成します。推奨の方法を使用してジョブを作成する例については、GPU を使用するジョブの作成をご覧ください。
ジョブが GPU を使用するための要件
GPU を使用するには、ジョブで次の処理をすべて行う必要があります。
GPU ドライバをインストールする
必要な GPU ドライバをインストールするには、次のいずれかの方法を選択します。
ドライバを自動的にインストールする(推奨): 例に示すように、Batch がユーザーに代わって、サードパーティのロケーションから必要な GPU ドライバをフェッチしてインストールできるようにするには、ジョブの
installGpuDrivers
フィールドをtrue
に設定します。ドライバを手動でインストールする: 次のいずれかに該当する場合は、この方法が必要です。
- ジョブは、スクリプトとコンテナの実行可能ファイルの両方を使用し、インターネット アクセスはありません。ジョブが持つアクセス権の詳細については、バッチ ネットワーキングの概要をご覧ください。
- ジョブはカスタム VM イメージを使用します。
必要な GPU ドライバを手動でインストールするには、次の方法をおすすめします。
GPU ドライバを含むカスタム VM イメージを作成します。
GPU ドライバをインストールするには、使用する OS に基づいてインストール スクリプトを実行します。
ジョブにコンテナで実行可能なファイルがあり、Container-Optimized OS を使用していない場合は、NVIDIA Container Toolkit もインストールする必要があります。
Compute Engine インスタンス テンプレートを使用して、カスタム VM イメージでジョブを作成して送信します。ジョブの
installGpuDrivers
フィールドをfalse
(デフォルト)に設定します。
VM リソースを定義する
GPU を使用するには、ジョブで GPU のタイプと数、ジョブの VM と互換性のあるマシンタイプを指定する必要があります。ジョブの VM のリソースを定義するには、次のいずれかの方法を選択します。
- リソースを直接定義する(推奨):
例に示すように、ジョブの VM のリソースを直接定義するには、
policy
フィールドを使用します。 - テンプレート内のリソースを定義する: Compute Engine インスタンス テンプレートを指定して、ジョブの VM のリソースを定義します。ジョブの定義にインスタンス テンプレートを含める場合は、この方法を使用する必要があります。
任意のコンテナに GPU をマウントする
ジョブに GPU を使用するコンテナ実行可能ファイルが含まれている場合は、ジョブの VM イメージに基づいて、各コンテナ実行可能ファイルに GPU をマウントする必要があります。
- ジョブでデフォルトの VM イメージを使用し、コンテナ実行可能ファイルのみがある場合、または Container-Optimized OS のカスタム イメージを使用している場合は、次のようにします。
options
フィールドに、--privileged
フラグを指定します。volumes
フィールドに、/var/lib/nvidia/lib64:/usr/local/nvidia/lib64
と/var/lib/n
vidia/bin:/usr/local/nvidia/bin
のパスを指定します。
- それ以外で、デフォルトの VM イメージを使用していて、コンテナとスクリプトで実行可能なファイルがある場合、またはジョブが Container-Optimized OS 以外のカスタム VM イメージを使用している場合は、次のようにします。
options
フィールドに、--gpus all
フラグを指定します。
GPU を使用するジョブの作成
このセクションでは、推奨される方法によって、GPU を使用するジョブを作成する方法を説明しています。ジョブは必要なドライバを自動的にインストールし、使用するリソースを直接定義します。コンテナで実行可能なファイルがあるジョブの例でも、GPU をコンテナにマウントします。GPU を使用するジョブは、gcloud CLI または Batch API を使用して作成できます。
gcloud
GPU をジョブに追加するには、使用する実行可能ファイルの種類に基づいて、次のいずれかの例をご覧ください。
コンテナジョブに GPU を追加する
gcloud CLI を使用して、デフォルト イメージを使用する GPU でコンテナジョブを作成するには、gcloud batch jobs submit
コマンドを使用します。
たとえば、GPU を使用してコンテナ ジョブを作成するには、次のようにします。
hello-world-container-job-gpu.json
という名前の現在のディレクトリに、次の内容の JSON ファイルを作成します。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1", "volumes": [ "/var/lib/nvidia/lib64:/usr/local/nvidia/lib64", "/var/lib/nvidia/bin:/usr/local/nvidia/bin" ], "options": "--privileged" } } ], }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ] } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } } }
以下を置き換えます。
INSTALL_GPU_DRIVERS
: 省略可。true
に設定すると、Batch はpolicy
フィールドで指定した GPU タイプに必要なドライバをサードパーティの場所からフェッチし、Batch がユーザーに代わってインストールします。 このフィールドをfalse
(デフォルト)に設定した場合、このジョブで GPU を使用するには、GPU ドライバを手動でインストールする必要があります。MACHINE_TYPE
: マシンタイプで、ジョブの VM 用に事前定義されたもの、またはカスタムのものがありえます。マシンタイプによって、使用できる GPU のタイプが制限されます。GPU を使用してジョブを作成するには、このフィールドが必要です。GPU_TYPE
: GPU タイプ。使用可能な GPU タイプのリストは、gcloud compute accelerator-types list
コマンドを使用することで表示できます。GPU を使用してジョブを作成するには、このフィールドが必要です。GPU_COUNT
:type
フィールドで指定したタイプの GPU の数。GPU を使用してジョブを作成するには、このフィールドが必要です。ALLOWED_LOCATIONS
: 省略可。ジョブの VM インスタンスが実行できるロケーション(たとえば、regions/us-central1, zones/us-central1-a
はゾーンus-central1-a
を許可します)。許可されたロケーションを指定するには、リージョンと、必要に応じて 1 つ以上のゾーンを選択する必要があります。選択したロケーションには、このジョブに必要な GPU タイプが必要です。詳細については、allowedLocations
配列フィールドをご覧ください。
次のコマンドを実行します。
gcloud batch jobs submit example-job-gpu \ --location us-central1 \ --config hello-world-container-job-gpu.json
スクリプト ジョブに GPU を追加する
gcloud CLI を使用して、デフォルト イメージを使用する GPU でスクリプト ジョブを作成するには、gcloud batch jobs submit
コマンドを使用します。
たとえば、GPU を使用してスクリプト ジョブを作成するには、次のようにします。
hello-world-script-job-gpu.json
という名前の現在のディレクトリに、次の内容の 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", "accelerators": { "type": "GPU_TYPE", "count": GPU_COUNT } ] } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } } }
以下を置き換えます。
INSTALL_GPU_DRIVERS
: 省略可。true
に設定すると、Batch はpolicy
フィールドで指定した GPU タイプに必要なドライバをサードパーティの場所からフェッチし、Batch がユーザーに代わってインストールします。 このフィールドをfalse
(デフォルト)に設定した場合、このジョブで GPU を使用するには、GPU ドライバを手動でインストールする必要があります。MACHINE_TYPE
: マシンタイプで、ジョブの VM 用に事前定義されたもの、またはカスタムのものがありえます。マシンタイプによって、使用できる GPU のタイプが制限されます。GPU を使用してジョブを作成するには、このフィールドが必要です。GPU_TYPE
: GPU タイプ。使用可能な GPU タイプのリストは、gcloud compute accelerator-types list
コマンドを使用することで表示できます。GPU を使用してジョブを作成するには、このフィールドが必要です。GPU_COUNT
:type
フィールドで指定したタイプの GPU の数。GPU を使用してジョブを作成するには、このフィールドが必要です。ALLOWED_LOCATIONS
: 省略可。ジョブの VM インスタンスが実行できるロケーション(たとえば、regions/us-central1, zones/us-central1-a
はゾーンus-central1-a
を許可します)。許可されたロケーションを指定するには、リージョンと、必要に応じて 1 つ以上のゾーンを選択する必要があります。選択したロケーションには、このジョブに必要な GPU タイプが必要です。詳細については、allowedLocations
配列フィールドをご覧ください。
次のコマンドを実行します。
gcloud batch jobs submit example-job-gpu \ --location us-central1 \ --config hello-world-script-job-gpu.json
コンテナジョブとスクリプト ジョブに GPU を追加する
gcloud CLI を使用して、デフォルトのイメージを使用する GPU でコンテナ ジョブとスクリプト ジョブを作成するには、gcloud batch jobs submit
コマンドを使用します。
たとえば、GPU を使用してコンテナジョブとスクリプト ジョブを作成するには、次のようにします。
hello-world-container-script-job-gpu.json
という名前の現在のディレクトリに、次の内容の JSON ファイルを作成します。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1", "options": "--gpus all" } }, { "script": { "text": "echo Hello world from script task ${BATCH_TASK_INDEX}." } } ] }, "taskCount": 3, "parallelism": 1 } ], "allocationPolicy": { "instances": [ { "installGpuDrivers": INSTALL_GPU_DRIVERS, "policy": { "machineType": "MACHINE_TYPE", "accelerators": [ { "type": "GPU_TYPE", "count": GPU_COUNT } ] } } ], "location": { "allowedLocations": [ "ALLOWED_LOCATIONS" ] } } }
以下を置き換えます。
INSTALL_GPU_DRIVERS
: 省略可。true
に設定すると、Batch はpolicy
フィールドで指定した GPU タイプに必要なドライバをサードパーティの場所からフェッチし、Batch がユーザーに代わってインストールします。 このフィールドをfalse
(デフォルト)に設定した場合、このジョブで GPU を使用するには、GPU ドライバを手動でインストールする必要があります。MACHINE_TYPE
: マシンタイプで、ジョブの VM 用に事前定義されたもの、またはカスタムのものがありえます。マシンタイプによって、使用できる GPU のタイプが制限されます。GPU を使用してジョブを作成するには、このフィールドが必要です。GPU_TYPE
: GPU タイプ。使用可能な GPU タイプのリストは、gcloud compute accelerator-types list
コマンドを使用することで表示できます。GPU を使用してジョブを作成するには、このフィールドが必要です。GPU_COUNT
:type
フィールドで指定したタイプの GPU の数。GPU を使用してジョブを作成するには、このフィールドが必要です。ALLOWED_LOCATIONS
: 省略可。ジョブの VM インスタンスが実行できるロケーション(たとえば、regions/us-central1, zones/us-central1-a
はゾーンus-central1-a
を許可します)。許可されたロケーションを指定するには、リージョンと、必要に応じて 1 つ以上のゾーンを選択する必要があります。選択したロケーションには、このジョブに必要な GPU タイプが必要です。詳細については、allowedLocations
配列フィールドをご覧ください。
次のコマンドを実行します。
gcloud batch jobs submit example-job-gpu \ --location us-central1 \ --config hello-world-container-script-job-gpu.json
API
GPU をジョブに追加するには、使用する実行可能ファイルの種類に基づいて、次のいずれかの例をご覧ください。
コンテナジョブに GPU を追加する
Batch API を使用してデフォルトのイメージを使用する GPU でコンテナジョブを作成するには、jobs.create
メソッドを使用します。
たとえば、GPU を使用してコンテナ ジョブを作成するには、次のリクエストを行います。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-job-gpu
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1",
"volumes": [
"/var/lib/nvidia/lib64:/usr/local/nvidia/lib64",
"/var/lib/nvidia/bin:/usr/local/nvidia/bin"
],
"options": "--privileged"
}
}
],
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"machineType": "MACHINE_TYPE",
"accelerators": [
{
"type": "GPU_TYPE",
"count": GPU_COUNT
}
]
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
}
}
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDINSTALL_GPU_DRIVERS
: 省略可。true
に設定すると、Batch はpolicy
フィールドで指定した GPU タイプに必要なドライバをサードパーティの場所からフェッチし、Batch がユーザーに代わってインストールします。 このフィールドをfalse
(デフォルト)に設定した場合、このジョブで GPU を使用するには、GPU ドライバを手動でインストールする必要があります。MACHINE_TYPE
: マシンタイプで、ジョブの VM 用に事前定義されたもの、またはカスタムのものがありえます。マシンタイプによって、使用できる GPU のタイプが制限されます。GPU を使用してジョブを作成するには、このフィールドが必要です。GPU_TYPE
: GPU タイプ。使用可能な GPU タイプのリストは、gcloud compute accelerator-types list
コマンドを使用することで表示できます。GPU を使用してジョブを作成するには、このフィールドが必要です。GPU_COUNT
:type
フィールドで指定したタイプの GPU の数。GPU を使用してジョブを作成するには、このフィールドが必要です。ALLOWED_LOCATIONS
: 省略可。ジョブの VM インスタンスが実行できるロケーション(たとえば、regions/us-central1, zones/us-central1-a
はゾーンus-central1-a
を許可します)。許可されたロケーションを指定するには、リージョンと、必要に応じて 1 つ以上のゾーンを選択する必要があります。選択したロケーションには、このジョブに必要な GPU タイプが必要です。詳細については、allowedLocations
配列フィールドをご覧ください。
スクリプト ジョブに GPU を追加する
Batch API を使用してデフォルトのイメージを使用する GPU でスクリプト ジョブを作成するには、jobs.create
メソッドを使用します。
たとえば、GPU を使用してスクリプト ジョブを作成するには、次のリクエストを行います。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-job-gpu
{
"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",
"accelerators": [
{
"type": "GPU_TYPE",
"count": GPU_COUNT
}
]
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
}
}
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDINSTALL_GPU_DRIVERS
: 省略可。true
に設定すると、Batch はpolicy
フィールドで指定した GPU タイプに必要なドライバをサードパーティの場所からフェッチし、Batch がユーザーに代わってインストールします。 このフィールドをfalse
(デフォルト)に設定した場合、このジョブで GPU を使用するには、GPU ドライバを手動でインストールする必要があります。MACHINE_TYPE
: マシンタイプで、ジョブの VM 用に事前定義されたもの、またはカスタムのものがありえます。マシンタイプによって、使用できる GPU のタイプが制限されます。GPU を使用してジョブを作成するには、このフィールドが必要です。GPU_TYPE
: GPU タイプ。使用可能な GPU タイプのリストは、gcloud compute accelerator-types list
コマンドを使用することで表示できます。GPU を使用してジョブを作成するには、このフィールドが必要です。GPU_COUNT
:type
フィールドで指定したタイプの GPU の数。GPU を使用してジョブを作成するには、このフィールドが必要です。ALLOWED_LOCATIONS
: 省略可。ジョブの VM インスタンスが実行できるロケーション(たとえば、regions/us-central1, zones/us-central1-a
はゾーンus-central1-a
を許可します)。許可されたロケーションを指定するには、リージョンと、必要に応じて 1 つ以上のゾーンを選択する必要があります。選択したロケーションには、このジョブに必要な GPU タイプが必要です。詳細については、allowedLocations
配列フィールドをご覧ください。
コンテナジョブとスクリプト ジョブに GPU を追加する
Batch API を使用してデフォルトのイメージを使用する GPU でコンテナ ジョブとスクリプト ジョブを作成するには、jobs.create
メソッドを使用します。
たとえば、GPU を使用してコンテナジョブとスクリプト ジョブを作成するには、次のリクエストを行います。
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-job-gpu
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google_containers/cuda-vector-add:v0.1",
"options": "--gpus all"
}
},
{
"script": {
"text": "echo Hello world from script task ${BATCH_TASK_INDEX}."
}
}
]
},
"taskCount": 3,
"parallelism": 1
}
],
"allocationPolicy": {
"instances": [
{
"installGpuDrivers": INSTALL_GPU_DRIVERS,
"policy": {
"machineType": "MACHINE_TYPE",
"accelerators": [
{
"type": "GPU_TYPE",
"count": GPU_COUNT
}
]
}
}
],
"location": {
"allowedLocations": [
"ALLOWED_LOCATIONS"
]
}
}
}
以下を置き換えます。
PROJECT_ID
: プロジェクトのプロジェクト IDINSTALL_GPU_DRIVERS
: 省略可。true
に設定すると、Batch はpolicy
フィールドで指定した GPU タイプに必要なドライバをサードパーティの場所からフェッチし、Batch がユーザーに代わってインストールします。 このフィールドをfalse
(デフォルト)に設定した場合、このジョブで GPU を使用するには、GPU ドライバを手動でインストールする必要があります。MACHINE_TYPE
: マシンタイプで、ジョブの VM 用に事前定義されたもの、またはカスタムのものがありえます。マシンタイプによって、使用できる GPU のタイプが制限されます。GPU を使用してジョブを作成するには、このフィールドが必要です。GPU_TYPE
: GPU タイプ。使用可能な GPU タイプのリストは、gcloud compute accelerator-types list
コマンドを使用することで表示できます。GPU を使用してジョブを作成するには、このフィールドが必要です。GPU_COUNT
:type
フィールドで指定したタイプの GPU の数。GPU を使用してジョブを作成するには、このフィールドが必要です。ALLOWED_LOCATIONS
: 省略可。ジョブの VM インスタンスが実行できるロケーション(たとえば、regions/us-central1, zones/us-central1-a
はゾーンus-central1-a
を許可します)。許可されたロケーションを指定するには、リージョンと、必要に応じて 1 つ以上のゾーンを選択する必要があります。選択したロケーションには、このジョブに必要な GPU タイプが必要です。詳細については、allowedLocations
配列フィールドをご覧ください。
次のステップ
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。