Améliorer l'accessibilité en utilisant la flexibilité des instances

Ce document explique comment créer et exécuter une tâche Batch qui utilise la flexibilité des instances. La flexibilité des instances vous permet d'autoriser une tâche à s'exécuter sur plusieurs types de machines que vous spécifiez et que vous pouvez éventuellement classer.

En autorisant davantage de types de machines pour une tâche, vous pouvez utiliser la flexibilité des instances pour améliorer la disponibilité, qui correspond à la probabilité que des ressources soient disponibles pour exécuter votre tâche. Pour en savoir plus sur le choix des fonctionnalités de disponibilité à utiliser pour votre charge de travail, consultez Améliorer la disponibilité des ressources. Par exemple, la flexibilité des instances peut vous aider à effectuer les opérations suivantes :

  • Réduire la probabilité de erreurs de disponibilité des ressources et les retards de planification associés.
  • Sélectionner des ressources avec une disponibilité plus élevée pour aider les tâches à se terminer plus rapidement, par exemple :
    • Augmenter la probabilité d'obtenir davantage d'instances pour les tâches qui prennent en charge le traitement parallèle.
    • Obtenir des VM Spot moins susceptibles d'être préemptées.

Avant de commencer

  1. Si vous n'avez jamais utilisé Batch, consultez Premiers pas avec Batch et activez Batch en remplissant les prérequis pour les projets et les utilisateurs.
  2. Pour obtenir les autorisations nécessaires pour créer une tâche, demandez à votre administrateur de vous accorder les rôles IAM suivants :

    Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

    Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

Restrictions

Lorsqu'une tâche utilise la flexibilité des instances, toutes les restrictions suivantes s'appliquent :

  • L'amélioration de la disponibilité augmente avec le nombre de types de machines qu'une tâche est autorisée à utiliser.

  • La tâche ne peut pas spécifier le modèle de provisionnement FLEX_START ni le modèle de provisionnement RESERVATION_BOUND.

  • La tâche ne peut pas utiliser une réservation spécifiquement ciblée. (Le reservation champ doit être non défini ou défini sur NO_RESERVATION.)

    Une réservation spécifiquement ciblée inclut toutes les réservations pour le modèle de provisionnement RESERVATION_BOUND et certaines réservations pour le modèle de provisionnement STANDARD. Ces fonctionnalités sont intrinsèquement incompatibles, car la création d'instance ne peut réussir que pour le type de machine de la réservation.

  • Chaque tâche peut comporter jusqu'à 50 sélections d'instances.

  • Chaque sélection d'instance dans une tâche doit avoir un nom unique, un classement unique et un ou plusieurs types de machines uniques.

  • Les types de machines ne peuvent pas être répétés. Incluez chaque type de machine dans une seule sélection d'instance par tâche.

  • Chaque tâche peut comporter jusqu'à 200 types de machines uniques dans ses sélections d'instances.

  • Bien que la spécification de plusieurs types de machines dans la même sélection d'instance soit facultative, elle est obligatoire si vous souhaitez des ressources avec une disponibilité plus élevée.

    • Batch tente de sélectionner un ou plusieurs types de machines avec la disponibilité la plus élevée uniquement lorsque la sélection d'instance pour un classement comporte plusieurs types de machines. Par exemple, cette sélection est importante si vous souhaitez que votre tâche comporte des VM Spot moins susceptibles d'être préemptées ou davantage d'instances pour une tâche pouvant exécuter des tâches en parallèle.
    • Sinon, lorsque la sélection d'instance pour un classement ne comporte qu'un seul type de machine, la flexibilité des instances permet uniquement d'éviter les erreurs de disponibilité des ressources.
  • La tâche ne peut pas inclure le machineType champ, et le type de machine pour tout modèle d'instance spécifié par la tâche est ignoré.

  • Vous devez vérifier que chaque propriété que vous spécifiez pour la tâche est compatible avec chaque type de machine autorisé. Sinon, la tâche peut échouer après avoir été envoyée, car elle ne peut pas créer d'instances. Par exemple, nous vous recommandons de vérifier qu'au moins les propriétés suivantes d'une tâche sont compatibles avec tous les types de machines :

    • emplacement (champ allowedLocations[] s'il est spécifié, sinon location)
    • ressources de calcul par tâche (champ computeResource)
    • disques et images (champs volumes[], disk[] et bootDisk)
    • réseau (champ network)
    • toutes les autres propriétés d'instance (sous-champs instances[]) :

      • configuration minimale de la plate-forme du CPU (champ minCpuPlatform)
      • modèle de provisionnement (champ provisioningModel)
      • GPU (champ accelerators[])
  • Vous ne pouvez pas remplacer les disques ni les configurations minimales de la plate-forme du CPU pour les tâches Batch. Tous les types de machines utilisent soit les valeurs que vous avez spécifiées (dans les sous-champs policy ou un modèle d'instance), soit, si elles ne sont pas spécifiées, les valeurs par défaut d'un type de machine dans la sélection d'instance la plus prioritaire. Par conséquent, nous vous recommandons de procéder comme suit :

    • Vérifiez que le type de disque de démarrage est compatible avec chaque type de machine autorisé. En résumé, les types de machines de 4e génération et ultérieurs ne sont pas compatibles avec les disques persistants, les types de machines de 2e génération et antérieurs ne sont pas compatibles avec Hyperdisk, et les types de machines de 3e génération et antérieurs utilisent des disques de démarrage persistants par défaut.

    • Ne spécifiez pas de configuration minimale de la plate-forme du CPU ni de disques facultatifs, sauf si vous avez vérifié qu'ils sont compatibles avec chaque type de machine autorisé.

Créer une tâche autorisée à utiliser plusieurs types de machines

Pour créer une tâche autorisée à utiliser plusieurs types de machines, sélectionnez l'une des méthodes suivantes.

gcloud

Pour configurer plusieurs types de machines lorsque vous utilisez la Google Cloud CLI pour créer une tâche, procédez comme suit :

  1. Incluez le instanceFlexibilityPolicy champ et les sous-champs dans le champ allocationPolicy du fichier JSON qui spécifie les détails de configuration de votre tâche. Le champ instanceFlexibilityPolicy est compatible avec une ou plusieurs sélections d'instances, chacune ayant un nom unique, un classement unique et une liste d'un ou de plusieurs types de machines.

    "allocationPolicy":{
      "instanceFlexibilityPolicy":{
        "instanceSelections":{
          "INSTANCE_SELECTION_NAME":{
            "rank": RANK,
            "machineTypes": [MACHINE_TYPES]
          }
        }
      }
    }
    

    Remplacez les éléments suivants :

    • INSTANCE_SELECTION_NAME: nom de la sélection d'instances. Si la tâche comporte plusieurs sélections d'instances, assurez-vous que chaque nom de cette tâche est unique.

    • RANK(facultatif) : entier supérieur ou égal à zéro représentant la priorité de cette sélection d'instances, la valeur la plus basse étant la priorité la plus élevée. Si elle n'est pas spécifiée, la valeur par défaut est 0 (priorité la plus élevée). Si la tâche comporte plusieurs sélections d'instances, assurez-vous que chaque classement de cette tâche est unique.

    • MACHINE_TYPES: liste d'un ou de plusieurs types de machines, écrits sous forme de chaînes, pour cette sélection d'instances, séparés par des virgules. Vous ne pouvez inclure chaque type de machine que dans une seule sélection d'instance par tâche. Par exemple, une liste de trois types de machines peut être écrite comme suit :

      "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
      

      Remplacez MACHINE_TYPE_1, MACHINE_TYPE_2 et MACHINE_TYPE_3 par un type de machine, par exemple e2-micro, e2-small et n1-standard-2.

    Pour en savoir plus, consultez également l'exemple de tâche.

  2. Tant que cette fonctionnalité est en version bêta, vous devez utiliser la gcloud alpha batch jobs submit commande pour créer et envoyer la tâche.

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

    Remplacez les éléments suivants :

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

REST

Pour utiliser l'API Batch afin de créer une tâche qui utilise plusieurs types de machines, utilisez la méthode v1alpha jobs.create tant que cette fonctionnalité est en version bêta.

Pour spécifier plusieurs types de machines pour une tâche, incluez le instanceFlexibilityPolicy champ et sous-champs dans le allocationPolicy champ du corps principal du fichier JSON. Le champ instanceFlexibilityPolicy est compatible avec une ou plusieurs sélections d'instances, chacune ayant un nom unique, un classement unique et une liste d'un ou de plusieurs types de machines.

"allocationPolicy":{
  "instanceFlexibilityPolicy":{
    "instanceSelections":{
      "INSTANCE_SELECTION_NAME":{
        "rank": RANK,
        "machineTypes": [MACHINE_TYPES]
      }
    }
  }
}

Remplacez les éléments suivants :

  • INSTANCE_SELECTION_NAME: nom de la sélection d'instances. Si la tâche comporte plusieurs sélections d'instances, assurez-vous que chaque nom de cette tâche est unique.

  • RANK(facultatif) : entier supérieur ou égal à zéro représentant la priorité de cette sélection d'instances, la valeur la plus basse étant la priorité la plus élevée. Si elle n'est pas spécifiée, la valeur par défaut est 0 (priorité la plus élevée). Si la tâche comporte plusieurs sélections d'instances, assurez-vous que chaque classement de cette tâche est unique.

  • MACHINE_TYPES: liste d'un ou de plusieurs types de machines, écrits sous forme de chaînes, pour cette sélection d'instances, séparés par des virgules. Vous ne pouvez inclure chaque type de machine que dans une seule sélection d'instance par tâche. Par exemple, une liste de trois types de machines peut être écrite comme suit :

    "MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"
    

    Remplacez MACHINE_TYPE_1, MACHINE_TYPE_2 et MACHINE_TYPE_3 par un type de machine, par exemple e2-micro, e2-small et n1-standard-2.

Pour en savoir plus, consultez également l'exemple de tâche.

Exemple de fichier de configuration JSON pour une tâche

Par exemple, lorsque vous utilisez la gcloud CLI ou l'API Batch, vous pouvez utiliser le fichier de configuration JSON suivant pour créer une tâche de script de base comportant deux sélections d'instances :

  • La sélection d'instances nommée first-choice a la priorité la plus élevée ("rank": 0) et trois types de machines (e2-micro, e2-small, et n1-standard-2).
  • La sélection d'instances nommée second-choice a la deuxième priorité ("rank": 1) et un type de machine (e2-medium).
{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello World! This is task $BATCH_TASK_INDEX."
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy":{
    "instanceFlexibilityPolicy":{
      "instanceSelections":{
        "first-choice":{
          "rank": 0,
          "machineTypes": ["e2-micro", "e2-small", "n1-standard-2"]
        },
        "second-choice":{
          "rank": 1,
          "machineTypes": ["e2-medium"]
        }
      }
    }
  }
}

Étape suivante