Σύμφωνα με τον Julien Simon, Global AI & Machine Learning Evangelist, Amazon Web Services, ο οποίος θα επισκεφθεί την Αθήνα για να παρουσιάσει στο συνέδριο Data Conference 2019, οι συζητήσεις δείχνουν ότι η επιλογή training model είναι ένα από τα πιο δύσκολα βήματα στη διαδικασία υλοποίησης ενός machine learning project. Μήπως όμως υπάρχουν κάποια shortcuts που διευκολύνουν την επιλογή;

Σύμφωνα με τον Julien Simon, το δύσκολο βήμα είναι η υλοποίηση των training μοντέλων με ασφάλεια και αποτελεσματικότητα σε ένα web production περιβάλλον. Ωστόσο, υπάρχουν κάποια τυπικά βήματα που μπορεί να γίνει αυτό και αν ακολουθήσουμε τη σωστή διαδρομή, ανάλογα με την περίπτωση, θα έχουμε το αναμενόμενο αποτέλεσμα. Όσον αφορά την επικύρωση ενός μοντέλου, ακόμα και αν έχουμε προηγουμένως κάνει προσεκτικά βήματα για την εκπαίδευση του και την πιστοποίηση του σε ένα data science sandbox, θα χρειαστεί να γίνουν επιπλέον εργασίες, ώστε να είμαστε σίγουροι ότι λειτουργεί σωστά και σε περιβάλλον παραγωγής.

Τα πιο σημαντικά βήματα είναι:

  • Η εγκατάσταση ενός συστήματος monitoring, το οποίο θα αποθηκεύει και θα οπτικοποιεί τις μετρήσεις του μοντέλου.
  • Η δημιουργία ενός test web application, το οποίο θα ενσωματώνει το μοντέλο και θα εκτελεί τεχνικούς ελέγχους (αν το μοντέλο είναι γρήγορο, πόση RAM χρειάζεται κ.λπ.), αλλά και ελέγχους των προβλέψεων (είναι οι προβλέψεις του μοντέλου κοντά στις αναμενόμενες;)
  • Ενοποίηση του μοντέλου με την επιχειρηματική εφαρμογή από την οποία τελικά θα αξιοποιηθεί και στη συνέχεια θα γίνει πραγματοποίηση end to end δοκιμών.
  • Υλοποίηση της εφαρμογής στην παραγωγή με την αξιοποίηση τεχνικών blue-green deployment ή canary testing.
  • Εκτέλεση διαφορετικών εκδόσεων του ίδιου μοντέλου παράλληλα για μεγαλύτερες χρονικές περιόδους, ώστε να είναι μετρήσιμα τα αποτελέσματα σε βάθος χρόνου σε σχέση με τα business metrics (A/B testing).

Επιλογές υλοποίησης
Στην περίπτωση που θα ορίζαμε ως standard deployment, η οποία είναι και η απλούστερη μορφή υλοποίησης ενός μοντέλου, θα πρέπει ως πρώτο βήμα να δημιουργήσουμε μια bespoke web εφαρμογή, η οποία θα φιλοξενεί το μοντέλο μας και θα λαμβάνει τα αιτήματα πρόβλεψης. Η διαδικασία είναι σχετικά απλή: αποστολή HTTP requests, έλεγχος των logs και έλεγχος των metrics.

Blue – green deployment
Στην περίπτωση που ορίζουμε ως blue – green deployment, η οποία είναι μια αποδεδειγμένα λειτουργική μέθοδος, θα χρειαστούμε δύο διακριτά περιβάλλοντα. Το live production environment (blue), το οποίο θα εκτελεί την έκδοση n και ένα ακριβές αντίγραφο αυτού του περιβάλλοντος (green), το οποίο θα εκτελεί την έκδοση n+1.

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

Για να είναι αυτή η διαδικασία απολύτως διαφανής στις client εφαρμογές, ένας ‘ενδιάμεσος’, ο οποίος θα είναι ανάμεσα στις εφαρμογές και στα δύο περιβάλλοντα, θα είναι υπεύθυνος για να υλοποιεί τη μετάβαση από το ένα στο άλλο. Δημοφιλείς επιλογές είναι οι load balancers, DNS κ.λπ.

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

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

Η ίδια λογική μπορεί να εφαρμοστεί στην ίδια την εφαρμογή ή σε μια συγκεκριμένη web υπηρεσία. H δεύτερη θα πρέπει να έχει την “ευθύνη” να λαμβάνει τα prediction requests και να καλεί το κατάλληλο endpoint. Η διαδικασία φαίνεται εξαρχής ότι προσθέτει επιπλέον εργασία, αλλά οι πιθανότητες να χρειαστούμε μια web υπηρεσία για pre-processing των δεδομένων (κανονικοποίηση, είσοδος επιπλέον δεδομένων στο prediction request κ.λπ.) και post-processing (φιλτράρισμα των αποτελεσμάτων πρόβλεψης, logging κ.λπ.) είναι πολλές.

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

A/B Testing
Αυτή η μέθοδος είναι η καταλληλότερη για να συγκρίνουμε τις επιδόσεις δύο διαφορετικών εκδόσεων του ίδιου feature, ενώ παράλληλα ελέγχουμε ένα high – level metric, όπως click-through rate, conversion rate, κ.λπ. Σε αυτό το πλαίσιο, πρακτικά κάνουμε προβλέψεις με διαφορετικά μοντέλα για διαφορετικές ομάδες χρηστών και αναλύουμε τα αποτελέσματα.

Πολλά μοντέλα, ένα endpoint
Όπως είδαμε στις παραπάνω περιπτώσεις, η εφαρμογή πολλών διαφορετικών μοντέλων στο ίδιο endpoint είναι κάτι σύνηθες. Πως όμως μπορούμε να το κάνουμε αυτό; Ας πάρουμε ως παράδειγμα ότι θέλουμε να συγκρίνουμε διαφορετικά μοντέλα, τα οποία έχουν “εκπαιδευτεί” με έναν ενσωματωμένο αλγόριθμο για image classification, χρησιμοποιώντας διαφορετικές hyper – parameters.

Αυτά είναι τα βήματα που χρειάζεται να κάνουμε (η πλήρης ανάλυση είναι διαθέσιμη στο Gitlab)

  • Εκπαίδευση μοντέλου 1
  • Εκπαίδευση μοντέλου 2
  • Δημιουργία μοντέλων Α και Β
  • Δημιουργία ενός endpoint configuration με δύο production variants
  • Δημιουργία του endpoint
  • Αποστολή δεδομένων και έλεγχος των μετρήσεων

Σημείωση: Δεδομένου ότι ο Julien Simon εργάζεται για την Amazon, οι λύσεις που προτείνει βασίζονται στις υπηρεσίες της, τις οποίες δεν αναφέρουμε στο συγκεκριμένο άρθρο. Οι ίδιες όμως υλοποιήσεις μπορούν να γίνουν και με άλλα εργαλεία, πολλά εκ των οποίων είναι διαθέσιμα και ως open source.