Créer et exécuter une tâche qui utilise des GPU

Ce document explique comment créer et exécuter une tâche qui utilise une unité de traitement graphique (GPU).

Vous pouvez également créer une tâche par lot qui ajoute un ou plusieurs GPU aux VM exécutées dans votre tâche. Les cas d'utilisation courants de tâches utilisant des GPU incluent les charges de travail intensives de traitement des données et de machine learning (ML).

Avant de commencer

Créer une tâche utilisant un GPU

Vous pouvez éventuellement créer une tâche qui ajoute une ou plusieurs unités de traitement graphique (GPU) à chacune des VM exécutant la tâche. Pour créer une tâche qui utilise des GPU, procédez comme suit:

  1. Consultez la section Conditions requises pour qu'une tâche utilise des GPU afin de déterminer les méthodes vous permettant de créer cette tâche.
  2. Créez une tâche avec les méthodes sélectionnées. Pour obtenir des exemples de création de tâches à l'aide des méthodes recommandées, consultez la section Créer une tâche utilisant un GPU.

Conditions requises pour qu'une tâche utilise des GPU

Pour utiliser des GPU, une tâche doit effectuer les opérations suivantes:

Installer des pilotes de GPU.

Pour installer les pilotes de GPU requis, sélectionnez l'une des méthodes suivantes:

Définir les ressources de VM

Pour utiliser des GPU, une tâche doit spécifier le type et le nombre de GPU, ainsi qu'un type de machine compatible avec les VM de la tâche. Pour définir les ressources des VM d'un job, sélectionnez l'une des méthodes suivantes:

  • Définir les ressources directement (recommandé) : comme indiqué dans les exemples, utilisez le champ policy pour définir directement les ressources des VM d'une tâche.
  • Définissez les ressources dans un modèle:définissez les ressources pour les VM d'une tâche en spécifiant un modèle d'instance Compute Engine. Si vous incluez un modèle d'instance dans la définition de votre tâche, vous devez utiliser cette méthode.

Installer des GPU sur n'importe quel conteneur

Si une tâche inclut des exécutables de conteneur que vous souhaitez utiliser avec des GPU, vous devez également installer les GPU sur chaque conteneur exécutable en fonction de l'image de VM de la tâche:

  • Si une tâche utilise l'image de VM par défaut et ne comporte que des conteneurs exécutables ou une image personnalisée de Container-Optimized OS, procédez comme suit :
  • Sinon, si une tâche utilise l'image de VM par défaut et dispose de conteneurs et de scripts exécutables, ou si une tâche utilise une image de VM personnalisée autre que Container-Optimized OS, procédez comme suit :

Créer une tâche utilisant un GPU

Cette section fournit des exemples de création de tâches utilisant un GPU à l'aide des méthodes recommandées: la tâche installe automatiquement les pilotes requis et définit les ressources qu'elle utilise directement. Les exemples de tâches avec des exécutables de conteneur installent également les GPU sur les conteneurs. Vous pouvez créer une tâche qui utilise un GPU à l'aide de gcloud CLI ou de l'API Batch.

gcloud

Pour ajouter un GPU à une tâche, consultez l'un des exemples suivants, en fonction des types d'exécutables que vous souhaitez utiliser:

Ajouter un GPU à une tâche de conteneur

Pour créer une tâche de conteneur avec un GPU utilisant l'image par défaut à l'aide de gcloud CLI, exécutez la commande gcloud batch jobs submit.

Par exemple, pour créer une tâche de conteneur avec un GPU:

  1. Dans le répertoire actuel, créez un fichier JSON nommé hello-world-container-job-gpu.json avec le contenu suivant:

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

    Remplacez les éléments suivants :

    • INSTALL_GPU_DRIVERS : facultatif. Lorsqu'elle est définie sur true, Batch récupère les pilotes requis pour le type de GPU que vous spécifiez dans le champ policy à partir d'un emplacement tiers, et les installe en votre nom. Si vous définissez ce champ sur false (valeur par défaut), vous devez installer manuellement les pilotes de GPU pour utiliser les GPU de cette tâche.
    • MACHINE_TYPE: type de machine, qui peut être prédéfini ou personnalisé, pour les VM de votre job. Le type de machine limite le type de GPU que vous pouvez utiliser. Pour créer une tâche avec un GPU, ce champ est obligatoire.
    • GPU_TYPE: type de GPU. Vous pouvez afficher la liste des types de GPU disponibles à l'aide de la commande gcloud compute accelerator-types list. Pour créer une tâche avec un GPU, ce champ est obligatoire.
    • GPU_COUNT: nombre de GPU du type que vous avez spécifié dans le champ type. Pour créer une tâche avec un GPU, ce champ est obligatoire.
    • ALLOWED_LOCATIONS : facultatif. Emplacements où les instances de VM de votre job sont autorisées à s'exécuter (par exemple, regions/us-central1, zones/us-central1-a autorise la zone us-central1-a). Si vous spécifiez un emplacement autorisé, vous devez sélectionner la région et, éventuellement, une ou plusieurs zones. Les emplacements que vous choisissez doivent disposer du type de GPU souhaité pour cette tâche. Pour en savoir plus, consultez le champ de tableau allowedLocations.
  2. Exécutez la commande suivante :

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

Ajouter un GPU à une tâche de script

Pour créer une tâche de script avec un GPU utilisant l'image par défaut à l'aide de gcloud CLI, exécutez la commande gcloud batch jobs submit.

Par exemple, pour créer une tâche de script avec un GPU, procédez comme suit:

  1. Dans le répertoire actuel, créez un fichier JSON nommé hello-world-script-job-gpu.json avec le contenu suivant:

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

    Remplacez les éléments suivants :

    • INSTALL_GPU_DRIVERS : facultatif. Lorsqu'elle est définie sur true, Batch récupère les pilotes requis pour le type de GPU que vous spécifiez dans le champ policy à partir d'un emplacement tiers, et les installe en votre nom. Si vous définissez ce champ sur false (valeur par défaut), vous devez installer manuellement les pilotes de GPU pour utiliser les GPU de cette tâche.
    • MACHINE_TYPE: type de machine, qui peut être prédéfini ou personnalisé, pour les VM de votre job. Le type de machine limite le type de GPU que vous pouvez utiliser. Pour créer une tâche avec un GPU, ce champ est obligatoire.
    • GPU_TYPE: type de GPU. Vous pouvez afficher la liste des types de GPU disponibles à l'aide de la commande gcloud compute accelerator-types list. Pour créer une tâche avec un GPU, ce champ est obligatoire.
    • GPU_COUNT: nombre de GPU du type que vous avez spécifié dans le champ type. Pour créer une tâche avec un GPU, ce champ est obligatoire.
    • ALLOWED_LOCATIONS : facultatif. Emplacements où les instances de VM de votre job sont autorisées à s'exécuter (par exemple, regions/us-central1, zones/us-central1-a autorise la zone us-central1-a). Si vous spécifiez un emplacement autorisé, vous devez sélectionner la région et, éventuellement, une ou plusieurs zones. Les emplacements que vous choisissez doivent disposer du type de GPU souhaité pour cette tâche. Pour en savoir plus, consultez le champ de tableau allowedLocations.
  2. Exécutez la commande suivante :

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

Ajouter un GPU à une tâche de conteneur et de script

Pour créer un conteneur et une tâche de script avec un GPU utilisant l'image par défaut à l'aide de gcloud CLI, exécutez la commande gcloud batch jobs submit.

Par exemple, pour créer une tâche de conteneur et de script avec un GPU:

  1. Dans le répertoire actuel, créez un fichier JSON nommé hello-world-container-script-job-gpu.json avec le contenu suivant:

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

    Remplacez les éléments suivants :

    • INSTALL_GPU_DRIVERS : facultatif. Lorsqu'elle est définie sur true, Batch récupère les pilotes requis pour le type de GPU que vous spécifiez dans le champ policy à partir d'un emplacement tiers, et les installe en votre nom. Si vous définissez ce champ sur false (valeur par défaut), vous devez installer manuellement les pilotes de GPU pour utiliser les GPU de cette tâche.
    • MACHINE_TYPE: type de machine, qui peut être prédéfini ou personnalisé, pour les VM de votre job. Le type de machine limite le type de GPU que vous pouvez utiliser. Pour créer une tâche avec un GPU, ce champ est obligatoire.
    • GPU_TYPE: type de GPU. Vous pouvez afficher la liste des types de GPU disponibles à l'aide de la commande gcloud compute accelerator-types list. Pour créer une tâche avec un GPU, ce champ est obligatoire.
    • GPU_COUNT: nombre de GPU du type que vous avez spécifié dans le champ type. Pour créer une tâche avec un GPU, ce champ est obligatoire.
    • ALLOWED_LOCATIONS : facultatif. Emplacements où les instances de VM de votre job sont autorisées à s'exécuter (par exemple, regions/us-central1, zones/us-central1-a autorise la zone us-central1-a). Si vous spécifiez un emplacement autorisé, vous devez sélectionner la région et, éventuellement, une ou plusieurs zones. Les emplacements que vous choisissez doivent disposer du type de GPU souhaité pour cette tâche. Pour en savoir plus, consultez le champ de tableau allowedLocations.
  2. Exécutez la commande suivante :

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

API

Pour ajouter un GPU à une tâche, consultez l'un des exemples suivants, en fonction des types d'exécutables que vous souhaitez utiliser:

Ajouter un GPU à une tâche de conteneur

Pour créer une tâche de conteneur avec un GPU qui utilise l'image par défaut à l'aide de l'API Batch, utilisez la méthode jobs.create.

Par exemple, pour créer une tâche de conteneur avec un GPU, exécutez la requête suivante:

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

Remplacez les éléments suivants :

  • PROJECT_ID: ID de votre projet.
  • INSTALL_GPU_DRIVERS : facultatif. Lorsqu'elle est définie sur true, Batch récupère les pilotes requis pour le type de GPU que vous spécifiez dans le champ policy à partir d'un emplacement tiers, et les installe en votre nom. Si vous définissez ce champ sur false (valeur par défaut), vous devez installer manuellement les pilotes de GPU pour utiliser les GPU de cette tâche.
  • MACHINE_TYPE: type de machine, qui peut être prédéfini ou personnalisé, pour les VM de votre job. Le type de machine limite le type de GPU que vous pouvez utiliser. Pour créer une tâche avec un GPU, ce champ est obligatoire.
  • GPU_TYPE: type de GPU. Vous pouvez afficher la liste des types de GPU disponibles à l'aide de la commande gcloud compute accelerator-types list. Pour créer une tâche avec un GPU, ce champ est obligatoire.
  • GPU_COUNT: nombre de GPU du type que vous avez spécifié dans le champ type. Pour créer une tâche avec un GPU, ce champ est obligatoire.
  • ALLOWED_LOCATIONS : facultatif. Emplacements où les instances de VM de votre job sont autorisées à s'exécuter (par exemple, regions/us-central1, zones/us-central1-a autorise la zone us-central1-a). Si vous spécifiez un emplacement autorisé, vous devez sélectionner la région et, éventuellement, une ou plusieurs zones. Les emplacements que vous choisissez doivent disposer du type de GPU souhaité pour cette tâche. Pour en savoir plus, consultez le champ de tableau allowedLocations.

Ajouter un GPU à une tâche de script

Pour créer une tâche de script avec un GPU qui utilise l'image par défaut à l'aide de l'API Batch, utilisez la méthode jobs.create.

Par exemple, pour créer une tâche de script avec un GPU, exécutez la requête suivante:

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

Remplacez les éléments suivants :

  • PROJECT_ID: ID de votre projet.
  • INSTALL_GPU_DRIVERS : facultatif. Lorsqu'elle est définie sur true, Batch récupère les pilotes requis pour le type de GPU que vous spécifiez dans le champ policy à partir d'un emplacement tiers, et les installe en votre nom. Si vous définissez ce champ sur false (valeur par défaut), vous devez installer manuellement les pilotes de GPU pour utiliser les GPU de cette tâche.
  • MACHINE_TYPE: type de machine, qui peut être prédéfini ou personnalisé, pour les VM de votre job. Le type de machine limite le type de GPU que vous pouvez utiliser. Pour créer une tâche avec un GPU, ce champ est obligatoire.
  • GPU_TYPE: type de GPU. Vous pouvez afficher la liste des types de GPU disponibles à l'aide de la commande gcloud compute accelerator-types list. Pour créer une tâche avec un GPU, ce champ est obligatoire.
  • GPU_COUNT: nombre de GPU du type que vous avez spécifié dans le champ type. Pour créer une tâche avec un GPU, ce champ est obligatoire.
  • ALLOWED_LOCATIONS : facultatif. Emplacements où les instances de VM de votre job sont autorisées à s'exécuter (par exemple, regions/us-central1, zones/us-central1-a autorise la zone us-central1-a). Si vous spécifiez un emplacement autorisé, vous devez sélectionner la région et, éventuellement, une ou plusieurs zones. Les emplacements que vous choisissez doivent disposer du type de GPU souhaité pour cette tâche. Pour en savoir plus, consultez le champ de tableau allowedLocations.

Ajouter un GPU à une tâche de conteneur et de script

Pour créer un conteneur et une tâche de script avec un GPU qui utilise l'image par défaut à l'aide de l'API Batch, utilisez la méthode jobs.create.

Par exemple, pour créer une tâche de conteneur et de script avec un GPU, exécutez la requête suivante:

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

Remplacez les éléments suivants :

  • PROJECT_ID: ID de votre projet.
  • INSTALL_GPU_DRIVERS : facultatif. Lorsqu'elle est définie sur true, Batch récupère les pilotes requis pour le type de GPU que vous spécifiez dans le champ policy à partir d'un emplacement tiers, et les installe en votre nom. Si vous définissez ce champ sur false (valeur par défaut), vous devez installer manuellement les pilotes de GPU pour utiliser les GPU de cette tâche.
  • MACHINE_TYPE: type de machine, qui peut être prédéfini ou personnalisé, pour les VM de votre job. Le type de machine limite le type de GPU que vous pouvez utiliser. Pour créer une tâche avec un GPU, ce champ est obligatoire.
  • GPU_TYPE: type de GPU. Vous pouvez afficher la liste des types de GPU disponibles à l'aide de la commande gcloud compute accelerator-types list. Pour créer une tâche avec un GPU, ce champ est obligatoire.
  • GPU_COUNT: nombre de GPU du type que vous avez spécifié dans le champ type. Pour créer une tâche avec un GPU, ce champ est obligatoire.
  • ALLOWED_LOCATIONS : facultatif. Emplacements où les instances de VM de votre job sont autorisées à s'exécuter (par exemple, regions/us-central1, zones/us-central1-a autorise la zone us-central1-a). Si vous spécifiez un emplacement autorisé, vous devez sélectionner la région et, éventuellement, une ou plusieurs zones. Les emplacements que vous choisissez doivent disposer du type de GPU souhaité pour cette tâche. Pour en savoir plus, consultez le champ de tableau allowedLocations.

Étapes suivantes