GPU を使用するジョブを作成して実行する

このドキュメントでは、グラフィック プロセッシング ユニット(GPU)を使用するジョブを作成して実行する方法について説明します。

必要に応じて、1 つ以上の GPU をジョブで実行されている VM に追加するバッチジョブを作成できます。GPU を使用するジョブの一般的なユースケースには、集中的なデータ処理と機械学習(ML)のワークロードが含まれています。

始める前に

GPU を使用するジョブを作成する

必要に応じて、ジョブを実行する各 VM に 1 つ以上のグラフィック プロセッシング ユニット(GPU)を追加するジョブを作成することもできます。GPU を使用するジョブを作成するには、次のようにします。

  1. GPU を使用するジョブの要件を確認して、ジョブの作成に使用できるメソッドを決定します。
  2. 選択したメソッドを使用してジョブを作成します。推奨の方法を使用してジョブを作成する例については、GPU を使用するジョブの作成をご覧ください。

ジョブが GPU を使用するための要件

GPU を使用するには、ジョブで次の処理をすべて行う必要があります。

GPU ドライバをインストールする

必要な GPU ドライバをインストールするには、次のいずれかの方法を選択します。

VM リソースを定義する

GPU を使用するには、ジョブで GPU のタイプと数、ジョブの VM と互換性のあるマシンタイプを指定する必要があります。ジョブの VM のリソースを定義するには、次のいずれかの方法を選択します。

  • リソースを直接定義する(推奨): に示すように、ジョブの VM のリソースを直接定義するには、policyフィールドを使用します。
  • テンプレート内のリソースを定義する: Compute Engine インスタンス テンプレートを指定して、ジョブの VM のリソースを定義します。ジョブの定義にインスタンス テンプレートを含める場合は、この方法を使用する必要があります。

任意のコンテナに GPU をマウントする

ジョブに GPU を使用するコンテナ実行可能ファイルが含まれている場合は、ジョブの VM イメージに基づいて、各コンテナ実行可能ファイルに GPU をマウントする必要があります。

  • ジョブでデフォルトの VM イメージを使用し、コンテナ実行可能ファイルのみがある場合、または Container-Optimized OS のカスタム イメージを使用している場合は、次のようにします。
  • それ以外で、デフォルトの VM イメージを使用していて、コンテナとスクリプトで実行可能なファイルがある場合、またはジョブが Container-Optimized OS 以外のカスタム VM イメージを使用している場合は、次のようにします。

GPU を使用するジョブの作成

このセクションでは、推奨される方法によって、GPU を使用するジョブを作成する方法を説明しています。ジョブは必要なドライバを自動的にインストールし、使用するリソースを直接定義します。コンテナで実行可能なファイルがあるジョブの例でも、GPU をコンテナにマウントします。GPU を使用するジョブは、gcloud CLI または Batch API を使用して作成できます。

gcloud

GPU をジョブに追加するには、使用する実行可能ファイルの種類に基づいて、次のいずれかの例をご覧ください。

コンテナジョブに GPU を追加する

gcloud CLI を使用して、デフォルト イメージを使用する GPU でコンテナジョブを作成するには、gcloud batch jobs submit コマンドを使用します。

たとえば、GPU を使用してコンテナ ジョブを作成するには、次のようにします。

  1. 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 配列フィールドをご覧ください。
  2. 次のコマンドを実行します。

    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 を使用してスクリプト ジョブを作成するには、次のようにします。

  1. 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 配列フィールドをご覧ください。
  2. 次のコマンドを実行します。

    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 を使用してコンテナジョブとスクリプト ジョブを作成するには、次のようにします。

  1. 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 配列フィールドをご覧ください。
  2. 次のコマンドを実行します。

    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: プロジェクトのプロジェクト ID
  • 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 配列フィールドをご覧ください。

スクリプト ジョブに 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: プロジェクトのプロジェクト ID
  • 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 配列フィールドをご覧ください。

コンテナジョブとスクリプト ジョブに 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: プロジェクトのプロジェクト ID
  • 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 配列フィールドをご覧ください。

次のステップ