Job erstellen und ausführen, der GPUs verwendet

In diesem Dokument wird erläutert, wie Sie einen Job erstellen und ausführen, der eine Grafikprozessoren (Graphics Processing Unit, GPUs) verwendet.

Optional können Sie einen Batchjob erstellen, der den in Ihrem Job ausgeführten VMs eine oder mehrere GPUs hinzufügt. Häufige Anwendungsfälle für Jobs, die GPUs verwenden, sind intensive Datenverarbeitungs- und ML-Arbeitslasten.

Hinweis

Job mit GPU erstellen

Optional können Sie einen Job erstellen, der jeder der VMs, auf denen der Job ausgeführt wird, eine oder mehrere Grafikprozessoren (GPUs) hinzufügt. So erstellen Sie einen Job mit GPUs:

  1. Im Abschnitt Voraussetzungen für die Verwendung von GPUs für Jobs finden Sie die Methoden, die Sie zum Erstellen Ihres Jobs verwenden können.
  2. Erstellen Sie einen Job mit den ausgewählten Methoden. Beispiele zum Erstellen eines Jobs mit den empfohlenen Methoden finden Sie unter Job mit GPU erstellen.

Voraussetzungen für die Verwendung von GPUs für einen Job

Ein Job muss folgende Voraussetzungen erfüllen, um GPUs nutzen zu können:

GPU-Treiber installieren

Wählen Sie eine der folgenden Methoden aus, um die erforderlichen GPU-Treiber zu installieren:

  • Treiber automatisch installieren (empfohlen): Wie in den Beispielen gezeigt, können Sie die erforderlichen GPU-Treiber von einem Drittanbieterstandort abrufen und in Ihrem Namen installieren. Legen Sie dazu das Feld installGpuDrivers für den Job auf true fest.

  • Treiber manuell installieren: Diese Methode ist erforderlich, wenn eine der folgenden Bedingungen erfüllt ist:

    • Ein Job verwendet sowohl Skript als auch Container-Ausführungen und hat keinen Internetzugriff. Weitere Informationen zum Zugriff auf einen Job finden Sie unter Übersicht über Batch-Netzwerke.
    • Ein Job verwendet ein benutzerdefiniertes VM-Image.

    Die folgende Methode wird empfohlen, um die erforderlichen GPU-Treiber manuell zu installieren:

    1. Erstellen Sie ein benutzerdefiniertes VM-Image, das die GPU-Treiber enthält.

      1. Führen Sie zum Installieren von GPU-Treibern ein Installationsskript aus, das auf dem gewünschten Betriebssystem basiert:

      2. Wenn Ihr Job Container-Ausführungen enthält und kein Container-Optimized OS verwendet, müssen Sie auch das NVIDIA Container Toolkit installieren.

    2. einen Job mit dem benutzerdefinierten VM-Image mithilfe einer Compute Engine-Instanzvorlage erstellen und senden. Legen Sie das Feld installGpuDrivers für den Job auf false (Standard) fest.

VM-Ressourcen definieren

Für die Verwendung von GPUs muss ein Job den Typ und die Anzahl der GPUs und einen kompatiblen Maschinentyp für die VMs des Jobs angeben. Wählen Sie eine der folgenden Methoden aus, um die Ressourcen für die VMs eines Jobs zu definieren:

  • Ressourcen direkt definieren (empfohlen): Wie in den Beispielen gezeigt, um die Ressourcen für die VMs eines Jobs direkt zu definieren, verwenden Sie das Feld policy.
  • Ressourcen in einer Vorlage definieren:Definieren Sie die Ressourcen für die VMs eines Jobs, indem Sie eine Compute Engine-Instanzvorlage angeben. Wenn Sie in der Definition des Jobs eine Instanzvorlage angeben, müssen Sie diese Methode verwenden.

GPUs in beliebigen Containern bereitstellen

Wenn ein Job Container-Ausführungen enthält, die Sie verwenden möchten, müssen Sie die GPUs auch in jedem Container ausführen, der auf dem VM-Image für den Job ausgeführt wird:

Job erstellen, der eine GPU verwendet

Dieser Abschnitt enthält Beispiele zum Erstellen eines Jobs, der eine GPU mit den empfohlenen Methoden verwendet: Der Job installiert die erforderlichen Treiber automatisch und definiert die von ihm verwendeten Ressourcen direkt. In den Beispieljobs mit ausführbaren Container werden auch die GPUs in den Containern bereitgestellt. Sie können einen Job erstellen, der eine GPU mit der gcloud CLI oder der Batch API verwendet.

gcloud

Wenn Sie einem Job eine GPU hinzufügen möchten, sehen Sie sich eines der folgenden Beispiele für die Arten von ausführbaren Typen an, die Sie verwenden möchten:

GPU zu einem Containerjob hinzufügen

Verwenden Sie den Befehl gcloud batch jobs submit, um einen Containerjob mit einer GPU zu erstellen, die das Standard-Image mit der gcloud CLI verwendet.

So erstellen Sie beispielsweise einen Containerjob mit einer GPU:

  1. Erstellen Sie im aktuellen Verzeichnis eine JSON-Datei mit dem Namen hello-world-container-job-gpu.json und dem folgenden Inhalt:

    {
        "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"
                ]
            }
        }
    }
    

    Dabei gilt:

    • INSTALL_GPU_DRIVERS: Optional. Wenn true festgelegt ist, ruft Batch die erforderlichen Treiber für den GPU-Typ, den Sie im policy-Feld angeben, von einem Drittanbieterstandort ab und installiert sie in Ihrem Namen. Wenn Sie dieses Feld auf false (Standard) setzen, müssen Sie GPU-Treiber manuell installieren, um GPUs für diesen Job zu verwenden.
    • MACHINE_TYPE: der Maschinentyp, der für die VMs Ihres Jobs vordefiniert oder benutzerdefiniert sein kann. Der Maschinentyp schränkt den GPU-Typ ein, den Sie verwenden können. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
    • GPU_TYPE ist der Typ GPU. Mit dem Befehl gcloud compute accelerator-types list können Sie eine Liste der verfügbaren GPU-Typen aufrufen. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
    • GPU_COUNT: die Anzahl der GPUs des Typs, die Sie im Feld type angegeben haben. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
    • ALLOWED_LOCATIONS: Optional. Die Standorte, an denen die VM-Instanzen für Ihren Job ausgeführt werden dürfen (z. B. erlaubt regions/us-central1, zones/us-central1-a die Zone us-central1-a). Wenn Sie einen zulässigen Standort angeben, müssen Sie die Region und optional eine oder mehrere Zonen auswählen. Die von Ihnen ausgewählten Standorte müssen den gewünschten GPU-Typ für diesen Job haben. Weitere Informationen finden Sie unter allowedLocations-Arrayfeld.
  2. Führen Sie dazu diesen Befehl aus:

    gcloud batch jobs submit example-job-gpu \
      --location us-central1 \
      --config hello-world-container-job-gpu.json
    

GPU zu einem Skriptjob hinzufügen

Verwenden Sie den Befehl gcloud batch jobs submit, um einen Skriptjob mit einer GPU zu erstellen, die das Standard-Image mit der gcloud CLI verwendet.

So erstellen Sie beispielsweise einen Skriptjob mit einer GPU:

  1. Erstellen Sie im aktuellen Verzeichnis eine JSON-Datei mit dem Namen hello-world-script-job-gpu.json und dem folgenden Inhalt:

    {
        "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"
                ]
            }
        }
    }
    

    Dabei gilt:

    • INSTALL_GPU_DRIVERS: Optional. Wenn true festgelegt ist, ruft Batch die erforderlichen Treiber für den GPU-Typ, den Sie im policy-Feld angeben, von einem Drittanbieterstandort ab und installiert sie in Ihrem Namen. Wenn Sie dieses Feld auf false (Standard) setzen, müssen Sie GPU-Treiber manuell installieren, um GPUs für diesen Job zu verwenden.
    • MACHINE_TYPE: der Maschinentyp, der für die VMs Ihres Jobs vordefiniert oder benutzerdefiniert sein kann. Der Maschinentyp schränkt den GPU-Typ ein, den Sie verwenden können. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
    • GPU_TYPE ist der Typ GPU. Mit dem Befehl gcloud compute accelerator-types list können Sie eine Liste der verfügbaren GPU-Typen aufrufen. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
    • GPU_COUNT: die Anzahl der GPUs des Typs, die Sie im Feld type angegeben haben. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
    • ALLOWED_LOCATIONS: Optional. Die Standorte, an denen die VM-Instanzen für Ihren Job ausgeführt werden dürfen (z. B. erlaubt regions/us-central1, zones/us-central1-a die Zone us-central1-a). Wenn Sie einen zulässigen Standort angeben, müssen Sie die Region und optional eine oder mehrere Zonen auswählen. Die von Ihnen ausgewählten Standorte müssen den gewünschten GPU-Typ für diesen Job haben. Weitere Informationen finden Sie unter allowedLocations-Arrayfeld.
  2. Führen Sie dazu diesen Befehl aus:

    gcloud batch jobs submit example-job-gpu \
      --location us-central1 \
      --config hello-world-script-job-gpu.json
    

GPU zu einem Container- und Skriptjob hinzufügen

Verwenden Sie den Befehl gcloud batch jobs submit, um einen Container- und Skriptjob mit einer GPU zu erstellen, die das Standard-Image mit der gcloud CLI verwendet.

So erstellen Sie beispielsweise einen Container- und Skriptjob mit einer GPU:

  1. Erstellen Sie im aktuellen Verzeichnis eine JSON-Datei mit dem Namen hello-world-container-script-job-gpu.json und dem folgenden Inhalt:

    {
        "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"
                ]
            }
        }
    }
    

    Dabei gilt:

    • INSTALL_GPU_DRIVERS: Optional. Wenn true festgelegt ist, ruft Batch die erforderlichen Treiber für den GPU-Typ, den Sie im policy-Feld angeben, von einem Drittanbieterstandort ab und installiert sie in Ihrem Namen. Wenn Sie dieses Feld auf false (Standard) setzen, müssen Sie GPU-Treiber manuell installieren, um GPUs für diesen Job zu verwenden.
    • MACHINE_TYPE: der Maschinentyp, der für die VMs Ihres Jobs vordefiniert oder benutzerdefiniert sein kann. Der Maschinentyp schränkt den GPU-Typ ein, den Sie verwenden können. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
    • GPU_TYPE ist der Typ GPU. Mit dem Befehl gcloud compute accelerator-types list können Sie eine Liste der verfügbaren GPU-Typen aufrufen. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
    • GPU_COUNT: die Anzahl der GPUs des Typs, die Sie im Feld type angegeben haben. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
    • ALLOWED_LOCATIONS: Optional. Die Standorte, an denen die VM-Instanzen für Ihren Job ausgeführt werden dürfen (z. B. erlaubt regions/us-central1, zones/us-central1-a die Zone us-central1-a). Wenn Sie einen zulässigen Standort angeben, müssen Sie die Region und optional eine oder mehrere Zonen auswählen. Die von Ihnen ausgewählten Standorte müssen den gewünschten GPU-Typ für diesen Job haben. Weitere Informationen finden Sie unter allowedLocations-Arrayfeld.
  2. Führen Sie dazu diesen Befehl aus:

    gcloud batch jobs submit example-job-gpu \
      --location us-central1 \
      --config hello-world-container-script-job-gpu.json
    

API

Wenn Sie einem Job eine GPU hinzufügen möchten, sehen Sie sich eines der folgenden Beispiele für die Arten von ausführbaren Typen an, die Sie verwenden möchten:

GPU zu einem Containerjob hinzufügen

Verwenden Sie die Methode jobs.create, um einen Containerjob mit einer GPU zu erstellen, die das Standard-Image mithilfe der Batch API verwendet.

So erstellen Sie beispielsweise einen Containerjob mit einer 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"
            ]
        }
    }
}

Dabei gilt:

  • PROJECT_ID: Die Projekt-ID Ihres Projekts.
  • INSTALL_GPU_DRIVERS: Optional. Wenn true festgelegt ist, ruft Batch die erforderlichen Treiber für den GPU-Typ, den Sie im policy-Feld angeben, von einem Drittanbieterstandort ab und installiert sie in Ihrem Namen. Wenn Sie dieses Feld auf false (Standard) setzen, müssen Sie GPU-Treiber manuell installieren, um GPUs für diesen Job zu verwenden.
  • MACHINE_TYPE: der Maschinentyp, der für die VMs Ihres Jobs vordefiniert oder benutzerdefiniert sein kann. Der Maschinentyp schränkt den GPU-Typ ein, den Sie verwenden können. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
  • GPU_TYPE ist der Typ GPU. Mit dem Befehl gcloud compute accelerator-types list können Sie eine Liste der verfügbaren GPU-Typen aufrufen. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
  • GPU_COUNT: die Anzahl der GPUs des Typs, die Sie im Feld type angegeben haben. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
  • ALLOWED_LOCATIONS: Optional. Die Standorte, an denen die VM-Instanzen für Ihren Job ausgeführt werden dürfen (z. B. erlaubt regions/us-central1, zones/us-central1-a die Zone us-central1-a). Wenn Sie einen zulässigen Standort angeben, müssen Sie die Region und optional eine oder mehrere Zonen auswählen. Die von Ihnen ausgewählten Standorte müssen den gewünschten GPU-Typ für diesen Job haben. Weitere Informationen finden Sie unter allowedLocations-Arrayfeld.

GPU zu einem Skriptjob hinzufügen

Verwenden Sie die Methode jobs.create, um einen Skriptjob mit einer GPU zu erstellen, die das Standard-Image mithilfe der Batch API verwendet.

Wenn Sie beispielsweise einen Skriptjob mit einer GPU erstellen möchten, stellen Sie die folgende Anfrage ein:

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"
            ]
        }
    }
}

Dabei gilt:

  • PROJECT_ID: Die Projekt-ID Ihres Projekts.
  • INSTALL_GPU_DRIVERS: Optional. Wenn true festgelegt ist, ruft Batch die erforderlichen Treiber für den GPU-Typ, den Sie im policy-Feld angeben, von einem Drittanbieterstandort ab und installiert sie in Ihrem Namen. Wenn Sie dieses Feld auf false (Standard) setzen, müssen Sie GPU-Treiber manuell installieren, um GPUs für diesen Job zu verwenden.
  • MACHINE_TYPE: der Maschinentyp, der für die VMs Ihres Jobs vordefiniert oder benutzerdefiniert sein kann. Der Maschinentyp schränkt den GPU-Typ ein, den Sie verwenden können. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
  • GPU_TYPE ist der Typ GPU. Mit dem Befehl gcloud compute accelerator-types list können Sie eine Liste der verfügbaren GPU-Typen aufrufen. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
  • GPU_COUNT: die Anzahl der GPUs des Typs, die Sie im Feld type angegeben haben. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
  • ALLOWED_LOCATIONS: Optional. Die Standorte, an denen die VM-Instanzen für Ihren Job ausgeführt werden dürfen (z. B. erlaubt regions/us-central1, zones/us-central1-a die Zone us-central1-a). Wenn Sie einen zulässigen Standort angeben, müssen Sie die Region und optional eine oder mehrere Zonen auswählen. Die von Ihnen ausgewählten Standorte müssen den gewünschten GPU-Typ für diesen Job haben. Weitere Informationen finden Sie unter allowedLocations-Arrayfeld.

GPU zu einem Container- und Skriptjob hinzufügen

Verwenden Sie die Methode jobs.create, um einen Container- und Skriptjob mit einer GPU zu erstellen, die das Standard-Image mithilfe der Batch API verwendet.

So erstellen Sie beispielsweise einen Container- und Skriptjob mit einer GPU, indem Sie die folgende Anfrage stellen:

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"
            ]
        }
    }
}

Dabei gilt:

  • PROJECT_ID: Die Projekt-ID Ihres Projekts.
  • INSTALL_GPU_DRIVERS: Optional. Wenn true festgelegt ist, ruft Batch die erforderlichen Treiber für den GPU-Typ, den Sie im policy-Feld angeben, von einem Drittanbieterstandort ab und installiert sie in Ihrem Namen. Wenn Sie dieses Feld auf false (Standard) setzen, müssen Sie GPU-Treiber manuell installieren, um GPUs für diesen Job zu verwenden.
  • MACHINE_TYPE: der Maschinentyp, der für die VMs Ihres Jobs vordefiniert oder benutzerdefiniert sein kann. Der Maschinentyp schränkt den GPU-Typ ein, den Sie verwenden können. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
  • GPU_TYPE ist der Typ GPU. Mit dem Befehl gcloud compute accelerator-types list können Sie eine Liste der verfügbaren GPU-Typen aufrufen. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
  • GPU_COUNT: die Anzahl der GPUs des Typs, die Sie im Feld type angegeben haben. Dieses Feld ist erforderlich, um einen Job mit einer GPU zu erstellen.
  • ALLOWED_LOCATIONS: Optional. Die Standorte, an denen die VM-Instanzen für Ihren Job ausgeführt werden dürfen (z. B. erlaubt regions/us-central1, zones/us-central1-a die Zone us-central1-a). Wenn Sie einen zulässigen Standort angeben, müssen Sie die Region und optional eine oder mehrere Zonen auswählen. Die von Ihnen ausgewählten Standorte müssen den gewünschten GPU-Typ für diesen Job haben. Weitere Informationen finden Sie unter allowedLocations-Arrayfeld.

Nächste Schritte