Présentation de la création et de l'exécution de jobs

Ce document décrit le processus d'exécution et les options de création des jobs. Les jobs par lot vous permettent d'exécuter des charges de travail de traitement par lot sur Google Cloud. Pour en savoir plus sur les composants d'une tâche et sur les conditions préalables à l'utilisation de Batch, consultez la page Premiers pas avec Batch.

Fonctionnement de la création et de l'exécution d'une tâche

Pour utiliser Batch, créez une tâche qui spécifie votre charge de travail et ses exigences, puis Batch l'exécute automatiquement.

Le processus de création et d'exécution d'une tâche est décrit en détail dans les sections suivantes:

Cycle de vie des tâches

Cette section décrit le cycle de vie d'une tâche et ses tâches, de sa création à sa suppression.

Pour chaque charge de travail que vous souhaitez exécuter sur Batch, vous devez suivre le processus de base suivant:

  1. Créer une tâche:vous définissez la charge de travail que vous souhaitez exécuter en spécifiant les exécutables, les tâches et toute autre condition requise pour la tâche. Pour en savoir plus sur la création d'une tâche, consultez la section Options de création de tâche de ce document.
  2. Surveiller et dépanner la tâche:une fois la tâche créée, celle-ci est automatiquement mise en file d'attente, programmée et exécutée sur les ressources spécifiées. Vous pouvez afficher les détails d'une tâche créée ou de l'une de ses tâches pour voir l'état actuel. Une fois qu'une tâche est en cours d'exécution ou terminée, vous pouvez également la surveiller et l'analyser à l'aide de journaux. Si une tâche échoue, vous pouvez la résoudre à l'aide des messages d'erreur, des événements d'état ou des journaux afin de diagnostiquer le problème avant de recréer la tâche.
  3. Supprimer ou exporter le job:les journaux d'un job sont automatiquement conservés et supprimés conformément à la règle de conservation de Cloud Logging. Les autres informations d'un job restent disponibles dans Batch jusqu'à ce que vous ou Google Cloud les supprimiez. Google Cloud supprime automatiquement une tâche 60 jours après son achèvement. Avant cela, vous pouvez éventuellement supprimer le job vous-même ou, si vous avez besoin de conserver les informations en question, vous pouvez l'exporter avant qu'il ne soit supprimé.

Une fois créé, le job passe par les états suivants:

  1. En file d'attente (QUEUED) : la requête de tâche a été acceptée et est en attente dans la file d'attente. La tâche reste dans la file d'attente jusqu'à ce que les ressources requises soient disponibles et que les tâches qui l'attendent aient été évaluées.
  2. Planifiée (SCHEDULED) : la tâche a été sélectionnée dans la file d'attente pour commencer l'exécution et les ressources sont en cours d'allocation.
  3. En cours d'exécution (RUNNING) : les ressources de la tâche ont bien été créées et ses tâches peuvent commencer à s'exécuter.

    Lorsqu'une tâche est en cours d'exécution, chacune de ses tâches passe par les états suivants:

    1. En attente (PENDING) : la tâche attend qu'une VM s'exécute.
    2. Attribué (ASSIGNED) : la tâche a reçu une VM sur laquelle s'exécuter.
    3. En cours d'exécution (RUNNING): la tâche est en cours d'exécution sur une VM.
    4. Une tâche se termine dans l'un des états suivants :
      • Réussie (SUCCEEDED) : la tâche a réussi, car chacun de ses exécutables a réussi (renvoie un code de sortie de zéro) ou a été marqué comme non critique à l'aide du champ Ignorer l'état de sortie (ignoreExitStatus).
      • Failed (FAILED) : la tâche a échoué, car au moins un de ses exécutables critiques a échoué (renvoyé un code de sortie différent de zéro).
  4. Une tâche se termine dans l'un des états suivants:

    • Réussite (SUCCEEDED) : toutes les tâches de la tâche ont abouti.
    • Échec (FAILED) : au moins une tâche du job a échoué.

Pour plus d'informations, consultez les sections États des tâches et États des tâches dans la documentation de référence.

Mise en file d'attente et planification des jobs

En règle générale, les tâches sont plus susceptibles de s'exécuter et de se terminer plus tôt si elles sont plus petites et ne nécessitent que quelques ressources courantes. Les exemples de tâches de la documentation sur Batch, qui sont généralement très petits et n'utilisent que des ressources minimales, peuvent s'exécuter en quelques minutes seulement.

Plus précisément, le temps nécessaire pour terminer la mise en file d'attente et la planification varie selon les tâches et à différents moments en fonction des facteurs suivants:

  • Disponibilité des ressources pour le job:disponibilité des ressources requises pour le job dans les emplacements autorisés.

    Tout d'abord, une tâche ne peut pas s'exécuter si vous spécifiez des ressources qui ne sont pas proposées à cet emplacement. Lorsque cela se produit, la tâche échoue et génère une erreur de disponibilité de zone.

    Ensuite, une tâche est plus susceptible d'être retardée ou d'échouer si l'une de ses ressources requises est en faible capacité par rapport à la demande actuelle en raison d'erreurs de disponibilité des ressources. Par conséquent, votre tâche peut s'exécuter plus tôt lorsque vous avez besoin de ressources moins nombreuses et plus courantes, et n'empêche pas son exécution dans les zones d'une région.

    Pour en savoir plus sur les ressources d'une tâche, consultez la section Exécution de la tâche de ce document. Pour en savoir plus sur les emplacements que vous pouvez spécifier pour une tâche par lot et ses ressources, consultez la page Emplacements.

  • Job priority (Priorité de la tâche) : priorité d'une tâche par rapport aux priorités d'autres tâches de votre projet.

    Vous pouvez éventuellement spécifier la priorité d'une tâche en incluant l'option --priority pour gcloud CLI ou le champ JSON priority. Vous pouvez définir la priorité d'une tâche sous la forme d'un nombre compris entre 0 (priorité la plus faible) et 99 (priorité la plus élevée). Définir une priorité plus élevée peut aider une tâche à s'exécuter plus tôt que les tâches de priorité inférieure dans votre projet.

    Si vous ne configurez pas la priorité d'une tâche, elle utilise par défaut la priorité la plus faible, 0. Si deux tâches en file d'attente ont la même priorité, la tâche créée en premier a la priorité la plus élevée.

  • Quotas et limites:seuils fixés par votre projet pour les ressources et les requêtes Google Cloud.

    Une tâche ne peut pas être exécutée si elle dépasse une limite ou le quota de votre projet pour l'une des ressources ou requêtes requises. Dans ce cas, Batch peut retarder une tâche et la relancer ultérieurement, ou échouer la tâche et afficher une erreur associée.

    Pour éviter les retards et les erreurs dans votre tâche, vous pouvez créer des tâches qui respectent toutes les limites applicables et vous assurer que votre projet dispose d'un quota suffisant. Pour en savoir plus, consultez la page Quotas et limites par lot.

Exécution du job

Le temps nécessaire à l'exécution d'une tâche peut varier en fonction de la planification des tâches et des ressources de la tâche.

Planification des tâches

Lorsqu'une tâche est exécutée, ses tâches sont planifiées en fonction du champ de règle de planification (schedulingPolicy), qui vous permet de spécifier l'une des options suivantes:

  • Dès que possible (AS_SOON_AS_POSSIBLE) (par défaut) : les tâches s'exécutent dès que les ressources sont disponibles et peuvent s'exécuter en parallèle. Le nombre de tâches exécutées simultanément dépend du nombre de tâches parallèles par VM autorisées par les ressources de la tâche et d'autres options de configuration, comme expliqué dans la section Ressources de tâches de ce document.
  • Dans l'ordre (IN_ORDER): les tâches s'exécutent une par une dans l'ordre croissant des index.

Ressources du job

Chaque tâche par lot s'exécute sur un groupe d'instances géré (MIG) régional, qui est un groupe d'une ou plusieurs instances de machines virtuelles (VM) Compute Engine correspondantes, chacune située dans l'une des zones incluses. Chaque VM dispose d'un matériel dédié aux cœurs de processeur (en particulier aux processeurs virtuels) et à la mémoire, qui affectent les performances de votre tâche, et d'un disque de démarrage qui stocke une image du système d'exploitation (OS) et des instructions pour l'exécution de votre tâche.

Lors de l'exécution d'une tâche, Batch crée et supprime automatiquement les ressources conformes à vos spécifications. Lorsque vous créez un job, vous configurez ses ressources en spécifiant les éléments suivants:

  • Vous devez spécifier les ressources de calcul (processeurs virtuels, mémoire et, le cas échéant) de stockage sur disque de démarrage supplémentaire, requises pour l'exécution de chaque tâche, sauf si les valeurs par défaut sont suffisantes. Pour en savoir plus, consultez les sections concernant le champ des ressources de calcul par tâche (computeResource) et les sous-champs.

  • Vous pouvez également spécifier les types de VM à utiliser et des ressources supplémentaires pour chaque VM, telles que des GPU et des volumes de stockage. Si vous ne spécifiez pas ces options, Batch sélectionne les types de VM compatibles et n'ajoute aucune ressource supplémentaire. Pour en savoir plus, consultez les sections concernant le champ Ressources d'instance de VM (instances[]) et les sous-champs.

Le nombre de VM et le nombre de tâches pouvant s'exécuter simultanément sur chaque VM varient selon les tâches, en fonction de la planification des tâches et de la configuration matérielle requise. Si vous spécifiez que les tâches d'une tâche doivent exécuter IN_ORDER, la tâche dispose d'une VM et n'exécute qu'une seule tâche à la fois. Sinon, si les tâches d'une tâche exécutent AS_SOON_AS_POSSIBLE, vous pouvez estimer le nombre de VM et le nombre de tâches simultanées à l'aide de la formule suivante:

\[vmsPerJob=\frac{taskCount}{ParallelTasksPerVm}\]

Cette formule comporte les valeurs suivantes:

  • $ vmsPerJob $: nombre maximal de VM par tâche. Le nombre réel de VM créées pour une tâche peut être inférieur à cette valeur. Par exemple, si Batch s'attend à ce qu'il soit plus rapide d'exécuter une tâche sur moins de ressources que d'attendre d'en avoir plus. Cette valeur est également limitée par la limite de VM simultanées par tâche.
  • $ taskCount $: le nombre total de tâches pour la tâche, que vous définissez à l'aide du champ du nombre de tâches (taskCount).
  • $ sideTasksPerVM $: nombre maximal de tâches pouvant être exécutées simultanément sur une VM.

    Cette valeur est déterminée par tous les critères suivants:

    • La valeur minimale est 1 tâche.

    • La valeur maximale correspond à la plus petite de 20 tâches et, si elle est définie, à la valeur du champ maximal de tâches parallèles par tâche (parallelism).

    • Si le champ maximal de tâches parallèles par VM (taskCountPerNode) est défini, cette valeur est utilisée.

      Sinon, si taskCountPerNode n'est pas défini, Batch choisit une valeur en divisant le nombre total de ressources de calcul (en particulier de processeurs virtuels) par VM en la quantité requise pour chaque tâche:

      \[ ParallelTasksPerVm=\frac{vcpusPerVm}{vcpusPerTask} \]

      Cette formule comporte les valeurs suivantes:

      • $ vcpusPerVm $: nombre total de processeurs virtuels par VM, déterminé par le type de machine des VM de votre job

      • $ vcpusPerTask $: nombre de processeurs virtuels par tâche, déterminé en convertissant les unités du champ vCPU par tâche (cpuMilli)

Options de création de jobs

La page Créer et exécuter une tâche de base explique les principes de base, y compris comment définir un exécutable à l'aide d'une image de script ou de conteneur, et comment configurer des variables d'environnement prédéfinies et personnalisées.

Une fois que vous avez compris les principes de base de la création de tâches, envisagez de créer une tâche qui utilise une ou plusieurs des options de configuration supplémentaires suivantes:

  • Contrôler l'accès à une tâche:

  • Configurez des options supplémentaires pour une tâche:

    • La page Configurer la communication des tâches à l'aide d'une bibliothèque MPI explique comment configurer une tâche avec des tâches interdépendantes qui communiquent entre elles sur différentes VM à l'aide d'une bibliothèque MPI (Message Passing Interface). Un cas d'utilisation courant de MPI est les charges de travail de calcul hautes performances (HPC, High Performance Computing) à couplage fort.

    • Personnalisez les ressources sur lesquelles un job s'exécute:

      • La section Définir des ressources de job à l'aide d'un modèle d'instance de VM explique comment spécifier un modèle de VM Compute Engine pour définir les ressources d'une tâche lorsque vous la créez.

      • La section Utiliser des GPU pour une tâche explique comment définir une tâche qui utilise une ou plusieurs unités de traitement graphique (GPU). Les cas d'utilisation courants des tâches utilisant des GPU incluent les charges de travail intensives de traitement de données ou de machine learning (ML).

      • La section Utiliser des volumes de stockage pour une tâche explique comment définir une tâche pouvant accéder à un ou plusieurs volumes de stockage externes. Les options de stockage incluent des disques persistants nouveaux ou existants, de nouveaux disques SSD locaux, des buckets Cloud Storage existants et un système de fichiers réseau (NFS, Network File System) existant tel qu'un partage de fichiers Filestore.

      • La section Présentation de l'environnement d'OS de VM explique quand et comment personnaliser l'environnement du système d'exploitation (OS) de la VM pour une tâche, y compris l'image de l'OS de la VM et les disques de démarrage.

    • Optimiser les différents aspects d'une mission:

      • La section Automatiser les nouvelles tentatives d'une tâche explique comment relancer automatiquement les tâches d'une tâche après tous les échecs ou certains échecs. Elles peuvent contribuer à réduire les difficultés liées au dépannage et à réduire la durée d'exécution globale des tâches qui rencontrent des erreurs temporaires. Par exemple, vous pouvez définir des tentatives automatiques pour une tâche qui s'exécute sur des VM Spot, qui offrent des remises importantes, mais ne sont pas toujours disponibles et peuvent être préemptées à tout moment.

      • La section Activer les notifications d'état explique comment configurer une tâche pour envoyer des notifications Pub/Sub sur son état, que vous pouvez éventuellement stocker et interroger dans une table BigQuery. Avant de lire ce document, configurez votre projet pour surveiller l'état du job à l'aide de notifications Pub/Sub et de BigQuery.

      • La section Regrouper les VM pour réduire la latence explique comment réduire la latence réseau entre les VM d'une tâche en exigeant que les VM soient physiquement proches les unes des autres. Cet avantage en termes de performances peut être particulièrement utile pour les tâches qui communiquent fréquemment sur le réseau entre les VM, telles que les tâches qui communiquent à l'aide de bibliothèques MPI.

      • La section Vérifier la disponibilité des ressources à l'aide des réservations de VM explique comment configurer une tâche pouvant s'exécuter sur des VM réservées. L'utilisation de VM réservées peut vous aider à réduire le temps de planification d'un job, à éviter les erreurs de disponibilité des ressources et à optimiser les coûts.

  • Utilisez des services supplémentaires pour créer et exécuter des jobs:

Étapes suivantes