Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και στο Amazon SageMaker

Σε αυτήν την ανάρτηση, παρουσιάζουμε πώς Kubeflow στο AWS (μια κατανομή του Kubeflow ειδική για AWS) που χρησιμοποιείται με Εμπορευματοκιβώτια βαθιάς μάθησης AWS και Σύστημα αρχείων ελαστικού Amazon (Amazon EFS) απλοποιεί τη συνεργασία και παρέχει ευελιξία στην εκπαίδευση μοντέλων βαθιάς μάθησης σε κλίμακα και στα δύο Υπηρεσία Amazon Elastic Kubernetes (Amazon EKS) και Amazon Sage Maker χρησιμοποιώντας μια προσέγγιση υβριδικής αρχιτεκτονικής.

Η ανάπτυξη μηχανικής μάθησης (ML) βασίζεται σε πολύπλοκα και συνεχώς εξελισσόμενα πλαίσια ανοιχτού κώδικα και σετ εργαλείων, καθώς και σε πολύπλοκα και συνεχώς εξελισσόμενα οικοσυστήματα υλικού. Αυτό αποτελεί πρόκληση κατά την κλιμάκωση της ανάπτυξης ML σε ένα σύμπλεγμα. Τα κοντέινερ προσφέρουν μια λύση, επειδή μπορούν να ενσωματώσουν πλήρως όχι μόνο τον κώδικα εκπαίδευσης, αλλά ολόκληρη τη στοίβα εξάρτησης στις βιβλιοθήκες υλικού. Αυτό εξασφαλίζει ένα περιβάλλον ML που είναι συνεπές και φορητό και διευκολύνει την αναπαραγωγιμότητα του εκπαιδευτικού περιβάλλοντος σε κάθε μεμονωμένο κόμβο του εκπαιδευτικού συμπλέγματος.

Το Kubernetes είναι ένα ευρέως διαδεδομένο σύστημα για την αυτοματοποίηση της ανάπτυξης υποδομής, της κλίμακας πόρων και της διαχείρισης αυτών των εφαρμογών με κοντέινερ. Ωστόσο, το Kubernetes δεν κατασκευάστηκε με γνώμονα την ML, επομένως μπορεί να αισθάνεται αντίθετο για τους επιστήμονες δεδομένων λόγω της μεγάλης εξάρτησής του από τα αρχεία προδιαγραφών YAML. Δεν υπάρχει εμπειρία Jupyter και δεν υπάρχουν πολλές δυνατότητες ειδικά για ML, όπως διαχείριση ροής εργασιών και αγωγών, και άλλες δυνατότητες που αναμένουν οι ειδικοί ML, όπως συντονισμός υπερπαραμέτρων, φιλοξενία μοντέλου και άλλες. Τέτοιες δυνατότητες μπορούν να δημιουργηθούν, αλλά το Kubernetes δεν σχεδιάστηκε για να το κάνει αυτό ως πρωταρχικό του στόχο.

Η κοινότητα ανοιχτού κώδικα έλαβε υπόψη και ανέπτυξε ένα επίπεδο πάνω από το Kubernetes που ονομάζεται Kubeflow. Το Kubeflow στοχεύει να κάνει την ανάπτυξη ροών εργασίας ML από άκρο σε άκρο στο Kubernetes απλή, φορητή και επεκτάσιμη. Μπορείτε να χρησιμοποιήσετε το Kubeflow για να αναπτύξετε τα καλύτερα συστήματα ανοιχτού κώδικα για ML σε διάφορες υποδομές.

Οι Kubeflow και Kubernetes παρέχουν ευελιξία και έλεγχο στις ομάδες επιστημόνων δεδομένων. Ωστόσο, η εξασφάλιση υψηλής χρησιμοποίησης των ομάδων εκπαίδευσης που λειτουργούν σε κλίμακα με μειωμένα λειτουργικά γενικά έξοδα εξακολουθεί να αποτελεί πρόκληση.

Αυτή η ανάρτηση δείχνει πώς οι πελάτες που έχουν περιορισμούς εσωτερικής εγκατάστασης ή υπάρχουσες επενδύσεις Kubernetes μπορούν να αντιμετωπίσουν αυτήν την πρόκληση χρησιμοποιώντας το Amazon EKS και το Kubeflow στο AWS για να εφαρμόσουν έναν αγωγό ML για κατανεμημένη εκπαίδευση που βασίζεται σε μια αυτοδιαχειριζόμενη προσέγγιση και να χρησιμοποιήσουν πλήρως διαχειριζόμενο SageMaker για βελτιστοποιημένη ως προς το κόστος, πλήρως διαχειριζόμενη υποδομή εκπαίδευσης και σε κλίμακα παραγωγής. Αυτό περιλαμβάνει βήμα προς βήμα εφαρμογή μιας υβριδικής κατανεμημένης αρχιτεκτονικής εκπαίδευσης που σας επιτρέπει να επιλέξετε μεταξύ των δύο προσεγγίσεων κατά το χρόνο εκτέλεσης, παρέχοντας μέγιστο έλεγχο και ευελιξία με αυστηρές ανάγκες για τις αναπτύξεις σας. Θα δείτε πώς μπορείτε να συνεχίσετε να χρησιμοποιείτε βιβλιοθήκες ανοιχτού κώδικα στο σενάριο εκπαίδευσης βαθιάς μάθησης και να το κάνετε ακόμα συμβατό να εκτελείται τόσο στο Kubernetes όσο και στο SageMaker με αγνωστικιστικό τρόπο πλατφόρμας.

Πώς βοηθά το Kubeflow στο AWS και το SageMaker;

Τα μοντέλα νευρωνικών δικτύων που έχουν δημιουργηθεί με πλαίσια βαθιάς εκμάθησης όπως το TensorFlow, το PyTorch, το MXNet και άλλα παρέχουν πολύ μεγαλύτερη ακρίβεια χρησιμοποιώντας σημαντικά μεγαλύτερα σύνολα δεδομένων εκπαίδευσης, ειδικά σε περιπτώσεις χρήσης υπολογιστών και επεξεργασίας φυσικής γλώσσας. Ωστόσο, με μεγάλα σύνολα δεδομένων εκπαίδευσης, χρειάζεται περισσότερος χρόνος για την εκπαίδευση των μοντέλων βαθιάς μάθησης, κάτι που τελικά επιβραδύνει το χρόνο για την αγορά. Εάν μπορούσαμε να κλιμακώσουμε ένα σύμπλεγμα και να μειώσουμε τον χρόνο εκπαίδευσης του μοντέλου από εβδομάδες σε ημέρες ή ώρες, θα μπορούσε να έχει τεράστιο αντίκτυπο στην παραγωγικότητα και την επιχειρηματική ταχύτητα.

Η Amazon EKS βοηθά στην παροχή του διαχειριζόμενου αεροπλάνου ελέγχου Kubernetes. Μπορείτε να χρησιμοποιήσετε το Amazon EKS για να δημιουργήσετε συμπλέγματα εκπαίδευσης μεγάλης κλίμακας με παρουσίες CPU και GPU και να χρησιμοποιήσετε το κιτ εργαλείων Kubeflow για να παρέχετε εργαλεία ανοιχτού κώδικα φιλικά προς ML και να λειτουργήσετε ροές εργασιών ML που είναι φορητές και επεκτάσιμες χρησιμοποιώντας Kubeflow Pipelines για να βελτιώσετε την παραγωγικότητα της ομάδας σας και μειώστε το χρόνο στην αγορά.

Ωστόσο, μπορεί να υπάρχουν μερικές προκλήσεις με αυτήν την προσέγγιση:

  • Διασφάλιση της μέγιστης χρήσης ενός cluster σε ομάδες επιστήμης δεδομένων. Για παράδειγμα, θα πρέπει να παρέχετε στιγμιότυπα GPU κατ' απαίτηση και να διασφαλίζετε την υψηλή αξιοποίησή τους για απαιτητικές εργασίες κλίμακας παραγωγής, όπως η εκπαίδευση σε βάθος, και να χρησιμοποιείτε παρουσίες CPU για τις λιγότερο απαιτητικές εργασίες, όπως η προεπεξεργασία δεδομένων
  • Διασφάλιση υψηλής διαθεσιμότητας βαρέων στοιχείων υποδομής Kubeflow, συμπεριλαμβανομένης της βάσης δεδομένων, της αποθήκευσης και του ελέγχου ταυτότητας, που αναπτύσσονται στον κόμβο εργασίας συμπλέγματος Kubernetes. Για παράδειγμα, το επίπεδο ελέγχου Kubeflow δημιουργεί τεχνουργήματα (όπως στιγμιότυπα MySQL, αρχεία καταγραφής pod ή αποθήκευση MinIO) που μεγαλώνουν με την πάροδο του χρόνου και χρειάζονται όγκους αποθήκευσης με δυνατότητα αλλαγής μεγέθους με δυνατότητες συνεχούς παρακολούθησης.
  • Η κοινή χρήση του συνόλου δεδομένων εκπαίδευσης, του κώδικα και των υπολογιστικών περιβαλλόντων μεταξύ προγραμματιστών, συστάδων εκπαίδευσης και έργων αποτελεί πρόκληση. Για παράδειγμα, εάν εργάζεστε στο δικό σας σύνολο βιβλιοθηκών και αυτές οι βιβλιοθήκες έχουν ισχυρές αλληλεξαρτήσεις, είναι πολύ δύσκολο να μοιραστείτε και να εκτελέσετε το ίδιο κομμάτι κώδικα μεταξύ επιστημόνων δεδομένων στην ίδια ομάδα. Επίσης, κάθε εκτέλεση εκπαίδευσης απαιτεί από εσάς να κατεβάσετε το σύνολο δεδομένων εκπαίδευσης και να δημιουργήσετε την εικόνα της εκπαίδευσης με νέες αλλαγές κώδικα.

Το Kubeflow στο AWS βοηθά στην αντιμετώπιση αυτών των προκλήσεων και παρέχει ένα ημιδιαχειριζόμενο προϊόν Kubeflow σε επίπεδο επιχείρησης. Με το Kubeflow στο AWS, μπορείτε να αντικαταστήσετε ορισμένες υπηρεσίες επιπέδου ελέγχου Kubeflow, όπως βάση δεδομένων, αποθήκευση, παρακολούθηση και διαχείριση χρηστών με υπηρεσίες διαχείρισης AWS, όπως Υπηρεσία σχεσιακής βάσης δεδομένων Amazon (Amazon RDS), Απλή υπηρεσία αποθήκευσης Amazon (Amazon S3), Σύστημα αρχείων ελαστικού Amazon (Amazon EFS), Amazon FSx, amazoncloudwatch, να Amazon Cognito.

Η αντικατάσταση αυτών των εξαρτημάτων Kubeflow αποσυνδέει κρίσιμα μέρη του επιπέδου ελέγχου Kubeflow από την Kubernetes, παρέχοντας έναν ασφαλή, επεκτάσιμο, ελαστικό και βελτιστοποιημένο σχεδιασμό. Αυτή η προσέγγιση ελευθερώνει επίσης πόρους αποθήκευσης και υπολογισμούς από το επίπεδο δεδομένων EKS, οι οποίοι μπορεί να χρειάζονται σε εφαρμογές όπως η εκπαίδευση κατανεμημένων μοντέλων ή οι διακομιστές φορητών υπολογιστών χρηστών. Το Kubeflow στο AWS παρέχει επίσης εγγενή ενσωμάτωση φορητών υπολογιστών Jupyter με εικόνες Deep Learning Container (DLC), οι οποίες είναι προ-συσκευασμένες και προρυθμισμένες με βελτιστοποιημένα AWS πλαίσια βαθιάς μάθησης, όπως το PyTorch και το TensorFlow που σας επιτρέπουν να αρχίσετε να γράφετε τον εκπαιδευτικό σας κώδικα αμέσως χωρίς να το κάνετε. με αναλύσεις εξάρτησης και βελτιστοποιήσεις πλαισίου. Επίσης, η ενσωμάτωση του Amazon EFS με τα συμπλέγματα εκπαίδευσης και το περιβάλλον ανάπτυξης σάς επιτρέπει να μοιράζεστε τον κώδικα και το επεξεργασμένο σύνολο δεδομένων εκπαίδευσης, το οποίο αποφεύγει τη δημιουργία της εικόνας του κοντέινερ και τη φόρτωση τεράστιων συνόλων δεδομένων μετά από κάθε αλλαγή κώδικα. Αυτές οι ενσωματώσεις με το Kubeflow στο AWS σάς βοηθούν να επιταχύνετε τον χρόνο κατασκευής και εκπαίδευσης του μοντέλου και επιτρέπουν την καλύτερη συνεργασία με ευκολότερη κοινή χρήση δεδομένων και κώδικα.

Το Kubeflow στο AWS βοηθά στη δημιουργία μιας εξαιρετικά διαθέσιμης και ισχυρής πλατφόρμας ML. Αυτή η πλατφόρμα παρέχει ευελιξία για τη δημιουργία και την εκπαίδευση μοντέλων βαθιάς μάθησης και παρέχει πρόσβαση σε πολλές εργαλειοθήκες ανοιχτού κώδικα, πληροφορίες για αρχεία καταγραφής και διαδραστικό εντοπισμό σφαλμάτων για πειραματισμό. Ωστόσο, η επίτευξη της μέγιστης αξιοποίησης των πόρων υποδομής κατά την εκπαίδευση μοντέλων βαθιάς μάθησης σε εκατοντάδες GPU εξακολουθεί να περιλαμβάνει πολλά λειτουργικά έξοδα. Αυτό θα μπορούσε να αντιμετωπιστεί με τη χρήση του SageMaker, η οποία είναι μια πλήρως διαχειριζόμενη υπηρεσία σχεδιασμένη και βελτιστοποιημένη για το χειρισμό αποδοτικών και βελτιστοποιημένων ως προς το κόστος συμπλεγμάτων εκπαίδευσης που παρέχονται μόνο όταν ζητηθεί, κλιμακώνονται ανάλογα με τις ανάγκες και κλείνουν αυτόματα όταν ολοκληρωθούν οι εργασίες, παρέχοντας έτσι σχεδόν 100 % εκμετάλλευση πόρων. Μπορείτε να ενσωματώσετε το SageMaker με το Kubeflow Pipelines χρησιμοποιώντας διαχειριζόμενα στοιχεία SageMaker. Αυτό σας επιτρέπει να θέσετε σε λειτουργία τις ροές εργασίας ML ως μέρος των αγωγών Kubeflow, όπου μπορείτε να χρησιμοποιήσετε το Kubernetes για τοπική εκπαίδευση και το SageMaker για εκπαίδευση σε κλίμακα προϊόντος σε μια υβριδική αρχιτεκτονική.

Επισκόπηση λύσεων

Η ακόλουθη αρχιτεκτονική περιγράφει τον τρόπο με τον οποίο χρησιμοποιούμε το Kubeflow Pipelines για τη δημιουργία και την ανάπτυξη φορητών και επεκτάσιμων ροών εργασιών ML από άκρο σε άκρο για την υπό όρους εκτέλεση κατανεμημένης εκπαίδευσης στο Kubernetes χρησιμοποιώντας εκπαίδευση Kubeflow ή SageMaker με βάση την παράμετρο χρόνου εκτέλεσης.

Η εκπαίδευση Kubeflow είναι μια ομάδα χειριστών Kubernetes που προσθέτουν στο Kubeflow την υποστήριξη για κατανεμημένη εκπαίδευση μοντέλων ML χρησιμοποιώντας διαφορετικά πλαίσια όπως το TensorFlow, το PyTorch και άλλα. pytorch-operator είναι η υλοποίηση Kubeflow των Kubernetes προσαρμοσμένος πόρος (PyTorchJob) για την εκτέλεση κατανεμημένων εργασιών εκπαίδευσης PyTorch στο Kubernetes.

Χρησιμοποιούμε το στοιχείο PyTorchJob Launcher ως μέρος της διοχέτευσης Kubeflow για την εκτέλεση κατανεμημένης εκπαίδευσης PyTorch κατά τη φάση πειραματισμού, όταν χρειαζόμαστε ευελιξία και πρόσβαση σε όλους τους υποκείμενους πόρους για διαδραστικό εντοπισμό σφαλμάτων και ανάλυση.

Χρησιμοποιούμε επίσης εξαρτήματα SageMaker για Kubeflow Pipelines για να εκτελέσουμε την εκπαίδευση μοντέλων μας σε κλίμακα παραγωγής. Αυτό μας επιτρέπει να εκμεταλλευόμαστε ισχυρές δυνατότητες του SageMaker, όπως υπηρεσίες πλήρους διαχείρισης, κατανεμημένες εργασίες εκπαίδευσης με μέγιστη χρήση GPU και οικονομική εκπαίδευση μέσω Amazon Elastic Compute Cloud (Amazon EC2) Στιγμιαίες παρουσίες.

Ως μέρος της διαδικασίας δημιουργίας ροής εργασίας, ολοκληρώνετε τα ακόλουθα βήματα (όπως φαίνεται στο προηγούμενο διάγραμμα) για να δημιουργήσετε αυτόν τον αγωγό:

  1. Χρησιμοποιήστε το αρχείο μανιφέστου Kubeflow για να δημιουργήσετε έναν πίνακα εργαλείων Kubeflow και να αποκτήσετε πρόσβαση σε σημειωματάρια Jupyter από τον κεντρικό πίνακα εργαλείων Kubeflow.
  2. Χρησιμοποιήστε το Kubeflow pipeline SDK για να δημιουργήσετε και να μεταγλωττίσετε αγωγούς Kubeflow χρησιμοποιώντας κώδικα Python. Η μεταγλώττιση Pipeline μετατρέπει τη συνάρτηση Python σε έναν πόρο ροής εργασίας, ο οποίος είναι μια μορφή YAML συμβατή με το Argo.
  3. Χρησιμοποιήστε τον πελάτη Kubeflow Pipelines SDK για να καλέσετε το τελικό σημείο της υπηρεσίας διοχέτευσης για να εκτελέσετε τη διοχέτευση.
  4. Η διοχέτευση αξιολογεί τις μεταβλητές χρόνου εκτέλεσης υπό όρους και αποφασίζει μεταξύ του SageMaker ή του Kubernetes ως το περιβάλλον εκτέλεσης στόχου.
  5. Χρησιμοποιήστε το στοιχείο Kubeflow PyTorch Launcher για να εκτελέσετε κατανεμημένη εκπαίδευση στο εγγενές περιβάλλον Kubernetes ή χρησιμοποιήστε το στοιχείο SageMaker για να υποβάλετε την εκπαίδευση στη διαχειριζόμενη πλατφόρμα SageMaker.

Το παρακάτω σχήμα δείχνει τα στοιχεία Kubeflow Pipelines που εμπλέκονται στην αρχιτεκτονική που μας δίνουν την ευελιξία να επιλέξουμε ανάμεσα σε κατανεμημένα περιβάλλοντα Kubernetes ή SageMaker.

Στοιχεία Kubeflow Pipelines

Χρησιμοποιήστε Case Workflow

Χρησιμοποιούμε την ακόλουθη προσέγγιση βήμα προς βήμα για να εγκαταστήσουμε και να εκτελέσουμε την περίπτωση χρήσης για κατανεμημένη εκπαίδευση χρησιμοποιώντας το Amazon EKS και το SageMaker χρησιμοποιώντας το Kubeflow στο AWS.

Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Προϋποθέσεις

Για αυτήν την καθοδήγηση, θα πρέπει να έχετε τις ακόλουθες προϋποθέσεις:

  • An Λογαριασμός AWS.
  • Ένα μηχάνημα με το Docker και το Διεπαφή γραμμής εντολών AWS (AWS CLI) εγκατεστημένο.
  • Προαιρετικά, μπορείτε να χρησιμοποιήσετε AWS Cloud9, ένα ολοκληρωμένο περιβάλλον ανάπτυξης που βασίζεται σε σύννεφο (IDE) που επιτρέπει την ολοκλήρωση όλης της εργασίας από το πρόγραμμα περιήγησής σας. Για οδηγίες ρύθμισης, ανατρέξτε στο Ρύθμιση του Cloud9 IDE. Από το περιβάλλον Cloud9, επιλέξτε το σύμβολο συν και ανοίξτε το νέο τερματικό.
  • Δημιουργήστε έναν ρόλο με το όνομα sagemakerrole. Προσθήκη διαχειριζόμενων πολιτικών AmazonSageMakerFullAccess και AmazonS3FullAccess για να δώσετε στο SageMaker πρόσβαση σε κάδους S3. Αυτός ο ρόλος χρησιμοποιείται από την εργασία του SageMaker που υποβλήθηκε ως μέρος του βήματος Kubeflow Pipelines.
  • Βεβαιωθείτε ότι ο λογαριασμός σας έχει όριο τύπου πόρων SageMaker Training για ml.p3.2xlarge αυξήθηκε σε 2 χρησιμοποιώντας Service Quotas Console

1. Εγκαταστήστε το Amazon EKS και το Kubeflow στο AWS

Μπορείτε να χρησιμοποιήσετε πολλές διαφορετικές προσεγγίσεις για να δημιουργήσετε ένα σύμπλεγμα Kubernetes και να αναπτύξετε το Kubeflow. Σε αυτήν την ανάρτηση, εστιάζουμε σε μια προσέγγιση που πιστεύουμε ότι φέρνει απλότητα στη διαδικασία. Πρώτα, δημιουργούμε ένα σύμπλεγμα EKS και, στη συνέχεια, αναπτύσσουμε το Kubeflow σε AWS v1.5 σε αυτό. Για καθεμία από αυτές τις εργασίες, χρησιμοποιούμε ένα αντίστοιχο έργο ανοιχτού κώδικα που ακολουθεί τις αρχές του Κάντε το πλαίσιο. Αντί να εγκαταστήσουμε ένα σύνολο προαπαιτούμενων για κάθε εργασία, κατασκευάζουμε κοντέινερ Docker που διαθέτουν όλα τα απαραίτητα εργαλεία και εκτελούν τις εργασίες μέσα από τα κοντέινερ.

Χρησιμοποιούμε το Do Framework σε αυτήν την ανάρτηση, το οποίο αυτοματοποιεί την ανάπτυξη του Kubeflow με το Amazon EFS ως πρόσθετο. Για τις επίσημες επιλογές ανάπτυξης Kubeflow για AWS για αναπτύξεις παραγωγής, ανατρέξτε στο Ανάπτυξη.

Διαμορφώστε τον τρέχοντα κατάλογο εργασίας και το AWS CLI

Διαμορφώνουμε έναν κατάλογο εργασίας, ώστε να μπορούμε να αναφερθούμε σε αυτόν ως το σημείο εκκίνησης για τα βήματα που ακολουθούν:

export working_dir=$PWD

Διαμορφώνουμε επίσης ένα προφίλ AWS CLI. Για να το κάνετε αυτό, χρειάζεστε ένα αναγνωριστικό κλειδιού πρόσβασης και ένα μυστικό κλειδί πρόσβασης ενός Διαχείριση ταυτότητας και πρόσβασης AWS (ΕΓΩ ΕΙΜΑΙ) χρήστη λογαριασμό με δικαιώματα διαχειριστή (επισυνάψτε την υπάρχουσα διαχειριζόμενη πολιτική) και πρόσβαση μέσω προγραμματισμού. Δείτε τον παρακάτω κώδικα:

aws configure --profile=kubeflow
AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]: us-west-2
Default output format [None]: json

# (In Cloud9, select “Cancel” and “Permanently disable” when the AWS managed temporary credentials dialog pops up)

export AWS_PROFILE=kubeflow

1.1 Δημιουργήστε ένα σύμπλεγμα EKS

Εάν έχετε ήδη διαθέσιμο ένα σύμπλεγμα EKS, μπορείτε να μεταβείτε στην επόμενη ενότητα. Για αυτήν την ανάρτηση, χρησιμοποιούμε το έργο aws-do-eks για να δημιουργήσουμε το σύμπλεγμα μας.

  1. Πρώτα κλωνοποιήστε το έργο στον κατάλογο εργασίας σας
    cd ${working_dir}
    git clone https://github.com/aws-samples/aws-do-eks
    cd aws-do-eks/

  2. Στη συνέχεια, κατασκευάστε και εκτελέστε το aws-do-eks δοχείο:
    ./build.sh
    ./run.sh

    Η build.sh Το σενάριο δημιουργεί μια εικόνα κοντέινερ Docker που διαθέτει όλα τα απαραίτητα εργαλεία και σενάρια για την παροχή και τη λειτουργία συμπλεγμάτων EKS. ο run.sh Το σενάριο ξεκινά ένα κοντέινερ χρησιμοποιώντας την εικόνα Docker που δημιουργήθηκε και το διατηρεί, ώστε να μπορούμε να το χρησιμοποιήσουμε ως περιβάλλον διαχείρισης EKS. Για να δείτε την κατάστασή σας aws-do-eks δοχείο, μπορείτε να τρέξετε ./status.sh. Εάν το κοντέινερ βρίσκεται σε κατάσταση Έξοδος, μπορείτε να χρησιμοποιήσετε το ./start.sh script για να ανεβάσετε το κοντέινερ ή για να επανεκκινήσετε το κοντέινερ, μπορείτε να εκτελέσετε ./stop.sh ακολουθούμενη από ./run.sh.

  3. Ανοίξτε ένα κέλυφος στο τρέξιμο aws-do-eks δοχείο:
  4. Για να ελέγξετε τη διαμόρφωση του συμπλέγματος EKS για την ανάπτυξη του KubeFlow, εκτελέστε την ακόλουθη εντολή:
    vi ./eks-kubeflow.yaml

    Από προεπιλογή, αυτή η διαμόρφωση δημιουργεί ένα σύμπλεγμα με όνομα eks-kubeflow στο us-west-2 Περιοχή με έξι m5.xlarge κόμβους. Επίσης, η κρυπτογράφηση τόμων EBS δεν είναι ενεργοποιημένη από προεπιλογή. Μπορείτε να το ενεργοποιήσετε προσθέτοντας "volumeEncrypted: true" στην ομάδα κόμβων και θα κρυπτογραφήσει χρησιμοποιώντας το προεπιλεγμένο κλειδί. Τροποποιήστε άλλες ρυθμίσεις διαμορφώσεων εάν χρειάζεται.

  5. Για να δημιουργήσετε το σύμπλεγμα, εκτελέστε την ακόλουθη εντολή:
    export AWS_PROFILE=kubeflow
    eksctl create cluster -f ./eks-kubeflow.yaml

    Η διαδικασία παροχής συμπλέγματος μπορεί να διαρκέσει έως και 30 λεπτά.

  6. Για να επαληθεύσετε ότι το σύμπλεγμα δημιουργήθηκε με επιτυχία, εκτελέστε την ακόλουθη εντολή:
    kubectl get nodes

    Η έξοδος από την προηγούμενη εντολή για ένα σύμπλεγμα που δημιουργήθηκε με επιτυχία μοιάζει με τον ακόλουθο κώδικα:

    root@cdf4ecbebf62:/eks# kubectl get nodes
    NAME                                           STATUS   ROLES    AGE   VERSION
    ip-192-168-0-166.us-west-2.compute.internal    Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-13-28.us-west-2.compute.internal    Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-45-240.us-west-2.compute.internal   Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-63-84.us-west-2.compute.internal    Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-75-56.us-west-2.compute.internal    Ready       23m   v1.21.14-eks-ba74326
    ip-192-168-85-226.us-west-2.compute.internal   Ready       23m   v1.21.14-eks-ba74326

Δημιουργήστε έναν τόμο EFS για την εργασία εκπαίδευσης του SageMaker

Σε αυτήν την περίπτωση χρήσης, επιταχύνετε την εργασία εκπαίδευσης του SageMaker εκπαιδεύοντας μοντέλα βαθιάς εκμάθησης από δεδομένα που είναι ήδη αποθηκευμένα στο Amazon EFS. Αυτή η επιλογή έχει το πλεονέκτημα της άμεσης εκκίνησης των εργασιών εκπαίδευσής σας από τα δεδομένα στο Amazon EFS χωρίς να απαιτείται μετακίνηση δεδομένων, με αποτέλεσμα ταχύτερους χρόνους έναρξης της εκπαίδευσης.

Δημιουργούμε έναν τόμο EFS και αναπτύσσουμε το πρόγραμμα οδήγησης EFS Container Storage Interface (CSI). Αυτό επιτυγχάνεται με ένα σενάριο ανάπτυξης που βρίσκεται στο /eks/deployment/csi/efs μέσα στο aws-do-eks δοχείο.

Αυτό το σενάριο προϋποθέτει ότι έχετε ένα σύμπλεγμα EKS στον λογαριασμό σας. Σειρά CLUSTER_NAME= σε περίπτωση που έχετε περισσότερα από ένα σύμπλεγμα EKS.

cd /eks/deployment/csi/efs
./deploy.sh

Αυτό το σενάριο παρέχει έναν τόμο EFS και δημιουργεί στόχους προσάρτησης για τα υποδίκτυα του συμπλέγματος VPC. Στη συνέχεια, αναπτύσσει το πρόγραμμα οδήγησης EFS CSI και δημιουργεί το efs-sc κατηγορία αποθήκευσης και efs-pv επίμονος όγκος στο σύμπλεγμα EKS.

Μετά την επιτυχή ολοκλήρωση του σεναρίου, θα πρέπει να δείτε την έξοδο ως εξής:

Generating efs-sc.yaml ...

Applying efs-sc.yaml ...
storageclass.storage.k8s.io/efs-sc created
NAME            PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
efs-sc          efs.csi.aws.com         Delete          Immediate              false                  1s
gp2 (default)   kubernetes.io/aws-ebs   Delete          WaitForFirstConsumer   false                  36m

Generating efs-pv.yaml ...
Applying efs-pv.yaml ...
persistentvolume/efs-pv created
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
efs-pv   5Gi        RWX            Retain           Available           efs-sc                  10s

Done ...

Δημιουργήστε ένα τελικό σημείο Amazon S3 VPC

Χρησιμοποιείτε ένα ιδιωτικό VPC στο οποίο έχουν πρόσβαση η εργασία εκπαίδευσης του SageMaker και το σύστημα αρχείων EFS. Για να δώσετε στο σύμπλεγμα εκπαίδευσης SageMaker πρόσβαση στους κάδους S3 από το ιδιωτικό σας VPC, δημιουργείτε ένα τελικό σημείο VPC:

cd /eks/vpc 
export CLUSTER_NAME= 
export REGION= 
./vpc-endpoint-create.sh

Μπορείτε τώρα να βγείτε από το aws-do-eks κέλυφος δοχείου και προχωρήστε στην επόμενη ενότητα:

exit

root@cdf4ecbebf62:/eks/deployment/csi/efs# exit
exit
TeamRole:~/environment/aws-do-eks (main) $

1.2 Αναπτύξτε το Kubeflow στο AWS στο Amazon EKS

Για να αναπτύξουμε το Kubeflow στο Amazon EKS, χρησιμοποιούμε το έργο aws-do-kubeflow.

  1. Κλωνοποιήστε το αποθετήριο χρησιμοποιώντας τις ακόλουθες εντολές:
    cd ${working_dir}
    git clone https://github.com/aws-samples/aws-do-kubeflow
    cd aws-do-kubeflow

  2. Στη συνέχεια διαμορφώστε το έργο:
    ./config.sh

    Αυτό το σενάριο ανοίγει το αρχείο διαμόρφωσης του έργου σε ένα πρόγραμμα επεξεργασίας κειμένου. Είναι σημαντικό για AWS_REGION να οριστεί στην περιοχή στην οποία βρίσκεται το σύμπλεγμα σας, καθώς και AWS_CLUSTER_NAME για να ταιριάζει με το όνομα του συμπλέγματος που δημιουργήσατε νωρίτερα. Από προεπιλογή, η διαμόρφωσή σας έχει ήδη ρυθμιστεί σωστά, επομένως εάν δεν χρειάζεται να κάνετε αλλαγές, απλώς κλείστε το πρόγραμμα επεξεργασίας.

    ./build.sh
    ./run.sh
    ./exec.sh

    Η build.sh Το σενάριο δημιουργεί μια εικόνα κοντέινερ Docker που διαθέτει όλα τα απαραίτητα εργαλεία για την ανάπτυξη και τη διαχείριση του Kubeflow σε ένα υπάρχον σύμπλεγμα Kubernetes. ο run.sh Το σενάριο ξεκινά ένα κοντέινερ, χρησιμοποιώντας την εικόνα Docker και το σενάριο exec.sh ανοίγει ένα κέλυφος εντολών στο κοντέινερ, το οποίο μπορούμε να χρησιμοποιήσουμε ως περιβάλλον διαχείρισης Kubeflow. Μπορείτε να χρησιμοποιήσετε το ./status.sh σενάριο για να δούμε αν το aws-do-kubeflow το δοχείο είναι σε λειτουργία και το ./stop.sh και ./run.sh σενάρια για επανεκκίνηση όπως απαιτείται.

  3. Αφού ανοίξετε ένα κέλυφος στο aws-do-eks κοντέινερ, μπορείτε να επαληθεύσετε ότι το διαμορφωμένο περιβάλλον συμπλέγματος είναι το αναμενόμενο:
    root@ip-172-31-43-155:/kubeflow# kubectx
    kubeflow@eks-kubeflow.us-west-2.eksctl.io

  4. Για να αναπτύξετε το Kubeflow στο σύμπλεγμα EKS, εκτελέστε το deploy.sh γραφή:
    ./kubeflow-deploy.sh

    Η ανάπτυξη είναι επιτυχής όταν όλα τα pod στον χώρο ονομάτων kubeflow εισέλθουν σε κατάσταση εκτέλεσης. Μια τυπική έξοδος μοιάζει με τον ακόλουθο κώδικα:

    Waiting for all Kubeflow pods to start Running ...
    
    Waiting for all Kubeflow pods to start Running ...
    
    Restarting central dashboard ...
    pod "centraldashboard-79f489b55-vr6lp" deleted
    /kubeflow/deploy/distro/aws/kubeflow-manifests /kubeflow/deploy/distro/aws
    /kubeflow/deploy/distro/aws
    
    Kubeflow deployment succeeded
    Granting cluster access to kubeflow profile user ...
    Argument not provided, assuming default user namespace kubeflow-user-example-com ...
    clusterrolebinding.rbac.authorization.k8s.io/kubeflow-user-example-com-cluster-admin-binding created
    Setting up access to Kubeflow Pipelines ...
    Argument not provided, assuming default user namespace kubeflow-user-example-com ...
    
    Creating pod-default for namespace kubeflow-user-example-com ...
    poddefault.kubeflow.org/access-ml-pipeline created

  5. Για να παρακολουθήσετε την κατάσταση των pods KubeFlow, σε ξεχωριστό παράθυρο, μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή:
    watch kubectl -n kubeflow get pods

  6. Τύπος Ctrl + C όταν όλα τα pods εκτελούνται, τότε εκθέστε τον πίνακα εργαλείων Kubeflow έξω από το σύμπλεγμα εκτελώντας την ακόλουθη εντολή:
    ./kubeflow-expose.sh

Θα πρέπει να δείτε έξοδο που μοιάζει με τον ακόλουθο κώδικα:

root@ip-172-31-43-155:/kubeflow# ./kubeflow-expose.sh
root@ip-172-31-43-155:/kubeflow# Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

Αυτή η θύρα εντολής προωθεί την υπηρεσία πύλης εισόδου Istio από το σύμπλεγμα στην τοπική θύρα 8080. Για πρόσβαση στον πίνακα εργαλείων Kubeflow, επισκεφτείτε http://localhost:8080 και συνδεθείτε χρησιμοποιώντας τα προεπιλεγμένα διαπιστευτήρια χρήστη (user@example.com/12341234). Εάν εκτελείτε το aws-do-kubeflow κοντέινερ στο AWS Cloud9, τότε μπορείτε να επιλέξετε Προβολή, κατόπιν επιλέξτε Προεπισκόπηση Εκτελούμενη εφαρμογή. Εάν εκτελείτε σε Docker Desktop, ίσως χρειαστεί να εκτελέσετε το ./kubeflow-expose.sh σενάριο έξω από το aws-do-kubeflow δοχείο.

Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

2. Ρυθμίστε το περιβάλλον Kubeflow σε AWS

Για να ρυθμίσετε το Kubeflow σε περιβάλλον AWS, δημιουργούμε έναν τόμο EFS και ένα σημειωματάριο Jupyter.

2.1 Δημιουργήστε έναν τόμο EFS

Για να δημιουργήσετε έναν τόμο EFS, ολοκληρώστε τα παρακάτω βήματα:

  • Στον πίνακα εργαλείων Kubeflow, επιλέξτε Τόμοι στο παράθυρο πλοήγησης.
  • Επιλέξτε Νέος τόμος.
  • Για Όνομα, εισαγω efs-sc-claim.
  • Για Μέγεθος όγκου, εισαγω 10.
  • Για Κατηγορία αποθήκευσης, επιλέξτε efs-sc.
  • Για Λειτουργία πρόσβασης, επιλέξτε ReadWriteOnce.
  • Επιλέξτε Δημιουργία.

Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

2.2 Δημιουργήστε ένα σημειωματάριο Jupyter

Για να δημιουργήσετε ένα νέο σημειωματάριο, ολοκληρώστε τα παρακάτω βήματα:

  • Στον πίνακα εργαλείων Kubeflow, επιλέξτε Φορητοί υπολογιστές στο παράθυρο πλοήγησης.
  • Επιλέξτε Νέο σημειωματάριο.
  • Για Όνομα, εισαγω aws-hybrid-nb.
  • Για Εικόνα Jupyter Docket, επιλέξτε την εικόνα c9e4w0g3/notebook-servers/jupyter-pytorch:1.11.0-cpu-py38-ubuntu20.04-e3-v1.1 (η πιο πρόσφατη διαθέσιμη εικόνα DLC του jupyter-pytorch).
  • Για CPU, εισαγω 1.
  • Για Μνήμη, εισαγω 5.
  • Για GPU, αφήστε ως Κανένας.
  • Μην κάνετε καμία αλλαγή στο Ένταση χώρου εργασίας τμήμα.
  • Στο Τόμοι δεδομένων τμήμα, επιλέξτε Επισυνάψτε τον υπάρχοντα τόμο και αναπτύξτε την ενότητα Υπάρχον τόμο
  • Για Όνομα, επιλέξτε efs-sc-claim.
  • Για Μονοπάτι του βουνού, εισαγω /home/jovyan/efs-sc-claim.
    Αυτό προσαρτά τον τόμο EFS στην ομάδα φορητού υπολογιστή Jupyter και μπορείτε να δείτε τον φάκελο efs-sc-claim στη διεπαφή εργαστηρίου Jupyter. Αποθηκεύετε το σύνολο δεδομένων εκπαίδευσης και τον κώδικα εκπαίδευσης σε αυτόν τον φάκελο, ώστε τα συμπλέγματα εκπαίδευσης να έχουν πρόσβαση σε αυτά χωρίς να χρειάζεται να δημιουργήσετε ξανά τις εικόνες του κοντέινερ για δοκιμή.Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.
  • Αγορά Επιτρέψτε την πρόσβαση στους αγωγούς Kubeflow στην ενότητα Διαμόρφωση.
  • Επιλέξτε Εκκίνηση.
    Βεβαιωθείτε ότι το σημειωματάριό σας δημιουργήθηκε με επιτυχία (μπορεί να χρειαστούν μερικά λεπτά).Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.
  • Στις Φορητοί υπολογιστές σελίδα, επιλέξτε Connect για να συνδεθείτε στο περιβάλλον JupyterLab.
  • Στις Git μενού, επιλέξτε Κλωνοποιήστε ένα αποθετήριο.
  • Για Κλωνοποιήστε ένα repo, εισαγω https://github.com/aws-samples/aws-do-kubeflow.
    Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

3. Εκτελέστε κατανεμημένη εκπαίδευση

Αφού ρυθμίσετε το σημειωματάριο Jupyter, μπορείτε να εκτελέσετε ολόκληρη την επίδειξη χρησιμοποιώντας τα ακόλουθα βήματα υψηλού επιπέδου από το φάκελο aws-do-kubeflow/workshop στο κλωνοποιημένο αποθετήριο:

  • Σενάριο εκπαίδευσης PyTorch Distributed Data Parallel (DDP): Ανατρέξτε στο σενάριο εκπαίδευσης PyTorch DDP cifar10-distributed-gpu-final.py, το οποίο περιλαμβάνει ένα δείγμα συνελικτικού νευρωνικού δικτύου και λογική για τη διανομή εκπαίδευσης σε ένα σύμπλεγμα CPU και GPU πολλαπλών κόμβων. (Ανατρέξτε στο 3.1 για λεπτομέρειες)
  • Εγκαταστήστε βιβλιοθήκες: Εκτελέστε το σημειωματάριο 0_initialize_dependencies.ipynb για να αρχικοποιήσετε όλες τις εξαρτήσεις. (Ανατρέξτε στο 3.2 για λεπτομέρειες)
  • Εκτελέστε διανεμημένη εκπαίδευση εργασίας PyTorch στο Kubernetes: Εκτελέστε το σημειωματάριο 1_submit_pytorchdist_k8s.ipynb για να δημιουργήσετε και να υποβάλετε κατανεμημένη εκπαίδευση σε ένα κύριο και δύο κοντέινερ εργασίας χρησιμοποιώντας τον προσαρμοσμένο πόρο PyTorchJob YAML του Kubernetes χρησιμοποιώντας κώδικα Python. (Ανατρέξτε στο 3.3 για λεπτομέρειες)
  • Δημιουργήστε έναν υβριδικό αγωγό Kubeflow: Εκτελέστε το σημειωματάριο 2_create_pipeline_k8s_sagemaker.ipynb για τη δημιουργία του υβριδικού αγωγού Kubeflow που εκτελεί κατανεμημένη εκπαίδευση είτε στο SageMaker είτε στο Amazon EKS χρησιμοποιώντας τη μεταβλητή χρόνου εκτέλεσης training_runtime. (Ανατρέξτε στο 3.4 για λεπτομέρειες)

Βεβαιωθείτε ότι έχετε τρέξει το σημειωματάριο 1_submit_pytorchdist_k8s.ipynb πριν ξεκινήσετε το σημειωματάριο 2_create_pipeline_k8s_sagemaker.ipynb.

Στις επόμενες ενότητες, θα συζητήσουμε κάθε ένα από αυτά τα βήματα λεπτομερώς.

3.1 Σενάριο εκπαίδευσης PyTorch Distributed Data Parallel(DDP).

Ως μέρος της κατανεμημένης εκπαίδευσης, εκπαιδεύουμε ένα μοντέλο ταξινόμησης που δημιουργήθηκε από ένα απλό συνελικτικό νευρωνικό δίκτυο που λειτουργεί στο σύνολο δεδομένων CIFAR10. Το σενάριο εκπαίδευσης cifar10-distributed-gpu-final.py περιέχει μόνο τις βιβλιοθήκες ανοιχτού κώδικα και είναι συμβατό για εκτέλεση τόσο σε συμπλέγματα εκπαίδευσης Kubernetes και SageMaker είτε σε συσκευές GPU είτε σε παρουσίες CPU. Ας δούμε μερικές σημαντικές πτυχές του σεναρίου εκπαίδευσης προτού εκτελέσουμε τα παραδείγματα του σημειωματάριου μας.

Χρησιμοποιούμε το torch.distributed ενότητα, η οποία περιέχει υποστήριξη PyTorch και πρωτόγονα επικοινωνίας για παραλληλισμό πολλαπλών διεργασιών μεταξύ κόμβων στο σύμπλεγμα:

...
import torch
import torch.distributed as dist
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torch.utils.data
import torch.utils.data.distributed
import torchvision
from torchvision import datasets, transforms
...

Δημιουργούμε ένα απλό μοντέλο ταξινόμησης εικόνων χρησιμοποιώντας έναν συνδυασμό συνελικτικών, μέγιστων ομαδοποιήσεων και γραμμικών επιπέδων στα οποία εφαρμόζεται μια συνάρτηση ενεργοποίησης επαναλαμβανόμενης στο εμπρός πέρασμα της εκπαίδευσης του μοντέλου:

# Define models
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)

def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 16 * 5 * 5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x

Χρησιμοποιούμε τον φακό DataLoader που συνδυάζει το σύνολο δεδομένων και DistributedSampler (φορτώνει ένα υποσύνολο δεδομένων με κατανεμημένο τρόπο χρησιμοποιώντας torch.nn.parallel.DistributedDataParallel) και παρέχει έναν επαναλήπτη μιας διαδικασίας ή πολλαπλών διεργασιών στα δεδομένα:

# Define data loader for training dataset
def _get_train_data_loader(batch_size, training_dir, is_distributed):
logger.info("Get train data loader")

train_set = torchvision.datasets.CIFAR10(root=training_dir,
train=True,
download=False,
transform=_get_transforms())

train_sampler = (
torch.utils.data.distributed.DistributedSampler(train_set) if is_distributed else None
)

return torch.utils.data.DataLoader(
train_set,
batch_size=batch_size,
shuffle=train_sampler is None,
sampler=train_sampler)
...

Εάν το εκπαιδευτικό σύμπλεγμα έχει GPU, το σενάριο εκτελεί την εκπαίδευση σε συσκευές CUDA και η μεταβλητή συσκευής διατηρεί την προεπιλεγμένη συσκευή CUDA:

device = "cuda" if torch.cuda.is_available() else "cpu"
...

Πριν εκτελέσετε κατανεμημένη εκπαίδευση χρησιμοποιώντας το PyTorch DistributedDataParallel για να εκτελέσετε κατανεμημένη επεξεργασία σε πολλούς κόμβους, πρέπει να αρχικοποιήσετε το κατανεμημένο περιβάλλον καλώντας init_process_group. Αυτό αρχικοποιείται σε κάθε μηχανή του εκπαιδευτικού συμπλέγματος.

dist.init_process_group(backend=args.backend, rank=host_rank, world_size=world_size)
...

Δημιουργούμε το μοντέλο του ταξινομητή και αντιγράφουμε πάνω από το μοντέλο στη συσκευή προορισμού. Εάν η κατανεμημένη εκπαίδευση είναι ενεργοποιημένη για εκτέλεση σε πολλούς κόμβους, το DistributedDataParallel Η κλάση χρησιμοποιείται ως αντικείμενο περιτυλίγματος γύρω από το αντικείμενο μοντέλου, το οποίο επιτρέπει τη σύγχρονη κατανεμημένη εκπαίδευση σε πολλαπλές μηχανές. Τα δεδομένα εισόδου χωρίζονται στη διάσταση παρτίδας και ένα αντίγραφο του μοντέλου τοποθετείται σε κάθε μηχανή και κάθε συσκευή.

model = Net().to(device)

if is_distributed:
model = torch.nn.parallel.DistributedDataParallel(model)

...

3.2 Εγκατάσταση βιβλιοθηκών

Θα εγκαταστήσετε όλες τις απαραίτητες βιβλιοθήκες για την εκτέλεση του παραδείγματος κατανεμημένης εκπαίδευσης PyTorch. Αυτό περιλαμβάνει Kubeflow Pipelines SDK, Training Operator Python SDK, Python client για Kubernetes και Amazon SageMaker Python SDK.

#Please run the below commands to install necessary libraries

!pip install kfp==1.8.4

!pip install kubeflow-training

!pip install kubernetes

!pip install sagemaker

3.3 Εκτελέστε διανεμημένη εκπαίδευση εργασίας PyTorch στο Kubernetes

Το σημειωματάριο 1_submit_pytorchdist_k8s.ipynb δημιουργεί τον προσαρμοσμένο πόρο Kubernetes PyTorchJob αρχείο YAML χρησιμοποιώντας την εκπαίδευση Kubeflow και τον πελάτη Kubernetes Python SDK. Ακολουθούν μερικά σημαντικά αποσπάσματα από αυτό το σημειωματάριο.

Δημιουργούμε το PyTorchJob YAML με τα κύρια κοντέινερ και τα κοντέινερ εργασίας όπως φαίνεται στον ακόλουθο κώδικα:

# Define PyTorchJob custom resource manifest
pytorchjob = V1PyTorchJob(
api_version="kubeflow.org/v1",
kind="PyTorchJob",
metadata=V1ObjectMeta(name=pytorch_distributed_jobname,namespace=user_namespace),
spec=V1PyTorchJobSpec(
run_policy=V1RunPolicy(clean_pod_policy="None"),
pytorch_replica_specs={"Master": master,
"Worker": worker}
)
)

Αυτό υποβάλλεται στο επίπεδο ελέγχου Kubernetes χρησιμοποιώντας PyTorchJobClient:

# Creates and Submits PyTorchJob custom resource file to Kubernetes
pytorchjob_client = PyTorchJobClient()

pytorch_job_manifest=pytorchjob_client.create(pytorchjob):

Δείτε τα αρχεία καταγραφής εκπαίδευσης Kubernetes

Μπορείτε να δείτε τα αρχεία καταγραφής εκπαίδευσης είτε από το ίδιο σημειωματάριο Jupyter χρησιμοποιώντας κώδικα Python είτε από το κέλυφος πελάτη Kubernetes.

3.4 Δημιουργήστε έναν υβριδικό αγωγό Kubeflow

Το σημειωματάριο 2_create_pipeline_k8s_sagemaker.ipynb δημιουργεί έναν υβριδικό αγωγό Kubeflow που βασίζεται σε μεταβλητή χρόνου εκτέλεσης υπό όρους training_runtime, όπως φαίνεται στον παρακάτω κώδικα. Το σημειωματάριο χρησιμοποιεί το Kubeflow Pipelines SDK και παρέχεται ένα σύνολο πακέτων Python για τον καθορισμό και την εκτέλεση των αγωγών ροής εργασίας ML. Ως μέρος αυτού του SDK, χρησιμοποιούμε τα ακόλουθα πακέτα:

  • Ο διακοσμητής πακέτου για συγκεκριμένη γλώσσα (DSL). dsl.pipeline, το οποίο διακοσμεί τις συναρτήσεις Python για να επιστρέψει μια διοχέτευση
  • Η dsl.Condition πακέτο, το οποίο αντιπροσωπεύει μια ομάδα λειτουργιών που εκτελούνται μόνο όταν πληρούται μια συγκεκριμένη συνθήκη, όπως ο έλεγχος του training_runtime αξία ως sagemaker or kubernetes

Δείτε τον ακόλουθο κώδικα:

# Define your training runtime value with either 'sagemaker' or 'kubernetes'
training_runtime='sagemaker'

# Create Hybrid Pipeline using Kubeflow PyTorch Training Operators and Amazon SageMaker Service
@dsl.pipeline(name="PyTorch Training pipeline", description="Sample training job test")
def pytorch_cnn_pipeline():

# Pipeline Step 1: to evaluate the condition. You can enter any logic here. For demonstration we are checking if GPU is needed for training
condition_result = check_condition_op(training_runtime)

# Pipeline Step 2: to run training on Kuberentes using PyTorch Training Operators. This will be executed if gpus are not needed
with dsl.Condition(condition_result.output == 'kubernetes', name="PyTorch_Comp"):
train_task = pytorch_job_op(
name=training_job_name,
namespace=user_namespace,
master_spec=json.dumps(master_spec_loaded), # Please refer file at pipeline_yaml_specifications/pipeline_master_spec.yml
worker_spec=json.dumps(worker_spec_loaded), # Please refer file at pipeline_yaml_specifications/pipeline_worker_spec.yml
delete_after_done=False
).after(condition_result)

# Pipeline Step 3: to run training on SageMaker using SageMaker Components for Pipeline. This will be executed if gpus are needed
with dsl.Condition(condition_result.output == 'sagemaker', name="SageMaker_Comp"):
training = sagemaker_train_op(
region=region,
image=train_image,
job_name=training_job_name,
training_input_mode=training_input_mode,
hyperparameters='{ 
"backend": "'+str(pytorch_backend)+'", 
"batch-size": "64", 
"epochs": "3", 
"lr": "'+str(learning_rate)+'", 
"model-type": "custom", 
"sagemaker_container_log_level": "20", 
"sagemaker_program": "cifar10-distributed-gpu-final.py", 
"sagemaker_region": "us-west-2", 
"sagemaker_submit_directory": "'+source_s3+'" 
}',
channels=channels,
instance_type=instance_type,
instance_count=instance_count,
volume_size=volume_size,
max_run_time=max_run_time,
model_artifact_path=f's3://{bucket_name}/jobs',
network_isolation=network_isolation,
traffic_encryption=traffic_encryption,
role=role,
vpc_subnets=subnet_id,
vpc_security_group_ids=security_group_id
).after(condition_result)

Διαμορφώνουμε την κατανεμημένη εκπαίδευση του SageMaker χρησιμοποιώντας δύο περιπτώσεις ml.p3.2xlarge.

Αφού οριστεί ο αγωγός, μπορείτε να μεταγλωττίσετε τον αγωγό σε μια προδιαγραφή Argo YAML χρησιμοποιώντας το Kubeflow Pipelines SDK's kfp.compiler πακέτο. Μπορείτε να εκτελέσετε αυτόν τον αγωγό χρησιμοποιώντας τον πελάτη Kubeflow Pipeline SDK, ο οποίος καλεί το τελικό σημείο της υπηρεσίας Pipelines και περνά στις κατάλληλες κεφαλίδες ελέγχου ταυτότητας απευθείας από το σημειωματάριο. Δείτε τον παρακάτω κώδικα:

# DSL Compiler that compiles pipeline functions into workflow yaml.
kfp.compiler.Compiler().compile(pytorch_cnn_pipeline, "pytorch_cnn_pipeline.yaml")

# Connect to Kubeflow Pipelines using the Kubeflow Pipelines SDK client
client = kfp.Client()

experiment = client.create_experiment(name="kubeflow")

# Run a specified pipeline
my_run = client.run_pipeline(experiment.id, "pytorch_cnn_pipeline", "pytorch_cnn_pipeline.yaml")

# Please click “Run details” link generated below this cell to view your pipeline. You can click every pipeline step to see logs.

Εάν λάβετε ένα sagemaker import σφάλμα, εκτελέστε το !pip install Sagemaker και επανεκκινήστε τον πυρήνα (στο Πυρήνας μενού, επιλέξτε Επανεκκινήστε τον πυρήνα).

Επιλέξτε Λεπτομέρειες εκτέλεσης σύνδεσμος κάτω από το τελευταίο κελί για να προβάλετε τη σωλήνωση Kubeflow.

Επαναλάβετε το βήμα δημιουργίας αγωγού με training_runtime='kubernetes' για να δοκιμάσετε τον αγωγό που εκτελείται σε περιβάλλον Kubernetes. ο training_runtime μεταβλητή μπορεί επίσης να περάσει στη διοχέτευση CI/CD σε ένα σενάριο παραγωγής.

Προβάλετε τα αρχεία καταγραφής εκτέλεσης του αγωγού Kubeflow για το στοιχείο SageMaker

Το παρακάτω στιγμιότυπο οθόνης δείχνει τις λεπτομέρειες της διοχέτευσης για το στοιχείο SageMaker.

Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Επιλέξτε το βήμα εργασίας εκπαίδευσης και στο Logs καρτέλα, επιλέξτε το σύνδεσμο καταγραφής CloudWatch για να αποκτήσετε πρόσβαση στα αρχεία καταγραφής του SageMaker.

Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Το ακόλουθο στιγμιότυπο οθόνης δείχνει τα αρχεία καταγραφής του CloudWatch για καθεμία από τις δύο περιπτώσεις ml.p3.2xlarge.

Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Επιλέξτε οποιαδήποτε από τις ομάδες για να δείτε τα αρχεία καταγραφής.

Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Προβάλετε τα αρχεία καταγραφής εκτέλεσης του αγωγού Kubeflow για το στοιχείο Kubeflow PyTorchJob Launcher

Το ακόλουθο στιγμιότυπο οθόνης δείχνει τις λεπτομέρειες του αγωγού για το στοιχείο Kubeflow.

Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Εκτελέστε τις παρακάτω εντολές χρησιμοποιώντας Kubectl στο κέλυφος του προγράμματος-πελάτη Kubernetes που είναι συνδεδεμένο με το σύμπλεγμα Kubernetes για να δείτε τα αρχεία καταγραφής (αντικαταστήστε τον χώρο ονομάτων σας και τα ονόματα pod):

kubectl get pods -n kubeflow-user-example-com
kubectl logs  -n kubeflow-user-example-com -f

4.1 Καθαρίστε

Για να καθαρίσουμε όλους τους πόρους που δημιουργήσαμε στον λογαριασμό, πρέπει να τους αφαιρέσουμε με αντίστροφη σειρά.

  1. Διαγράψτε την εγκατάσταση του Kubeflow εκτελώντας ./kubeflow-remove.sh στο aws-do-kubeflow δοχείο. Το πρώτο σύνολο εντολών είναι προαιρετικό και μπορεί να χρησιμοποιηθεί σε περίπτωση που δεν έχετε ήδη ένα κέλυφος εντολών στο δικό σας aws-do-kubeflow δοχείο ανοιχτό.
    cd aws-do-kubeflow
    ./status.sh
    ./start.sh
    ./exec.sh
    
    ./kubeflow-remove.sh

  2. Από το aws-do-eks φάκελο κοντέινερ, αφαιρέστε τον τόμο EFS. Το πρώτο σύνολο εντολών είναι προαιρετικό και μπορεί να χρησιμοποιηθεί σε περίπτωση που δεν έχετε ήδη ένα κέλυφος εντολών στο δικό σας aws-do-eks δοχείο ανοιχτό.
    cd aws-do-eks
    ./status.sh
    ./start.sh
    ./exec.sh
    
    cd /eks/deployment/csi/efs
    ./delete.sh
    ./efs-delete.sh

    Η διαγραφή του Amazon EFS είναι απαραίτητη για την απελευθέρωση της διεπαφής δικτύου που σχετίζεται με το VPC που δημιουργήσαμε για το σύμπλεγμα μας. Σημειώστε ότι η διαγραφή του τόμου EFS καταστρέφει τυχόν δεδομένα που είναι αποθηκευμένα σε αυτόν.

  3. Από το aws-do-eks δοχείο, τρέξτε το eks-delete.sh δέσμη ενεργειών για τη διαγραφή του συμπλέγματος και τυχόν άλλων πόρων που σχετίζονται με αυτό, συμπεριλαμβανομένου του VPC:
    cd /eks
    ./eks-delete.sh

Χαρακτηριστικά

Σε αυτήν την ανάρτηση, συζητήσαμε μερικές από τις τυπικές προκλήσεις της εκπαίδευσης κατανεμημένων μοντέλων και των ροών εργασίας ML. Δώσαμε μια επισκόπηση του Kubeflow στη διανομή AWS και μοιραστήκαμε δύο έργα ανοιχτού κώδικα (αυς-ντο-εκς και aws-do-kubeflow) που απλοποιούν την παροχή της υποδομής και την ανάπτυξη του Kubeflow σε αυτήν. Τέλος, περιγράψαμε και επιδείξαμε μια υβριδική αρχιτεκτονική που επιτρέπει στους φόρτους εργασίας να μεταβαίνουν απρόσκοπτα μεταξύ της εκτέλεσης σε ένα αυτοδιαχειριζόμενο Kubernetes και της πλήρως διαχειριζόμενης υποδομής SageMaker. Σας ενθαρρύνουμε να χρησιμοποιήσετε αυτήν την υβριδική αρχιτεκτονική για δικές σας περιπτώσεις.

Μπορείτε να ακολουθήσετε το Αποθετήριο AWS Labs για να παρακολουθείτε όλες τις συνεισφορές AWS στο Kubeflow. Μπορείτε επίσης να μας βρείτε στο Kubeflow #AWS Slack Channel; Τα σχόλιά σας εκεί θα μας βοηθήσουν να δώσουμε προτεραιότητα στις επόμενες δυνατότητες που θα συνεισφέρουμε στο έργο Kubeflow.

Ιδιαίτερες ευχαριστίες στον Sree Arasanagatta (Διευθυντής Ανάπτυξης Λογισμικού AWS ML) και τον Suraj Kota (Μηχανικός προγραμματιστή λογισμικού) για την υποστήριξή τους στην κυκλοφορία αυτής της ανάρτησης.


Σχετικά με τους συγγραφείς

Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Kanwaljit Khurmi είναι Αρχιτέκτονας Ειδικών Λύσεων AI/ML στο Amazon Web Services. Συνεργάζεται με το προϊόν, τη μηχανική και τους πελάτες AWS για να παρέχει καθοδήγηση και τεχνική βοήθεια βοηθώντας τους να βελτιώσουν την αξία των υβριδικών λύσεων ML τους όταν χρησιμοποιούν AWS. Η Kanwaljit ειδικεύεται στο να βοηθά τους πελάτες με εφαρμογές κοντέινερ και μηχανικής εκμάθησης.

Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Γκαουτάμ Κουμάρ είναι Μηχανικός Λογισμικού με AWS AI Deep Learning. Έχει αναπτύξει AWS Deep Learning Containers και AWS Deep Learning AMI. Είναι παθιασμένος με την κατασκευή εργαλείων και συστημάτων για AI. Στον ελεύθερο χρόνο του, του αρέσει να κάνει ποδήλατο και να διαβάζει βιβλία.

Δημιουργήστε ευέλικτες και επεκτάσιμες κατανεμημένες αρχιτεκτονικές εκπαίδευσης χρησιμοποιώντας το Kubeflow στο AWS και το Amazon SageMaker PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.Άλεξ Ιανκούλσκι είναι ένας πλήρης αρχιτέκτονας λογισμικού και υποδομής που του αρέσει να κάνει βαθιά, πρακτική δουλειά. Αυτή τη στιγμή είναι Κύριος Αρχιτέκτονας Λύσεων για Αυτοδιαχειριζόμενη Μηχανική Μάθηση στο AWS. Στο ρόλο του εστιάζει στο να βοηθά τους πελάτες με τη δημιουργία εμπορευματοκιβωτίων και την ενορχήστρωση φόρτου εργασίας ML και AI σε υπηρεσίες AWS που λειτουργούν με κοντέινερ. Είναι επίσης ο συγγραφέας του ανοιχτού κώδικα Κάντε πλαίσιο και ένας καπετάνιος Docker που λατρεύει να εφαρμόζει τεχνολογίες εμπορευματοκιβωτίων για να επιταχύνει τον ρυθμό της καινοτομίας επιλύοντας παράλληλα τις μεγαλύτερες προκλήσεις του κόσμου. Τα τελευταία 10 χρόνια, ο Alex έχει εργαστεί για την καταπολέμηση της κλιματικής αλλαγής, τον εκδημοκρατισμό της τεχνητής νοημοσύνης και του ML, κάνοντας τα ταξίδια ασφαλέστερα, την υγειονομική περίθαλψη καλύτερη και την ενέργεια πιο έξυπνη.

Σφραγίδα ώρας:

Περισσότερα από Μηχανική εκμάθηση AWS