Creare ed eseguire un job che utilizza le GPU

Questo documento spiega come creare ed eseguire un job che utilizza un'unità di elaborazione grafica (GPU).

Facoltativamente, puoi creare un job batch che aggiunge una o più GPU alle VM in esecuzione nel job. I casi d'uso comuni per i job che utilizzano GPU includono i carichi di lavoro di elaborazione dati intensiva e machine learning (ML).

Prima di iniziare

Creare un job che utilizza una GPU

Facoltativamente, puoi creare un job che aggiunga una o più unità di elaborazione grafica (GPU) a ciascuna delle VM che eseguono il job. Per creare un job che utilizzi le GPU, segui questi passaggi:

  1. Consulta la sezione Requisiti per un job per utilizzare le GPU per determinare i metodi che puoi utilizzare per creare il job.
  2. Crea un job con i metodi selezionati. Per esempi su come creare un job utilizzando i metodi consigliati, consulta la sezione Creazione di un job che utilizza una GPU.

Requisiti per l'utilizzo delle GPU in un job

Per utilizzare una GPU, un job deve:

Installa driver GPU

Per installare i driver GPU richiesti, seleziona uno dei seguenti metodi:

Definisci le risorse VM

Per utilizzare le GPU, un job deve specificare il tipo e il numero di GPU e un tipo di macchina compatibile per le VM del job. Per definire le risorse per le VM di un job, seleziona uno dei seguenti metodi:

Monta le GPU in qualsiasi container

Se un job include delle esecuzioni eseguibili dei container che vuoi utilizzare, devi anche montare le GPU su ogni container eseguibile in base all'immagine VM del job:

Creazione di un job che utilizza una GPU

Questa sezione fornisce esempi su come creare un job che utilizza una GPU utilizzando i metodi consigliati: il job installa automaticamente i driver necessari e definisce le risorse che utilizza direttamente. I job di esempio con container eseguibili montano anche le GPU nei container. Puoi creare un job che utilizzi una GPU utilizzando l'interfaccia a riga di comando gcloud o l'API batch.

gcloud

Per aggiungere una GPU a un job, consulta uno dei seguenti esempi in base ai tipi di eseguibili che vuoi utilizzare:

Aggiungere una GPU a un job container

Per creare un job di container con una GPU che utilizza l'immagine predefinita utilizzando l'interfaccia a riga di comando gcloud, usa il comando gcloud batch jobs submit.

Ad esempio, per creare un job container con una GPU:

  1. Crea un file JSON nella directory attuale denominato hello-world-container-job-gpu.json con il seguente contenuto:

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

    Sostituisci quanto segue:

    • INSTALL_GPU_DRIVERS: facoltativo. Se questo criterio viene impostato su true, Batch recupera i driver necessari per il tipo di GPU specificato nel campo policy da una posizione di terze parti e li installa per conto tuo. Se imposti questo campo su false (impostazione predefinita), devi installare i driver GPU manualmente per utilizzare qualsiasi GPU per questo job.
    • MACHINE_TYPE: il tipo di macchina, che può essere predefinita o personalizzata, per le VM del tuo job. Il tipo di macchina limita il tipo di GPU che puoi utilizzare. Per creare un job con una GPU, questo campo è obbligatorio.
    • GPU_TYPE: il tipo GPU. Puoi visualizzare un elenco dei tipi di GPU disponibili utilizzando il comando gcloud compute accelerator-types list. Per creare un job con una GPU, questo campo è obbligatorio.
    • GPU_COUNT: il numero di GPU del tipo specificato nel campo type. Per creare un job con una GPU, questo campo è obbligatorio.
    • ALLOWED_LOCATIONS: facoltativo. Le località in cui è consentita l'esecuzione delle istanze VM per il job (ad esempio, regions/us-central1, zones/us-central1-a consente la zona us-central1-a). Se specifichi una località consentita, devi selezionare la regione e, facoltativamente, una o più zone. Le località che scegli devono avere il tipo di GPU che preferisci per questo job. Per ulteriori informazioni, consulta il campo di array allowedLocations.
  2. Esegui questo comando:

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

Aggiungere una GPU a un job di script

Per creare un job di script con una GPU che utilizza l'immagine predefinita utilizzando l'interfaccia a riga di comando gcloud, utilizza il comando gcloud batch jobs submit.

Ad esempio, per creare un job di script con una GPU:

  1. Crea un file JSON nella directory attuale denominato hello-world-script-job-gpu.json con il seguente contenuto:

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

    Sostituisci quanto segue:

    • INSTALL_GPU_DRIVERS: facoltativo. Se questo criterio viene impostato su true, Batch recupera i driver necessari per il tipo di GPU specificato nel campo policy da una posizione di terze parti e li installa per conto tuo. Se imposti questo campo su false (impostazione predefinita), devi installare i driver GPU manualmente per utilizzare qualsiasi GPU per questo job.
    • MACHINE_TYPE: il tipo di macchina, che può essere predefinita o personalizzata, per le VM del tuo job. Il tipo di macchina limita il tipo di GPU che puoi utilizzare. Per creare un job con una GPU, questo campo è obbligatorio.
    • GPU_TYPE: il tipo GPU. Puoi visualizzare un elenco dei tipi di GPU disponibili utilizzando il comando gcloud compute accelerator-types list. Per creare un job con una GPU, questo campo è obbligatorio.
    • GPU_COUNT: il numero di GPU del tipo specificato nel campo type. Per creare un job con una GPU, questo campo è obbligatorio.
    • ALLOWED_LOCATIONS: facoltativo. Le località in cui è consentita l'esecuzione delle istanze VM per il job (ad esempio, regions/us-central1, zones/us-central1-a consente la zona us-central1-a). Se specifichi una località consentita, devi selezionare la regione e, facoltativamente, una o più zone. Le località che scegli devono avere il tipo di GPU che preferisci per questo job. Per ulteriori informazioni, consulta il campo di array allowedLocations.
  2. Esegui questo comando:

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

Aggiungere una GPU a un job di container e script

Per creare un job di container e script con una GPU che utilizza l'immagine predefinita, utilizzando l'interfaccia a riga di comando gcloud, utilizza il comando gcloud batch jobs submit.

Ad esempio, per creare un job di container e script con una GPU:

  1. Crea un file JSON nella directory attuale denominato hello-world-container-script-job-gpu.json con il seguente contenuto:

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

    Sostituisci quanto segue:

    • INSTALL_GPU_DRIVERS: facoltativo. Se questo criterio viene impostato su true, Batch recupera i driver necessari per il tipo di GPU specificato nel campo policy da una posizione di terze parti e li installa per conto tuo. Se imposti questo campo su false (impostazione predefinita), devi installare i driver GPU manualmente per utilizzare qualsiasi GPU per questo job.
    • MACHINE_TYPE: il tipo di macchina, che può essere predefinita o personalizzata, per le VM del tuo job. Il tipo di macchina limita il tipo di GPU che puoi utilizzare. Per creare un job con una GPU, questo campo è obbligatorio.
    • GPU_TYPE: il tipo GPU. Puoi visualizzare un elenco dei tipi di GPU disponibili utilizzando il comando gcloud compute accelerator-types list. Per creare un job con una GPU, questo campo è obbligatorio.
    • GPU_COUNT: il numero di GPU del tipo specificato nel campo type. Per creare un job con una GPU, questo campo è obbligatorio.
    • ALLOWED_LOCATIONS: facoltativo. Le località in cui è consentita l'esecuzione delle istanze VM per il job (ad esempio, regions/us-central1, zones/us-central1-a consente la zona us-central1-a). Se specifichi una località consentita, devi selezionare la regione e, facoltativamente, una o più zone. Le località che scegli devono avere il tipo di GPU che preferisci per questo job. Per ulteriori informazioni, consulta il campo di array allowedLocations.
  2. Esegui questo comando:

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

API

Per aggiungere una GPU a un job, consulta uno dei seguenti esempi in base ai tipi di eseguibili che vuoi utilizzare:

Aggiungere una GPU a un job container

Per creare un job container con una GPU che utilizza l'immagine predefinita utilizzando l'API Batch, usa il metodo jobs.create.

Ad esempio, per creare un job container con una GPU, effettua la seguente richiesta:

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

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto del tuo progetto.
  • INSTALL_GPU_DRIVERS: facoltativo. Se questo criterio viene impostato su true, Batch recupera i driver necessari per il tipo di GPU specificato nel campo policy da una posizione di terze parti e li installa per conto tuo. Se imposti questo campo su false (impostazione predefinita), devi installare i driver GPU manualmente per utilizzare qualsiasi GPU per questo job.
  • MACHINE_TYPE: il tipo di macchina, che può essere predefinita o personalizzata, per le VM del tuo job. Il tipo di macchina limita il tipo di GPU che puoi utilizzare. Per creare un job con una GPU, questo campo è obbligatorio.
  • GPU_TYPE: il tipo GPU. Puoi visualizzare un elenco dei tipi di GPU disponibili utilizzando il comando gcloud compute accelerator-types list. Per creare un job con una GPU, questo campo è obbligatorio.
  • GPU_COUNT: il numero di GPU del tipo specificato nel campo type. Per creare un job con una GPU, questo campo è obbligatorio.
  • ALLOWED_LOCATIONS: facoltativo. Le località in cui è consentita l'esecuzione delle istanze VM per il job (ad esempio, regions/us-central1, zones/us-central1-a consente la zona us-central1-a). Se specifichi una località consentita, devi selezionare la regione e, facoltativamente, una o più zone. Le località scelte devono avere il tipo di GPU desiderato per questo job. Per ulteriori informazioni, consulta il campo di array allowedLocations.

Aggiungere una GPU a un job di script

Per creare un job di script con una GPU che utilizza l'immagine predefinita utilizzando l'API Batch, usa il metodo jobs.create.

Ad esempio, per creare un job di script con una GPU, effettua la seguente richiesta:

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

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto del tuo progetto.
  • INSTALL_GPU_DRIVERS: facoltativo. Se questo criterio viene impostato su true, Batch recupera i driver necessari per il tipo di GPU specificato nel campo policy da una posizione di terze parti e li installa per conto tuo. Se imposti questo campo su false (impostazione predefinita), devi installare i driver GPU manualmente per utilizzare qualsiasi GPU per questo job.
  • MACHINE_TYPE: il tipo di macchina, che può essere predefinita o personalizzata, per le VM del tuo job. Il tipo di macchina limita il tipo di GPU che puoi utilizzare. Per creare un job con una GPU, questo campo è obbligatorio.
  • GPU_TYPE: il tipo GPU. Puoi visualizzare un elenco dei tipi di GPU disponibili utilizzando il comando gcloud compute accelerator-types list. Per creare un job con una GPU, questo campo è obbligatorio.
  • GPU_COUNT: il numero di GPU del tipo specificato nel campo type. Per creare un job con una GPU, questo campo è obbligatorio.
  • ALLOWED_LOCATIONS: facoltativo. Le località in cui è consentita l'esecuzione delle istanze VM per il job (ad esempio, regions/us-central1, zones/us-central1-a consente la zona us-central1-a). Se specifichi una località consentita, devi selezionare la regione e, facoltativamente, una o più zone. Le località scelte devono avere il tipo di GPU desiderato per questo job. Per ulteriori informazioni, consulta il campo di array allowedLocations.

Aggiungere una GPU a un job di container e script

Per creare un container e un job di script con una GPU che utilizza l'immagine predefinita utilizzando l'API Batch, usa il metodo jobs.create.

Ad esempio, per creare un job di container e script con una GPU, effettua la seguente richiesta:

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

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto del tuo progetto.
  • INSTALL_GPU_DRIVERS: facoltativo. Se questo criterio viene impostato su true, Batch recupera i driver necessari per il tipo di GPU specificato nel campo policy da una posizione di terze parti e li installa per conto tuo. Se imposti questo campo su false (impostazione predefinita), devi installare i driver GPU manualmente per utilizzare qualsiasi GPU per questo job.
  • MACHINE_TYPE: il tipo di macchina, che può essere predefinita o personalizzata, per le VM del tuo job. Il tipo di macchina limita il tipo di GPU che puoi utilizzare. Per creare un job con una GPU, questo campo è obbligatorio.
  • GPU_TYPE: il tipo GPU. Puoi visualizzare un elenco dei tipi di GPU disponibili utilizzando il comando gcloud compute accelerator-types list. Per creare un job con una GPU, questo campo è obbligatorio.
  • GPU_COUNT: il numero di GPU del tipo specificato nel campo type. Per creare un job con una GPU, questo campo è obbligatorio.
  • ALLOWED_LOCATIONS: facoltativo. Le località in cui è consentita l'esecuzione delle istanze VM per il job (ad esempio, regions/us-central1, zones/us-central1-a consente la zona us-central1-a). Se specifichi una località consentita, devi selezionare la regione e, facoltativamente, una o più zone. Le località scelte devono avere il tipo di GPU desiderato per questo job. Per ulteriori informazioni, consulta il campo di array allowedLocations.

Passaggi successivi