Industrial Machine Learning: 10 Αρχές Σχεδιασμού

Industrial Machine Learning: 10 Αρχές Σχεδιασμού

Σήμερα, δημιουργούνται καθημερινά νέες υπηρεσίες, εφαρμογές και άλλα σημαντικά προγράμματα που καθιστούν δυνατή τη δημιουργία απίστευτων πραγμάτων: από λογισμικό για τον έλεγχο ενός πυραύλου SpaceX έως την αλληλεπίδραση με έναν βραστήρα στο διπλανό δωμάτιο μέσω smartphone.

Και, μερικές φορές, κάθε αρχάριος προγραμματιστής, είτε είναι παθιασμένος startupper είτε συνηθισμένος Full Stack ή Data Scientist, αργά ή γρήγορα συνειδητοποιεί ότι υπάρχουν ορισμένοι κανόνες για τον προγραμματισμό και τη δημιουργία λογισμικού που απλοποιούν πολύ τη ζωή.

Σε αυτό το άρθρο, θα περιγράψω εν συντομία 10 αρχές για το πώς να προγραμματίσετε τη βιομηχανική μηχανική εκμάθηση έτσι ώστε να μπορεί να ενσωματωθεί εύκολα σε μια εφαρμογή/υπηρεσία, με βάση τη μεθοδολογία Εφαρμογής 12 παραγόντων. προτείνεται από την ομάδα Heroku. Η πρωτοβουλία μου είναι να αυξήσω την ευαισθητοποίηση αυτής της τεχνικής, η οποία μπορεί να βοηθήσει πολλούς προγραμματιστές και ανθρώπους της επιστήμης δεδομένων.

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

Αρχή 1: Μία βάση κώδικα

Κάποιοι προγραμματιστές στα πρώτα στάδια, από τεμπελιά να το καταλάβουν (ή για κάποιο δικό τους λόγο), ξεχνούν το Git. Είτε ξεχνούν τελείως τη λέξη, δηλαδή ρίχνουν αρχεία ο ένας στον άλλο στο δίσκο/απλώς ρίχνουν κείμενο/αποστέλλουν από περιστέρια, είτε δεν σκέφτονται τη ροή εργασίας τους και δεσμεύονται ο καθένας στο δικό του κλάδο και μετά στο κύριος.

Αυτή η αρχή αναφέρει: έχουν μία βάση κώδικα και πολλές αναπτύξεις.

Το Git μπορεί να χρησιμοποιηθεί τόσο στην παραγωγή όσο και στην έρευνα και ανάπτυξη (R&D), στις οποίες δεν χρησιμοποιείται τόσο συχνά.

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

Δεύτερον, στην παραγωγή αυτό είναι ένα αναντικατάστατο πράγμα - θα πρέπει να κοιτάτε συνεχώς πώς αλλάζει ο κώδικάς σας και να γνωρίζετε ποιο μοντέλο έδωσε τα καλύτερα αποτελέσματα, ποιος κώδικας λειτούργησε τελικά και τι συνέβη που τον έκανε να σταματήσει να λειτουργεί ή να αρχίσει να παράγει λανθασμένα αποτελέσματα . Γι' αυτό είναι τα commits!

Μπορείτε επίσης να δημιουργήσετε ένα πακέτο του έργου σας, τοποθετώντας το, για παράδειγμα, στο Gemfury και, στη συνέχεια, απλώς εισάγοντας συναρτήσεις από αυτό για άλλα έργα, ώστε να μην τις ξαναγράψετε 1000 φορές, αλλά αργότερα.

Αρχή 2: Δηλώστε ξεκάθαρα και απομονώστε τις εξαρτήσεις

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

  • Δηλώστε ξεκάθαρα τις εξαρτήσεις, δηλαδή ένα αρχείο που θα περιέχει όλες τις βιβλιοθήκες, τα εργαλεία και τις εκδόσεις τους που χρησιμοποιούνται στο έργο σας και που πρέπει να εγκατασταθούν (για παράδειγμα, στην Python αυτό μπορεί να γίνει χρησιμοποιώντας το Pipfile ή τις απαιτήσεις.txt. A σύνδεσμος που επιτρέπει την καλή κατανόηση: realpython.com/pipenv-guide)
  • Απομονώστε τις εξαρτήσεις ειδικά για το πρόγραμμά σας κατά την ανάπτυξη. Δεν θέλετε να αλλάζετε συνεχώς εκδόσεις και να επανεγκαθιστάτε, για παράδειγμα, το Tensorflow;

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

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

Έτσι, ακόμα κι αν το curl μπορεί να χρησιμοποιηθεί σχεδόν σε όλους τους υπολογιστές, θα πρέπει να το δηλώσετε σε εξαρτήσεις, καθώς κατά τη μετεγκατάσταση σε άλλη πλατφόρμα μπορεί να μην υπάρχει ή η έκδοση να μην είναι αυτή που χρειαζόσασταν αρχικά.

Για παράδειγμα, το request.txt σας μπορεί να μοιάζει με αυτό:

# Model Building Requirements
numpy>=1.18.1,<1.19.0
pandas>=0.25.3,<0.26.0
scikit-learn>=0.22.1,<0.23.0
joblib>=0.14.1,<0.15.0

# testing requirements
pytest>=5.3.2,<6.0.0

# packaging
setuptools>=41.4.0,<42.0.0
wheel>=0.33.6,<0.34.0

# fetching datasets
kaggle>=1.5.6,<1.6.0

Αρχή 3: Διαμορφώσεις

Πολλοί έχουν ακούσει ιστορίες για διάφορους προγραμματιστές που ανέβασαν κατά λάθος κώδικα στο GitHub σε δημόσια αποθετήρια με κωδικούς πρόσβασης και άλλα κλειδιά από το AWS, ξυπνώντας την επόμενη μέρα με χρέος 6000$ ή ακόμα και 50000$.

Industrial Machine Learning: 10 Αρχές Σχεδιασμού

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

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

Παραδείγματα δεδομένων που συνήθως αποθηκεύονται σε μεταβλητές περιβάλλοντος:

  • Ονόματα τομέα
  • Διευθύνσεις URL/URI API
  • Δημόσια και ιδιωτικά κλειδιά
  • Επαφές (ταχυδρομείο, τηλέφωνα κ.λπ.)

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

Για παράδειγμα, εάν χρησιμοποιείτε το Kaggle API για τη διεξαγωγή δοκιμών (για παράδειγμα, κατεβάστε το λογισμικό και εκτελέστε το μοντέλο μέσω αυτού για να ελέγξετε κατά την εκτέλεση του ότι το μοντέλο λειτουργεί καλά), τότε τα ιδιωτικά κλειδιά από το Kaggle, όπως τα KAGGLE_USERNAME και KAGGLE_KEY, θα πρέπει να αποθηκεύονται σε μεταβλητές περιβάλλοντος.

Αρχή 4: Υπηρεσίες τρίτων

Η ιδέα εδώ είναι να δημιουργηθεί το πρόγραμμα με τέτοιο τρόπο ώστε να μην υπάρχει διαφορά μεταξύ τοπικών και τρίτων πόρων όσον αφορά τον κώδικα. Για παράδειγμα, μπορείτε να συνδέσετε τόσο τοπικές MySQL όσο και τρίτων. Το ίδιο ισχύει για διάφορα API όπως οι Χάρτες Google ή το Twitter API.

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

Έτσι, για παράδειγμα, αντί να καθορίζετε κάθε φορά τη διαδρομή προς τα αρχεία με σύνολα δεδομένων μέσα στον κώδικα, είναι προτιμότερο να χρησιμοποιείτε τη βιβλιοθήκη pathlib και να δηλώνετε τη διαδρομή προς τα σύνολα δεδομένων στο config.py, έτσι ώστε ανεξάρτητα από την υπηρεσία που χρησιμοποιείτε (για για παράδειγμα, CircleCI), το πρόγραμμα μπόρεσε να ανακαλύψει τη διαδρομή προς τα σύνολα δεδομένων λαμβάνοντας υπόψη τη δομή του νέου συστήματος αρχείων στη νέα υπηρεσία.

Αρχή 5. Κατασκευή, απελευθέρωση, χρόνος εκτέλεσης

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

  1. Στάδιο συνελεύσεις. Μετατρέπετε τον γυμνό σας κώδικα με μεμονωμένους πόρους σε ένα λεγόμενο πακέτο που περιέχει όλο τον απαραίτητο κώδικα και δεδομένα. Αυτό το πακέτο ονομάζεται συναρμολόγηση.
  2. Στάδιο απελευθέρωση — εδώ συνδέουμε τις ρυθμίσεις μας στη διάταξη, χωρίς την οποία δεν θα μπορούσαμε να κυκλοφορήσουμε το πρόγραμμά μας. Τώρα αυτή είναι μια εντελώς έτοιμη έκδοση.
  3. Ακολουθεί η σκηνή εκτέλεση. Εδώ απελευθερώνουμε την εφαρμογή εκτελώντας τις απαραίτητες διαδικασίες από την κυκλοφορία μας.

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

Για την εργασία έκδοσης, έχουν δημιουργηθεί πολλές διαφορετικές υπηρεσίες στις οποίες μπορείτε να γράψετε διεργασίες για εκτέλεση σε ένα αρχείο .yml (για παράδειγμα, στο CircleCI αυτό είναι το config.yml για να υποστηρίζει την ίδια τη διαδικασία). Ο Wheely είναι εξαιρετικός στη δημιουργία πακέτων για έργα.

Μπορείτε να δημιουργήσετε πακέτα με διαφορετικές εκδόσεις του μοντέλου μηχανικής εκμάθησης και, στη συνέχεια, να τα συσκευάσετε και να ανατρέξετε στα απαραίτητα πακέτα και τις εκδόσεις τους για να χρησιμοποιήσετε τις λειτουργίες που γράψατε από εκεί. Αυτό θα σας βοηθήσει να δημιουργήσετε ένα API για το μοντέλο σας και το πακέτο σας μπορεί να φιλοξενηθεί στο Gemfury, για παράδειγμα.

Αρχή 6. Εκτελέστε το μοντέλο σας ως μία ή περισσότερες διεργασίες

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

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

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

Για να εκτελέσετε το μοντέλο ως πολλές διεργασίες, μπορείτε να δημιουργήσετε ένα αρχείο .yml στο οποίο προσδιορίζετε τις απαραίτητες διεργασίες και τη σειρά τους.

Αρχή 7: Ανακυκλωσιμότητα

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

Δηλαδή, η διαδικασία σας με το μοντέλο θα πρέπει:

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

Αρχή 8: Συνεχής ανάπτυξη/ολοκλήρωση

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

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

Αυτό θα επιτρέψει:

  1. Μειώστε τον χρόνο απελευθέρωσης κατά δεκάδες φορές
  2. Μειώστε τον αριθμό των σφαλμάτων λόγω ασυμβατότητας κώδικα.
  3. Αυτό μειώνει επίσης τον φόρτο εργασίας του προσωπικού, καθώς οι προγραμματιστές και τα άτομα που αναπτύσσουν την εφαρμογή είναι πλέον μία ομάδα.

Τα εργαλεία που σας επιτρέπουν να εργαστείτε με αυτό είναι το CircleCI, το Travis CI, το GitLab CI και άλλα.

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

Ελαχιστοποιήστε τις διαφορές!!!

Αρχή 9. Τα αρχεία καταγραφής σας

Τα αρχεία καταγραφής (ή "Καταγραφή") είναι συμβάντα, που συνήθως καταγράφονται σε μορφή κειμένου, που συμβαίνουν εντός της εφαρμογής (ροή συμβάντος). Ένα απλό παράδειγμα: "2020-02-02 - επίπεδο συστήματος - όνομα διεργασίας." Έχουν σχεδιαστεί έτσι ώστε ο προγραμματιστής να μπορεί να δει κυριολεκτικά τι συμβαίνει όταν εκτελείται το πρόγραμμα. Βλέπει την πρόοδο των διαδικασιών και καταλαβαίνει αν είναι όπως το ήθελε ο ίδιος ο προγραμματιστής.

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

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

Αρχή 10. Δοκιμή!

Για τη βιομηχανική μηχανική εκμάθηση, αυτή η φάση είναι εξαιρετικά σημαντική, αφού πρέπει να καταλάβετε ότι το μοντέλο λειτουργεί σωστά και παράγει αυτό που θέλατε.

Οι δοκιμές μπορούν να δημιουργηθούν χρησιμοποιώντας το pytest και να δοκιμαστούν χρησιμοποιώντας ένα μικρό σύνολο δεδομένων εάν έχετε μια εργασία παλινδρόμησης/ταξινόμησης.

Μην ξεχνάτε να ορίζετε τον ίδιο σπόρο για μοντέλα βαθιάς μάθησης, ώστε να μην παράγουν συνεχώς διαφορετικά αποτελέσματα.

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

Θα προσπαθήσω επίσης να χρησιμοποιήσω καλές αρχές που μπορεί να αφήσει ο καθένας στα σχόλια αν θέλει.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο