Crea nodi autogestiti con i blocchi di capacità per il ML - Amazon EKS

Contribuisci a migliorare questa pagina

Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.

Crea nodi autogestiti con i blocchi di capacità per il ML

I blocchi di capacità per il machine learning (ML) ti consentono di riservare istanze GPU in una data futura per supportare i carichi di lavoro ML di breve durata. Per ulteriori informazioni, consulta Blocchi di capacità per il machine learning nella Guida per l’utente di Amazon EC2 per le istanze Linux.

Considerazioni

Importante
  • I blocchi di capacità sono disponibili solo per certi tipi di istanze e regioni AWS Amazon EC2. Per informazioni relative alla compatibilità, consulta Work with Capacity Blocks Prerequisites nella Guida per l’utente di Amazon EC2 per le istanze Linux.

  • Se crei un gruppo di nodi autogestito prima che la prenotazione della capacità diventi attiva, imposta la capacità desiderata su 0.

  • Per avere tempo sufficiente per svuotare correttamente i nodi, suggeriamo di pianificare il dimensionamento fino a zero più di 30 minuti prima dell'orario di fine della prenotazione del blocco di capacità.

  • Affinché i tuoi pod vengano svuotati correttamente, consigliamo di configurare AWS Node Termination Handler, come spiegato nei passaggi di esempio.

Utilizza i blocchi di capacità con nodi autogestiti

Puoi utilizzare i blocchi di capacità con Amazon EKS per effettuare il provisioning e il dimensionamento dei nodi autogestiti. Le seguenti fasi forniscono una panoramica generale di esempio. Gli esempi di modelli AWS CloudFormation non coprono tutti gli aspetti necessari in un carico di lavoro di produzione. In genere è anche necessario uno script di bootstrap per unire il nodo al cluster, specificare un’AMI accelerata Amazon EKS e un profilo dell’istanza adeguato per l’aggiunta al cluster. Per ulteriori informazioni, consulta Crea nodi Amazon Linux autogestiti.

  1. Crea un modello di lancio applicabile al tuo carico di lavoro. Per ulteriori informazioni, consulta Usa i blocchi di capacità per carichi di lavoro di machine learning nella Guida per l'utente di Amazon EC2 Auto Scaling.

    Assicurati che LaunchTemplateData includa quanto segue:

    • InstanceMarketOptions con MarketType impostato su "capacity-block"

    • CapacityReservationSpecification: CapacityReservationTarget con CapacityReservationId impostato sul blocco di capacità (ad esempio: cr-02168da1478b509e0 )

    • IamInstanceProfile con l’Arn impostato sul valore iam-instance-profile-arn applicabile

    • ImageId impostato sull’image-id applicabile

    • InstanceType impostato su un tipo di istanza che supporta i blocchi di capacità (ad esempio: p5.48xlarge)

    • SecurityGroupIds impostato sugli ID applicabili (ad esempio: sg-05b1d815d1EXAMPLE)

    • UserData impostato sui dati utente applicabili per il gruppo di nodi autogestito

      Di seguito è riportato un estratto di un modello CloudFormation che crea un modello di avvio destinato a un blocco di capacità.

      NodeLaunchTemplate: Type: "aws::EC2::LaunchTemplate" Properties: LaunchTemplateData: InstanceMarketOptions: MarketType: "capacity-block" CapacityReservationSpecification: CapacityReservationTarget: CapacityReservationId: "cr-02168da1478b509e0" IamInstanceProfile: Arn: iam-instance-profile-arn ImageId: image-id InstanceType: p5.48xlarge KeyName: key-name SecurityGroupIds: - sg-05b1d815d1EXAMPLE UserData: user-data

      Devi trasmettere la sottorete nella zona di disponibilità in cui viene effettuata la prenotazione, perché i blocchi di capacità sono zonali.

  2. Utilizza il modello di avvio per creare un gruppo di nodi autogestito. Se lo fai prima che la prenotazione della capacità diventi attiva, imposta la capacità desiderata su 0. Quando crei il gruppo di nodi, assicurati di specificare solo la rispettiva sottorete per la zona di disponibilità in cui è la capacità è riservata.

    Di seguito è riportato un esempio di modello CloudFormation che puoi usare come riferimento per crearne uno applicabile al tuo carico di lavoro. Questo esempio ottiene i valori di LaunchTemplateId e Version della risorsa AWS::Amazon EC2::LaunchTemplate mostrata nel passaggio precedente. Ottiene anche i valori di DesiredCapacity, MaxSize, MinSize e VPCZoneIdentifier che sono dichiarati altrove nello stesso modello.

    NodeGroup: Type: "AWS::AutoScaling::AutoScalingGroup" Properties: DesiredCapacity: !Ref NodeAutoScalingGroupDesiredCapacity LaunchTemplate: LaunchTemplateId: !Ref NodeLaunchTemplate Version: !GetAtt NodeLaunchTemplate.LatestVersionNumber MaxSize: !Ref NodeAutoScalingGroupMaxSize MinSize: !Ref NodeAutoScalingGroupMinSize VPCZoneIdentifier: !Ref Subnets Tags: - Key: Name PropagateAtLaunch: true Value: !Sub ${ClusterName}-${NodeGroupName}-Node - Key: !Sub kubernetes.io/cluster/${ClusterName} PropagateAtLaunch: true Value: owned
  3. Una volta che il gruppo di nodi è stato creato, assicurati di registrare il valore NodeInstanceRole per il gruppo di nodi creato. Ciò è necessario per verificare che, in seguito al dimensionamento del gruppo di nodi, i nuovi nodi vengano aggiunti al cluster e Kubernetes sia in grado di riconoscerli. Per ulteriori informazioni, consulta le istruzioni Console di gestione AWS in Create self-managed Amazon Linux nodes.

  4. Consigliamo di creare una policy di dimensionamento programmato per il gruppo con dimensionamento automatico che si allinei ai tempi di prenotazione dei blocchi di capacità. Per ulteriori informazioni, consulta Dimensionamento programmato per Amazon EC2 Auto Scaling nella Guida per l'utente di Amazon EC2 Auto Scaling.

    Puoi utilizzare tutte le istanze prenotate fino a 30 minuti prima dell'orario di fine del blocco di capacità. Le istanze ancora in esecuzione in quel momento inizieranno a terminare. Per avere tempo sufficiente per svuotare correttamente i nodi, suggeriamo di pianificare il dimensionamento fino a zero più di 30 minuti prima dell'orario di fine della prenotazione del blocco di capacità.

    Se desideri invece aumentare le dimensioni manualmente ogni volta che la prenotazione della capacità diventa Active, devi aggiornare la capacità desiderata del gruppo con dimensionamento automatico all’inizio della prenotazione del blocco di capacità. Successivamente, dovrai anche ridurre le dimensioni manualmente più di 30 minuti prima dell'orario di fine della prenotazione del blocco di capacità.

  5. Il gruppo di nodi è ora pronto per la pianificazione di carichi di lavoro e pod.

  6. Affinché i tuoi pod vengano svuotati correttamente, consigliamo di configurare AWS Node Termination Handler. Questo strumento sarà in grado di monitorare gli eventi del ciclo di vita “Ridimensionamento di ASG” di Amazon EC2 Auto Scaling utilizzando EventBridge e consentire al piano di controllo Kubernetes di intraprendere l’azione richiesta prima che l’istanza diventi non disponibile. Altrimenti, i tuoi oggetti pod e Kubernetes rimarranno bloccati nello stato in sospeso. Per ulteriori informazioni, consulta AWS Node Termination Handler su GitHub.

    Se non configuri Node Termination Handler, consigliamo di cominciare a svuotare manualmente i pod prima di raggiungere la finestra di 30 minuti, in modo che abbiano tempo sufficiente per il corretto svuotamento.