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

Ce document explique comment créer et exécuter un job par lot qui utilise la flexibilité des instances. La flexibilité des instances vous permet d'autoriser un job à 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 un job, vous pouvez utiliser la flexibilité des instances pour améliorer la disponibilité, c'est-à-dire la probabilité que des ressources soient disponibles pour exécuter votre job. Pour savoir quelles 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éduisez la probabilité d'erreurs de disponibilité des ressources et des retards de planification associés.
  • Sélectionnez des ressources avec une disponibilité plus élevée pour aider les jobs à se terminer plus rapidement. Par exemple :
    • Augmente la probabilité d'obtenir plus d'instances pour les jobs qui prennent en charge le traitement parallèle.
    • Obtenez 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 conditions préalables pour les projets et les utilisateurs.
  2. Pour obtenir les autorisations nécessaires pour créer un job, 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 avec des rôles personnalisés ou d'autres rôles prédéfinis.

Restrictions

Lorsqu'un job 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 que vous autorisez un job à utiliser.

  • Le job ne peut pas spécifier le modèle de provisionnement FLEX_START ni le modèle de provisionnement RESERVATION_BOUND.

  • Le job ne peut pas consommer de réservation spécifiquement ciblée. (Le champ reservation doit être indé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'instances ne peut réussir que pour le type de machine de la réservation.

  • Chaque job peut comporter jusqu'à 50 sélections d'instances.

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

  • Les types de machines ne peuvent pas se répéter. N'incluez chaque type de machine que dans une seule sélection d'instance par job.

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

  • Bien qu'il soit facultatif de spécifier plusieurs types de machines dans la même sélection d'instances, cela est obligatoire si vous souhaitez obtenir 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'instances pour un rang comporte plusieurs types de machines. Par exemple, cette sélection est importante si vous souhaitez que votre job dispose de VM Spot moins susceptibles d'être préemptées ou de plus d'instances pour un job pouvant exécuter des tâches en parallèle.
    • Sinon, lorsque la sélection d'instances pour un rang ne comporte qu'un seul type de machine, la flexibilité des instances ne permet que d'éviter les erreurs de disponibilité des ressources.
  • Le champ machineType ne peut pas être inclus dans le job, et le type de machine pour tout modèle d'instance spécifié par le job est ignoré.

  • Vous devez vérifier que chaque propriété que vous spécifiez pour le job est compatible avec chaque type de machine autorisé. Sinon, le job risque d'échouer après son envoi, car il ne peut pas créer d'instances. Par exemple, nous vous recommandons de vérifier qu'au moins les propriétés suivantes d'un job sont compatibles avec tous les types de machines :

    • Emplacement (champ allowedLocations[] si 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 de l'instance (sous-champs instances[]) :

      • plate-forme CPU minimale (champ minCpuPlatform)
      • Modèle de provisionnement (champ provisioningModel)
      • GPU (champ accelerators[])
  • Vous ne pouvez pas remplacer les disques et les plates-formes de processeur minimales pour les jobs Batch. Tous les types de machines utilisent soit les valeurs que vous avez spécifiées (dans les sous-champs policy ou dans un modèle d'instance), soit, si aucune valeur n'est spécifiée, les valeurs par défaut d'un type de machine dans la sélection d'instance de priorité la plus élevée. Par conséquent, nous vous recommandons d'effectuer les opérations suivantes :

    • 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 plate-forme de processeur ni de disques optionnels, sauf si vous avez vérifié qu'ils sont compatibles avec chaque type de machine autorisé.

Créer un job autorisé à utiliser plusieurs types de machines

Pour créer un job autorisé à 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 un job, procédez comme suit :

  1. Incluez le champ instanceFlexibilityPolicy et les sous-champs dans le champ allocationPolicy du fichier JSON qui spécifie les détails de configuration de votre job. Le champ instanceFlexibilityPolicy accepte une ou plusieurs sélections d'instances, qui ont chacune un nom unique, un classement unique et une liste d'un ou 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 le job comporte plusieurs sélections d'instances, assurez-vous que chaque nom de ce job est unique.

    • RANK (facultatif) : entier supérieur ou égal à zéro qui représente la priorité de cette sélection d'instance. La valeur la plus basse correspond à la priorité la plus élevée. Si aucune valeur n'est spécifiée, la valeur par défaut est 0 (priorité la plus élevée). Si le job comporte plusieurs sélections d'instances, assurez-vous que chaque classement de ce job 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'instances par job. 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 job.

  2. Tant que cette fonctionnalité est disponible en preview, vous devez utiliser la commande gcloud alpha batch jobs submit pour créer et envoyer le job.

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

    Remplacez les éléments suivants :

    • JOB_NAME : nom du job.
    • LOCATION : emplacement du job.
    • JSON_CONFIGURATION_FILE : chemin d'accès à un fichier JSON contenant les détails de configuration du job.

REST

Pour utiliser l'API Batch afin de créer un job qui utilise plusieurs types de machines, utilisez la méthode v1alpha jobs.create tant que cette fonctionnalité est en preview.

Pour spécifier plusieurs types de machines pour un job, incluez le champ instanceFlexibilityPolicy et les sous-champs dans le champ allocationPolicy du corps principal du fichier JSON. Le champ instanceFlexibilityPolicy accepte une ou plusieurs sélections d'instances, chacune ayant un nom unique, un rang unique et une liste d'un ou 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 le job comporte plusieurs sélections d'instances, assurez-vous que chaque nom de ce job est unique.

  • RANK : entier égal ou supérieur à zéro représentant la priorité de cette sélection d'instance, où la valeur la plus basse correspond à la priorité la plus élevée (facultatif). Si aucune valeur n'est spécifiée, la valeur par défaut est 0 (priorité la plus élevée). Si le job comporte plusieurs sélections d'instances, assurez-vous que chaque rang de ce job 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'instances par job. 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 job.

Exemple de fichier de configuration JSON pour un job

Par exemple, lorsque vous utilisez gcloud CLI ou l'API Batch, vous pouvez utiliser le fichier de configuration JSON suivant pour créer un job 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'instance 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"]
        }
      }
    }
  }
}

Étapes suivantes