View a markdown version of this page

Gouvernance des tâches pour le déploiement du modèle sur HyperPod - Amazon SageMaker AI

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.

Gouvernance des tâches pour le déploiement du modèle sur HyperPod

Cette section explique comment optimiser vos clusters Amazon SageMaker HyperPod EKS partagés pour les charges de travail d'inférence en temps réel. Vous apprendrez à configurer les fonctionnalités de gouvernance des tâches de Kueue, notamment les politiques de gestion des quotas, de planification des priorités et de partage des ressources, afin de garantir que vos charges de travail d’inférence obtiendront les ressources de GPU dont elles ont besoin au cours des pics de trafic, tout en maintenant une répartition équitable entre les activités d’entraînement, d’évaluation et de test de vos équipes. Pour des informations plus générales sur la gouvernance des tâches, consultez SageMaker HyperPod gouvernance des tâches.

Comment fonctionne la gestion des charges de travail d’inférence

Pour gérer efficacement les pics de trafic d'inférence en temps réel dans HyperPod les clusters EKS partagés, mettez en œuvre les stratégies de gouvernance des tâches suivantes en utilisant les fonctionnalités existantes de Kueue.

Configuration des classes prioritaires

Définissez des classes de priorité dédiées pour les charges de travail d’inférence présentant des pondérations élevées (100, par exemple) afin de garantir que les pods d’inférence sont admis et planifiés avant les autres types de tâches. Cette configuration permet aux charges de travail d’inférence de devancer les tâches de moindre priorité lors du chargement du cluster, ce qui est essentiel pour maintenir les exigences de faible latence au cours des pics de trafic.

Dimensionnement et allocation des quotas

Réservez des ressources de GPU suffisantes dans l’élément ClusterQueue de votre équipe pour faire face aux pics d’inférence attendus. Pendant les périodes de faible trafic d’inférence, les ressources de quota inutilisées peuvent être temporairement allouées aux tâches d’autres équipes. Lorsque la demande d’inférence augmente, ces ressources empruntées peuvent être revendiquées pour prioriser les pods d’inférence en attente. Pour plus d’informations, consultez File d’attente de cluster.

Stratégies de partage des ressources

Choisissez entre deux approches de partage de quotas en fonction de vos besoins :

  1. Contrôle strict des ressources : désactivez le prêt et l’emprunt de quotas pour garantir que la capacité de GPU réservée est toujours disponible pour vos charges de travail. Cette approche nécessite de dimensionner des quotas suffisamment importants pour gérer indépendamment les pics de demande et peut entraîner l’inactivité de nœuds au cours des périodes de faible trafic.

  2. Partage flexible des ressources : autorisez l'emprunt de quotas pour utiliser les ressources inutilisées d'autres équipes en cas de besoin. Les pods empruntés sont marqués comme préemptables et peuvent être expulsés si l’équipe prêteuse revendique leur capacité.

Intra-Team Préemption

Activez la préemption au sein de l’équipe lorsque vous exécutez des charges de travail mixtes (évaluation, entraînement et inférence) avec le même quota. Cela permet à Kueue de préempter les tâches de moindre priorité au sein de votre équipe afin de prendre en compte les pods d’inférence les plus prioritaires, garantissant ainsi une inférence en temps réel sans dépendre d’un emprunt de quotas externe. Pour plus d’informations, consultez Préemption.

Exemple de configuration des charges de travail d’inférence

L'exemple suivant montre comment Kueue gère les ressources GPU dans un SageMaker HyperPod cluster Amazon partagé.

Configuration du cluster et des politiques

Votre cluster possède la configuration suivante :

  • Équipe A : quota de 10 GPU P4

  • Équipe B : quota de 20 GPU P4

  • Provisionnement statique : pas de mise à l’échelle automatique

  • Capacité totale : 30 GPU P4

Le pool de GPU partagé utilise cette politique de priorité :

  1. Real-time Inférence : Priorité 100

  2. Entraînement : Priorité 75

  3. Évaluation : Priorité 50

Kueue applique les quotas d’équipe et les classes de priorité, avec la préemption et l’emprunt de quotas activés.

État initial : utilisation normale du cluster

Dans le cadre d’opérations normales :

  • L’équipe A exécute les tâches d’entraînement et d’évaluation sur les 10 GPU P4.

  • L’équipe B exécute l’inférence en temps réel (10 P4) et l’évaluation (10 P4) dans les limites de son quota de 20 GPU.

  • Le cluster est pleinement utilisé avec toutes les tâches admises et en cours.

Pic d’inférence : l’équipe B a besoin de GPU supplémentaires.

Lorsque l’équipe B connaît un pic de trafic, des pods d’inférence supplémentaires nécessitent 5 GPU P4 de plus. Kueue détecte que les nouveaux pods sont :

  • Dans l’espace de noms de l’équipe B

  • Priorité 100 (inférence en temps réel)

  • Admission en attente en raison de contraintes de quotas

Le processus de réponse de Kueue choisit entre deux options :

Option 1 : Emprunt de quotas : si l’équipe A n’utilise que 6 de ses 10 P4, Kueue peut admettre que les pods de l’équipe B utilisent les 4 P4 inactifs. Toutefois, ces ressources empruntées sont préemptables : si l’équipe A soumet des tâches qui consomment la totalité de son quota, Kueue réalise l’éviction des pods d’inférence empruntés par l’équipe B.

Option 2 : Self-preemption (recommandée) - L'équipe B exécute des tâches d'évaluation peu prioritaires (priorité 50). Lorsque des pods d’inférence hautement prioritaires attendent, Kueue préempte les tâches d’évaluation dans les limites du quota de l’équipe B et admet les pods d’inférence. Cette approche permet une allocation sûre des ressources sans risque d’éviction externe.

Kueue suit un processus en trois étapes pour allouer les ressources :

  1. Contrôle des quotas

    Question : L’équipe B dispose-t-elle d’un quota inutilisé ?

    • Oui → Admettez les pods.

    • Non → Passez à l’étape 2.

  2. Self-preemption au sein de l'équipe B

    Question : Les tâches de moindre priorité de l’équipe B peuvent-elles être préemptées ?

    • Oui → Préemptez les tâches d’évaluation (priorité 50), libérez 5 P4 et admettez les pods d’inférence.

    • Non → Passez à l’étape 3.

    Cette approche permet de maintenir les charges de travail dans les limites du quota garanti par l’équipe B, évitant ainsi les risques d’éviction externes.

  3. Emprunt auprès d’autres équipes

    Question : Y a-t-il des quotas inutilisés pouvant être empruntés à d’autres équipes ?

    • Oui → Admettez l’utilisation d’un quota emprunté (marqué comme préemptable).

    • Non → Le pod reste à l’état NotAdmitted.

Configuration de la gouvernance des tâches pour les charges de travail d'inférence

Pour intégrer vos charges de travail d'inférence à Kueue, ajoutez des étiquettes de gouvernance des tâches à votre CRD ou à votre InferenceEndpointConfig CRD. JumpStartModel Ces étiquettes déterminent qui LocalQueue reçoit la charge de travail pour la gestion des quotas et définissent la priorité de planification utilisée dans les décisions de préemption. Les sections suivantes traitent des conditions préalables, de l'étendue des ressources, de la configuration des étiquettes et des étapes de vérification.

Conditions préalables

Avant de configurer la gouvernance des tâches pour les charges de travail d'inférence, assurez-vous que les ressources suivantes existent dans votre HyperPod cluster :

  • Kueue est installé et s'exécute sur votre cluster

  • A ClusterQueueexiste avec un quota de GPU alloué à votre équipe

  • A LocalQueueexiste dans l'espace de noms dans lequel vous prévoyez de déployer votre point de terminaison d'inférence

  • Une ou plusieurs PriorityClassressources sont définies pour les types de charge de travail (tels que l'inférence, la formation, l'évaluation)

Pour vérifier que ces ressources sont disponibles, exécutez les commandes suivantes :

# Verify Kueue is installed kubectl get crd | grep kueue # List available PriorityClasses kubectl get priorityclass # List ClusterQueues kubectl get clusterqueue # List LocalQueues in your namespace kubectl get localqueue -n <your-namespace>

Comprendre le cadrage des ressources

Les ressources de gouvernance des tâches ont des étendues différentes qui affectent la façon dont vous configurez vos étiquettes de déploiement d'inférence.

L'kueue.x-k8s.io/queue-nameétiquette doit faire référence à un LocalQueue qui existe dans le même espace de noms que votre InferenceEndpointConfig orJumpStartModel. Si aucune correspondance n' LocalQueue est trouvée dans cet espace de noms, la charge de travail ne sera pas admise par Kueue.

ClusterQueue, ResourceFlavor, et PriorityClass sont limités à un cluster et accessibles depuis n'importe quel espace de noms.

Pour vérifier l'étendue des ressources sur votre cluster :

kubectl api-resources | grep kueue

Ajouter des étiquettes de gouvernance des tâches

Pour activer la gouvernance des tâches pour votre déploiement d'inférence, ajoutez les étiquettes suivantes à la metadata section de votre CRD InferenceEndpointConfig ou de votre JumpStartModel CRD :

metadata: name: <your-deployment-name> namespace: <your-namespace> labels: kueue.x-k8s.io/queue-name: <your-localqueue-name> kueue.x-k8s.io/priority-class: <your-priority-class>

Descriptions des étiquettes :

  • kueue.x-k8s.io/queue-name— Achemine la charge de travail vers celle de votre équipe LocalQueue pour le suivi des quotas. Doit correspondre à un LocalQueue nom dans le même espace de noms que la charge de travail.

  • kueue.x-k8s.io/priority-class— Définit la priorité de planification pour les décisions de préemption. Fait référence à un cluster dont le nom est défini. PriorityClass

Vérification de la configuration de gouvernance des tâches

Après avoir appliqué InferenceEndpointConfig ou appliqué vos étiquettes JumpStartModel de gouvernance des tâches, vérifiez que Kueue a admis que la charge de travail et les pods sont correctement planifiés.

Pour vérifier que la gouvernance des tâches fonctionne
  1. Vérifiez le statut d'admission de la charge de travail :

    kubectl get workloads -n <namespace>

    Une charge de travail admise avec succès apparaît True dans la colonne ADMISE et répertorie ClusterQueue les ressources réservées dans la colonne RESERVED IN.

  2. Vérifiez l'état du pod :

    kubectl get pods -n <namespace>

    Après leur admission, les pods passent progressivement par les étapes d'initialisation jusqu'à ce qu'ils atteignent Running l'état.

  3. Vérifiez la consommation des quotas :

    kubectl get clusterqueue <clusterqueue-name> -o yaml

    Consultez la status section pour confirmer que la consommation des ressources est suivie.

  4. Vérifiez les charges de travail LocalQueue en attente :

    kubectl get localqueue -n <namespace>

    La colonne CHARGES DE TRAVAIL EN ATTENTE indique le nombre de charges de travail en attente d'admission.

  5. Voir les événements d'admission à Kueue :

    kubectl describe workload <workload-name> -n <namespace>

    Consultez la section Événements pour connaître les décisions d'admission et les éventuelles erreurs.

Si les pods restent en Pending état, déterminez si le problème se situe au niveau d'admission de Kueue (la charge de travail apparaîtAdmitted: False) ou au niveau du planificateur Kubernetes (charge de travail admise mais pod non planifiable).