Bonnes pratiques pour AWS Batch - AWS Batch

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Bonnes pratiques pour AWS Batch

Vous pouvez l'utiliser AWS Batch pour exécuter diverses charges de travail de calcul exigeantes à grande échelle sans avoir à gérer une architecture complexe. AWS Batchles jobs peuvent être utilisés dans un large éventail de cas d'utilisation dans des domaines tels que l'épidémiologie, les jeux vidéo et l'apprentissage automatique.

Cette rubrique décrit les meilleures pratiques à prendre en compte lors de l'utilisation AWS Batch et fournit des conseils sur la manière d'exécuter et d'optimiser vos charges de travail lors de l'utilisationAWS Batch.

Quand utiliser AWS Batch

AWS Batchexécute des tâches à grande échelle et à faible coût, et fournit des services de mise en file d'attente et une mise à l'échelle optimisée en termes de coûts. Cependant, toutes les charges de travail ne sont pas adaptées à l'exécutionAWS Batch.

  • Tâches courtes : si une tâche ne s'exécute que quelques secondes, la planification de la tâche par lots peut prendre plus de temps que l'exécution de la tâche elle-même. Pour contourner le problème, binpack regroupez vos tâches avant de les soumettre. AWS Batch Configurez ensuite vos AWS Batch tâches pour qu'elles soient itérées sur les tâches. Par exemple, placez les arguments de tâche individuels dans une table Amazon DynamoDB ou sous forme de fichier dans un compartiment Amazon S3. Envisagez de regrouper les tâches de manière à ce qu'elles s'exécutent de 3 à 5 minutes chacune. Après avoir terminé binpack les tâches, parcourez les groupes de tâches au sein de votre AWS Batch tâche.

  • Les tâches qui doivent être exécutées immédiatement AWS Batch peuvent être traitées rapidement. Cependant, il AWS Batch s'agit d'un planificateur qui optimise les performances en termes de coûts, de priorité des tâches et de débit. AWS Batchle traitement de vos demandes peut prendre du temps. Si vous avez besoin d'une réponse en moins de quelques secondes, une approche basée sur les services utilisant Amazon ECS ou Amazon EKS est plus adaptée.

Liste de contrôle à exécuter à grande échelle

Avant d'exécuter une charge de travail importante sur 50 000 vCPU ou plus, considérez la liste de contrôle suivante.

Note

Si vous prévoyez d'exécuter une charge de travail importante sur un million de vCPU ou plus ou si vous avez besoin de conseils pour exécuter à grande échelle, contactez votre AWS équipe.

  • Vérifiez vos quotas Amazon EC2 — Vérifiez vos quotas Amazon EC2 (également appelés limites) dans le panneau Service Quotas du. AWS Management Console Si nécessaire, demandez une augmentation du quota pour votre nombre maximal d'instances Amazon EC2. N'oubliez pas que les instances Amazon EC2 Spot et Amazon On-Demand disposent de quotas distincts. Pour plus d'informations, consultez Getting started with Service Quotas.

  • Vérifiez votre quota Amazon Elastic Block Store pour chaque région : chaque instance utilise un volume GP2 ou GP3 pour le système d'exploitation. Par défaut, le quota pour chacun Région AWS est de 300 TiB. Cependant, chaque instance utilise des nombres dans le cadre de ce quota. Assurez-vous donc d'en tenir compte lorsque vous vérifiez votre quota Amazon Elastic Block Store pour chaque région. Si votre quota est atteint, vous ne pouvez pas créer d'autres instances. Pour plus d'informations, consultez la section Points de terminaison et quotas Amazon Elastic Block Store

  • Utilisez Amazon S3 pour le stockage : Amazon S3 fournit un débit élevé et permet d'éliminer les incertitudes quant à la quantité de stockage à allouer en fonction du nombre de tâches et d'instances dans chaque zone de disponibilité. Pour plus d'informations, consultez la section Modèles de conception des meilleures pratiques : optimisation des performances d'Amazon S3.

  • Évoluez progressivement pour identifier rapidement les goulots d'étranglement : pour une tâche exécutée sur un million de vCPU ou plus, commencez par une baisse puis augmentez progressivement afin de pouvoir identifier les goulots d'étranglement à un stade précoce. Par exemple, commencez par exécuter sur 50 000 vCPU. Ensuite, augmentez le nombre à 200 000 vCPU, puis à 500 000 vCPU, etc. En d'autres termes, continuez à augmenter progressivement le nombre de vCPU jusqu'à atteindre le nombre de vCPU souhaité.

  • Surveillez pour identifier rapidement les problèmes potentiels : pour éviter les pannes et les problèmes potentiels lors de l'exécution à grande échelle, veillez à surveiller à la fois votre application et votre architecture. Des interruptions peuvent se produire même lors du passage de 1 000 à 5 000 vCPU. Vous pouvez utiliser Amazon CloudWatch Logs pour consulter les données des journaux ou utiliser des métriques CloudWatch intégrées à l'aide d'une bibliothèque cliente. Pour plus d'informations, consultez les sections Référence de l'agent CloudWatch Logs et aws-embedded-metrics

Optimisez les conteneurs et les AMI

La taille et la structure du conteneur sont importantes pour le premier ensemble de tâches que vous exécutez. Cela est particulièrement vrai si le conteneur est supérieur à 4 Go. Les images de conteneur sont intégrées en couches. Les couches sont récupérées en parallèle par Docker à l'aide de trois threads simultanés. Vous pouvez augmenter le nombre de threads simultanés à l'aide du max-concurrent-downloads paramètre. Pour plus d'informations, consultez la documentation Dockerd.

Bien que vous puissiez utiliser des conteneurs plus grands, nous vous recommandons d'optimiser la structure et la taille des conteneurs pour accélérer les temps de démarrage.

  • Les petits conteneurs sont récupérés plus rapidement — Les petits conteneurs peuvent accélérer le démarrage des applications. Pour réduire la taille du conteneur, déchargez les bibliothèques ou les fichiers rarement mis à jour vers Amazon Machine Image (AMI). Vous pouvez également utiliser des supports de liaison pour donner accès à vos conteneurs. Pour plus d'informations, consultez la section Lier les montages.

  • Créez des couches de taille uniforme et divisez les grandes couches : chaque couche est récupérée par un thread. Ainsi, une couche importante peut avoir un impact significatif sur le temps de démarrage de votre tâche. Nous recommandons une taille de couche maximale de 2 Go comme bon compromis entre une taille de conteneur plus grande et des temps de démarrage plus rapides. Vous pouvez exécuter la docker history your_image_id commande pour vérifier la structure de votre image de conteneur et la taille de la couche. Pour plus d'informations, consultez la documentation Docker.

  • Utilisez Amazon Elastic Container Registry comme référentiel de conteneurs : lorsque vous exécutez des milliers de tâches en parallèle, un référentiel autogéré peut échouer ou ralentir le débit. Amazon ECR fonctionne à grande échelle et peut gérer des charges de travail avec plus d'un million de vCPU.

Choisissez la bonne ressource d'environnement informatique

AWS Fargatenécessite moins d'installation et de configuration initiales qu'Amazon EC2 et est probablement plus facile à utiliser, en particulier si c'est la première fois. Avec Fargate, vous n'avez pas besoin de gérer les serveurs, de gérer la planification de la capacité ou d'isoler les charges de travail des conteneurs pour des raisons de sécurité.

Si vous avez les exigences suivantes, nous vous recommandons d'utiliser les instances Fargate :

  • Vos tâches doivent démarrer rapidement, en particulier en moins de 30 secondes.

  • Les exigences de vos tâches sont de 16 vCPU ou moins, aucun GPU et 120 GiB de mémoire ou moins.

Pour plus d'informations, consultez Quand utiliser Fargate.

Si vous avez les exigences suivantes, nous vous recommandons d'utiliser des instances Amazon EC2 :

  • Vous avez besoin d'un contrôle accru sur la sélection des instances ou de l'utilisation de types d'instances spécifiques.

  • Vos tâches nécessitent des ressources AWS Fargate impossibles à fournir, telles que des GPU, de la mémoire supplémentaire, une AMI personnalisée ou l'adaptateur Amazon Elastic Fabric.

  • Vous avez besoin d'un haut niveau de débit ou de simultanéité.

  • Vous devez personnaliser votre AMI, le modèle de lancement Amazon EC2 ou accéder à des paramètres Linux spéciaux.

Avec Amazon EC2, vous pouvez ajuster plus finement votre charge de travail en fonction de vos besoins spécifiques et l'exécuter à grande échelle si nécessaire.

Amazon EC2 On-Demand ou Amazon EC2 Spot

La plupart des AWS Batch clients utilisent les instances Amazon EC2 Spot en raison des économies réalisées par rapport aux instances à la demande. Toutefois, si votre charge de travail s'exécute pendant plusieurs heures et ne peut pas être interrompue, les instances à la demande sont peut-être plus adaptées à vos besoins. Vous pouvez toujours essayer d'abord les instances Spot et passer à On-Demand si nécessaire.

Si vous avez les exigences et les attentes suivantes, utilisez les instances Amazon EC2 On-Demand :

  • La durée d'exécution de vos tâches est supérieure à une heure et vous ne pouvez tolérer aucune interruption de votre charge de travail.

  • Vous avez un SLO (objectif de niveau de service) strict pour votre charge de travail globale et vous ne pouvez pas augmenter le temps de calcul.

  • Les instances dont vous avez besoin sont plus susceptibles de connaître des interruptions.

Si vous avez les exigences et les attentes suivantes, utilisez les instances Amazon EC2 Spot :

  • La durée d'exécution de vos tâches est généralement de 30 minutes ou moins.

  • Vous pouvez tolérer les interruptions potentielles et la replanification des tâches dans le cadre de votre charge de travail. Pour plus d'informations, consultez Spot Instance Advisor.

  • Les tâches de longue durée peuvent être redémarrées à partir d'un point de contrôle en cas d'interruption.

Vous pouvez combiner les deux modèles d'achat en soumettant d'abord sur une instance Spot, puis en utilisant l'instance On-Demand comme option de secours. Par exemple, soumettez vos tâches sur une file d'attente connectée à des environnements informatiques exécutés sur des instances Amazon EC2 Spot. Si une tâche est interrompue, repérez l'événement sur Amazon EventBridge et corrélez-le à une réclamation d'instance Spot. Soumettez ensuite à nouveau le travail à une file d'attente à la demande à l'aide d'une AWS Lambda fonction ouAWS Step Functions. Pour plus d'informationsTutoriel : envoi d'alertes Amazon Simple Notification Service en cas d'échec d'un Job, consultez les meilleures pratiques pour gérer les interruptions des instances Amazon EC2 Spot et Manage AWS Batch with Step Functions.

Important

Utilisez différents types d'instances, tailles et zones de disponibilité pour votre environnement de calcul à la demande afin de maintenir la disponibilité du pool d'instances Amazon EC2 Spot et de réduire le taux d'interruption.

Utilisez les meilleures pratiques d'Amazon EC2 Spot pour AWS Batch

Lorsque vous choisissez les instances Spot Amazon Elastic Compute Cloud (EC2), vous pouvez probablement optimiser votre flux de travail afin de réduire les coûts, parfois de manière significative. Pour plus d'informations, consultez Bonnes pratiques pour Amazon EC2 Spot.

Pour optimiser votre flux de travail afin de réduire les coûts, prenez en compte les meilleures pratiques Amazon EC2 Spot suivantes pour : AWS Batch

  • Choisissez la stratégie SPOT_CAPACITY_OPTIMIZED d'allocation : AWS Batch choisit les instances Amazon EC2 parmi les pools de capacité Amazon EC2 Spot les plus profonds. Si vous êtes préoccupé par les interruptions, c'est un choix approprié. Pour plus d'informations, consultez Stratégies d’allocation.

  • Diversifier les types d'instances : pour diversifier vos types d'instances, considérez les tailles et les familles compatibles, puis laissez le AWS Batch choix en fonction du prix ou de la disponibilité. Par exemple, considérez c5.24xlarge comme une alternative à c5.12xlarge ouc5a,c5n, c5dm5, et m5d aux familles. Pour plus d'informations, voir Faire preuve de flexibilité en ce qui concerne les types d'instances et les zones de disponibilité.

  • Réduisez le temps d'exécution ou le point de contrôle des tâches : nous vous déconseillons d'exécuter des tâches qui prennent une heure ou plus lorsque vous utilisez des instances Amazon EC2 Spot afin d'éviter les interruptions. Si vous divisez ou contrôlez vos tâches en plus petites parties d'une durée de 30 minutes ou moins, vous pouvez réduire considérablement les risques d'interruptions.

  • Utiliser des tentatives automatisées : pour éviter d'interrompre les AWS Batch tâches, configurez des tentatives automatisées pour les tâches. Les tâches par lots peuvent être interrompues pour l'une des raisons suivantes : un code de sortie différent de zéro est renvoyé, une erreur de service se produit ou une restauration d'instance se produit. Vous pouvez configurer jusqu'à 10 tentatives automatisées. Pour commencer, nous vous recommandons de définir au moins 1 à 3 nouvelles tentatives automatiques. Pour plus d'informations sur le suivi des interruptions ponctuelles d'Amazon EC2, consultez le tableau de bord des interruptions ponctuelles.

    En AWS Batch effet, si vous définissez le paramètre de nouvelle tentative, la tâche est placée en tête de la file d'attente des tâches. C'est-à-dire que le travail est prioritaire. Lorsque vous créez la définition de tâche ou que vous soumettez la tâche dans leAWS CLI, vous pouvez configurer une stratégie de nouvelle tentative. Pour plus d'informations, consultez submit-job.

    $ aws batch submit-job --job-name MyJob \ --job-queue MyJQ \ --job-definition MyJD \ --retry-strategy attempts=2
  • Utiliser des tentatives personnalisées : vous pouvez configurer une stratégie de relance des tâches en fonction d'un code de sortie d'application ou d'une restauration d'instance spécifique. Dans l'exemple suivant, si l'hôte est à l'origine de l'échec, la tâche peut être réessayée jusqu'à cinq fois. Toutefois, si la tâche échoue pour une autre raison, elle se termine et son statut est défini sur. FAILED

    "retryStrategy": { "attempts": 5, "evaluateOnExit": [{ "onStatusReason" :"Host EC2*", "action": "RETRY" },{ "onReason" : "*" "action": "EXIT" }] }
  • Utilisez le tableau de bord des interruptions ponctuelles : vous pouvez utiliser le tableau de bord des interruptions ponctuelles pour suivre les interruptions ponctuelles. L'application fournit des statistiques sur les instances Spot Amazon EC2 qui sont récupérées et sur les zones de disponibilité dans lesquelles se trouvent les instances Spot. Pour plus d'informations, consultez le tableau de bord Spot Interruption

Erreurs courantes et résolution des problèmes

Les erreurs se produisent AWS Batch souvent au niveau de l'application ou sont causées par des configurations d'instance qui ne répondent pas aux exigences spécifiques de votre tâche. Parmi les autres problèmes, citons le blocage des tâches dans le RUNNABLE statut ou le blocage des environnements informatiques dans un INVALID état. Pour plus d'informations sur la résolution des problèmes liés au blocage RUNNABLE des tâches, consultezOffres d'emploi bloquées dans un RUNNABLE statut. Pour plus d'informations sur le dépannage des environnements informatiques dans un INVALID état, consultezINVALIDenvironnement informatique.

  • Vérifiez les quotas de vCPU Amazon EC2 Spot : vérifiez que vos quotas de service actuels répondent aux exigences du poste. Supposons, par exemple, que votre quota de service actuel soit de 256 vCPU et que la tâche nécessite 10 000 vCPU. Dans ce cas, le quota de service ne répond pas aux exigences du poste. Pour plus d'informations et des instructions de dépannage, consultez les rubriques Quotas de service Amazon EC2 et Comment augmenter le quota de service de mes ressources Amazon EC2 ? .

  • Les tâches échouent avant l'exécution de l'application : certaines tâches peuvent échouer en raison d'une DockerTimeoutError erreur ou d'une CannotPullContainerError erreur. Pour plus d'informations sur le dépannage, voir Comment résoudre l'erreur DockerTimeoutError « » dans AWS Batch ? .

  • Adresses IP insuffisantes : le nombre d'adresses IP de votre VPC et de vos sous-réseaux peut limiter le nombre d'instances que vous pouvez créer. Utilisez les routages interdomaines sans classe (CIDR) pour fournir plus d'adresses IP que ce qui est nécessaire pour exécuter vos charges de travail. Si nécessaire, vous pouvez également créer un VPC dédié avec un grand espace d'adressage. Par exemple, vous pouvez créer un VPC avec plusieurs CIDR 10.x.0.0/16 et un sous-réseau dans chaque zone de disponibilité avec un CIDR de. 10.x.y.0/17 Dans cet exemple, x est compris entre 1 et 4 et y est égal à 0 ou 128. Cette configuration fournit 36 000 adresses IP dans chaque sous-réseau.

  • Vérifiez que les instances sont enregistrées auprès d'Amazon EC2 : si vous voyez vos instances dans la console Amazon EC2, mais aucune instance de conteneur Amazon Elastic Container Service dans votre cluster Amazon ECS, l'agent Amazon ECS n'est peut-être pas installé sur une Amazon Machine Image (AMI). L'agent Amazon ECS, les données Amazon EC2 de votre AMI ou le modèle de lancement peuvent également ne pas être correctement configurés. Pour isoler la cause première, créez une instance Amazon EC2 distincte ou connectez-vous à une instance existante via SSH. Pour plus d'informations, consultez les sections Configuration de l'agent de conteneur Amazon ECS, Emplacements des fichiers journaux Amazon ECS etAMI de ressources de calcul.

  • Passez en revue le AWS tableau de AWS bord : examinez le tableau de bord pour vérifier que la tâche attendue se présente et que l'environnement de calcul évolue comme prévu. Vous pouvez également consulter les connexions aux tâches CloudWatch.

  • Vérifiez que votre instance est créée : si une instance est créée, cela signifie que votre environnement de calcul a été dimensionné comme prévu. Si vos instances ne sont pas créées, recherchez les sous-réseaux associés à modifier dans votre environnement informatique. Pour plus d'informations, consultez Vérifier une activité de dimensionnement pour un groupe Auto Scaling.

    Nous vous recommandons également de vérifier que vos instances répondent aux exigences professionnelles associées. Par exemple, une tâche peut nécessiter 1 TiB de mémoire, mais l'environnement de calcul utilise un type d'instance C5 limité à 192 Go de mémoire.

  • Vérifiez que vos instances sont demandées par AWS Batch — Consultez l'historique du groupe Auto Scaling pour vérifier que vos instances sont demandées parAWS Batch. Cela indique comment Amazon EC2 essaie d'acquérir des instances. Si vous recevez un message d'erreur indiquant qu'Amazon EC2 Spot ne peut pas acquérir une instance dans une zone de disponibilité spécifique, cela peut être dû au fait que la zone de disponibilité ne propose pas de famille d'instances spécifique.

  • Vérifiez que les instances sont enregistrées auprès d'Amazon ECS — Si vous voyez des instances dans la console Amazon EC2, mais aucune instance de conteneur Amazon ECS dans votre cluster Amazon ECS, l'agent Amazon ECS n'est peut-être pas installé sur l'Amazon Machine Image (AMI). De plus, il est possible que l'agent Amazon ECS, les données Amazon EC2 de votre AMI ou le modèle de lancement ne soient pas correctement configurés. Pour isoler la cause première, créez une instance Amazon EC2 distincte ou connectez-vous à une instance existante via SSH. Pour plus d'informations, consultez le fichier de configuration de l'CloudWatch agent : section Journaux, Emplacements des fichiers journaux Amazon ECS etAMI de ressources de calcul.

  • Ouvrez un ticket d'assistance : si vous rencontrez toujours des problèmes après un dépannage et que vous disposez d'un plan d'assistance, ouvrez un ticket d'assistance. Dans le ticket d'assistance, assurez-vous d'inclure des informations sur le problème, les spécificités de la charge de travail, la configuration et les résultats des tests. Pour plus d'informations, consultez la section Comparer AWS Support les forfaits.

  • Consultez les forums AWS Batch et HPC — Pour plus d'informations, consultez les forums AWS Batchet HPC.

  • Consultez le tableau de bord de surveillance du temps AWS Batch d'exécution : ce tableau de bord utilise une architecture sans serveur pour capturer les événements d'Amazon ECS et d'Amazon EC2 afin de fournir des informations sur les tâches et les instances. AWS Batch Pour plus d'informations, consultez la section Solution de tableaux de bord de surveillance des temps d'AWS Batchexécution.