Créer et exécuter un job qui utilise des GPU

Ce document explique comment créer et exécuter un job qui utilise un processeur graphique (GPU).

Lorsque vous créez un job par lot, vous pouvez éventuellement ajouter un ou plusieurs GPU aux VM qui l'exécutent. Parmi les cas d'utilisation courants des tâches qui utilisent des GPU, citons le traitement intensive des données et les charges de travail de machine learning (ML).

Avant de commencer

Créer une tâche qui utilise des GPU

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 puisse utiliser des GPU afin de déterminer les méthodes que vous pouvez utiliser pour créer votre tâche.
  2. Créez un job avec les méthodes que vous avez sélectionnées. Pour obtenir des exemples de création de tâche à l'aide des méthodes recommandées, consultez la section Créer un exemple de tâche utilisant des GPU.

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

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

Une fois que vous avez déterminé comment répondre à ces exigences pour votre tâche, vous devez également définir l'emplacement et les GPU de la tâche. Les VM d'une tâche peuvent utiliser chacune un ou plusieurs GPU du type que vous spécifiez. Les emplacements autorisés pour les VM de la tâche (ou, s'ils ne sont pas définis, l'emplacement de la tâche) doivent correspondre au type de GPU spécifié. Pour en savoir plus sur la définition du type de GPU, du nombre de GPU et d'un emplacement valide pour une tâche, consultez les exemples.

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 compatibles

Si votre tâche définit une ressource de VM (l'un des sous-champs instances[]) autre que les GPU, vous devez définir ces ressources de VM de manière compatible.

Pour définir les ressources des VM d'une tâche, y compris les GPU, vous ne pouvez utiliser que les méthodes suivantes:

  • Définir les ressources directement (recommandé) : comme indiqué dans les exemples, pour définir directement les ressources des VM d'une tâche, utilisez le champ policy.
  • Définir les ressources dans un modèle:définissez les ressources pour les VM d'un job en spécifiant un modèle d'instance Compute Engine.

De plus, toutes les ressources que vous définissez doivent être compatibles avec le type et le nombre de GPU pour la tâche. Pour en savoir plus sur les ressources de VM que vous pouvez utiliser avec les GPU, consultez la section Plates-formes GPU dans la documentation Compute Engine.

Créer un exemple de job utilisant des GPU

Vous pouvez créer un job qui utilise des GPU à l'aide de gcloud CLI ou de l'API Batch.

gcloud

  1. Créez un fichier JSON qui spécifie les détails de configuration de la tâche, les sous-champs type et count du champ accelerators[], ainsi qu'un emplacement contenant ces types de GPU.

    Par exemple, pour créer une tâche de script de base qui utilise des GPU, installe automatiquement les pilotes de GPU requis et spécifie les emplacements autorisés pour les VM de la tâche, créez un fichier 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": {
                        "accelerators": [
                            {
                                "type": "GPU_TYPE",
                                "count": GPU_COUNT
                            }
                        ]
                    }
                }
            ],
            "location": {
                "allowedLocations": [
                    "ALLOWED_LOCATIONS"
                ]
            }
        }
    }
    

    Remplacez les éléments suivants :

    • INSTALL_GPU_DRIVERS : facultatif. Lorsque ce paramètre est défini 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, puis les installe pour vous. Si vous définissez ce champ sur false (par défaut), vous devez installer manuellement des pilotes de GPU pour utiliser des GPU pour ce job.

    • 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.

    • GPU_COUNT: nombre de GPU du type spécifié.

    • 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 correspondre aux types de GPU souhaités pour cette tâche. Sinon, si vous omettez ce champ, l'emplacement de la tâche doit être de type GPU. Pour en savoir plus, consultez le champ allowedLocations[].

  2. Pour créer et exécuter la tâche, utilisez la commande gcloud batch jobs submit suivante:

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
    

    Remplacez les éléments suivants :

    • JOB_NAME: nom de la tâche.

    • LOCATION: le lieu de la tâche.

    • JSON_CONFIGURATION_FILE: chemin d'accès à un fichier JSON contenant les détails de configuration de la tâche.

API

Envoyez une requête POST à la méthode jobs.create qui spécifie les détails de configuration de la tâche, les sous-champs type et count du champ accelerators[], ainsi qu'un emplacement contenant ces types de GPU.

Par exemple, pour créer une tâche de script de base qui utilise des GPU, installe automatiquement les pilotes de GPU requis et spécifie les emplacements autorisés pour les VM de la tâche, créez un fichier JSON avec le contenu suivant:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
    "taskGroups": [
        {
            "taskSpec": {
                "runnables": [
                    {
                        "script": {
                            "text": "echo Hello world from task ${BATCH_TASK_INDEX}."
                        }
                    }
                ]
            },
            "taskCount": 3,
            "parallelism": 1
        }
    ],
    "allocationPolicy": {
        "instances": [
            {
                "installGpuDrivers": INSTALL_GPU_DRIVERS,
                "policy": {
                    "accelerators": [
                        {
                            "type": "GPU_TYPE",
                            "count": GPU_COUNT
                        }
                    ]
                }
            }
        ],
        "location": {
            "allowedLocations": [
                "ALLOWED_LOCATIONS"
            ]
        }
    }
}

Remplacez les éléments suivants :

  • PROJECT_ID: ID de projet de votre projet.

  • LOCATION: le lieu de la tâche.

  • JOB_NAME: nom de la tâche.

  • INSTALL_GPU_DRIVERS : facultatif. Lorsque ce paramètre est défini 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, puis les installe pour vous. Si vous définissez ce champ sur false (par défaut), vous devez installer manuellement des pilotes de GPU pour utiliser des GPU pour ce job.

  • 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.

  • GPU_COUNT: nombre de GPU du type spécifié.

  • 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 correspondre aux types de GPU souhaités pour cette tâche. Sinon, si vous omettez ce champ, l'emplacement de la tâche doit être de type GPU. Pour en savoir plus, consultez le champ allowedLocations[].

Étapes suivantes