Ηγέτες σκέψης
Αποφεύγοντας τους κρυφούς κινδύνους: Μη προφανείς παγίδες της μηχανικής μάθησης στο iOS

Χρειάζεστε ML;
Η μηχανική μάθηση είναι εξαιρετική στο να αναγνωρίζει μοτίβα. Αν καταφέρετε να συλλέξετε ένα καθαρό dataset για την εργασία σας, συνήθως είναι μόνο θέμα χρόνου πριν καταφέρετε να δημιουργήσετε ένα ML μοντέλο με υπεράνθρωπη απόδοση. Αυτό είναι ιδιαίτερα αληθινό σε κλασικές εργασίες όπως ταξινόμηση, παλινδρόμηση και ανίχνευση ανωμαλιών.
Όταν είστε έτοιμοι να λύσετε κάποια από τα προβλήματα της επιχείρησής σας με ML, πρέπει να σκεφτείτε που θα τρέξουν τα ML μοντέλα σας. Για κάποιους, έχει νόημα να τρέξουν μια υποδομή εξυπηρετητή. Αυτό έχει το πλεονέκτημα να διατηρεί τα ML μοντέλα σας ιδιωτικά, ώστε να είναι πιο δύσκολο για τους ανταγωνιστές να σας φτάσουν. Επιπλέον, οι εξυπηρετητές μπορούν να τρέξουν ένα ευρύ φάσμα μοντέλων. Για παράδειγμα, τα μοντέλα GPT (που έγιναν διάσημα με το ChatGPT) απαιτούν σύγχρονες GPU, οπότε οι καταναλωτικές συσκευές αποκλείονται. Από την άλλη πλευρά, η συντήρηση της υποδομής σας είναι αρκετά δαπανηρή, και αν μια καταναλωτική συσκευή μπορεί να τρέξει το μοντέλο σας, γιατί να πληρώσετε περισσότερα; Επιπλέον, μπορεί να υπάρχουν και προβλήματα ιδιωτικότητας όπου δεν μπορείτε να στείλετε δεδομένα χρηστών σε έναν απομακρυσμένο εξυπηρετητή για επεξεργασία.
Ωστόσο, ας υποθέσουμε ότι έχει νόημα να χρησιμοποιήσετε τις συσκευές iOS των πελατών σας για να τρέξετε ένα ML μοντέλο. Τι μπορεί να πάει λάθος;
Περιορισμοί πλατφόρμας
Περιορισμοί μνήμης
Οι συσκευές iOS έχουν πολύ λιγότερη διαθέσιμη μνήμη βίντεο από τους επιτραπέζιους υπολογιστές. Για παράδειγμα, ο πρόσφατος Nvidia RTX 4080 Ti έχει 20 GB διαθέσιμης μνήμης. Τα iPhone, από την άλλη πλευρά, έχουν μνήμη βίντεο που μοιράζεται με την υπόλοιπη RAM σε αυτό που ονομάζουν “ενιαία μνήμη”. Για αναφορά, το iPhone 14 Pro έχει 6 GB RAM. Επιπλέον, αν δεσμεύσετε περισσότερη από το μισό της μνήμης, το iOS είναι πολύ πιθανό να σκοτώσει την εφαρμογή για να διασφαλίσει ότι το λειτουργικό σύστημα παραμένει αποκρίσιμο. Αυτό σημαίνει ότι μπορείτε να μετρήσετε μόνο 2-3 GB διαθέσιμης μνήμης για εξαγωγή συμπερασμάτων νευρωνικών δικτύων.
Οι ερευνητές συνήθως εκπαιδεύουν τα μοντέλα τους για να βελτιστοποιήσουν την ακρίβεια πάνω από τη μνήμη. Ωστόσο, υπάρχει επίσης έρευνα για τρόπους να βελτιστοποιήσετε για ταχύτητα και αποτύπωση μνήμης, ώστε να μπορείτε να αναζητήσετε λιγότερο απαιτητικά μοντέλα ή να εκπαιδεύσετε ένα μόνος σας.
Στρώματα δικτύου (εργασίες) υποστήριξης
Τα περισσότερα ML και νευρωνικά δίκτυα προέρχονται από γνωστά πλαίσια βαθιάς μάθησης και στη συνέχεια μετατρέπονται σε CoreML μοντέλα με Core ML Tools. Το CoreML είναι ένας μηχανή εξαγωγής συμπερασμάτων γραμμένη από την Apple (AAPL ) που μπορεί να τρέξει διάφορα μοντέλα σε συσκευές Apple. Τα στρώματα είναι καλά-βελτιστοποιημένα για την υλική υποδομή και η λίστα των υποστηριζόμενων στρωμάτων είναι αρκετά μεγάλη, ώστε να είναι ένα εξαιρετικό σημείο εκκίνησης. Ωστόσο, υπάρχουν και άλλες επιλογές όπως Tensorflow Lite.
Ο καλύτερος τρόπος για να δείτε τι είναι δυνατό με το CoreML είναι να κοιτάξετε κάποια ήδη μετατρεμένα μοντέλα χρησιμοποιώντας προγράμματα όπως Netron. Η Apple παραθέτει ορισμένα από τα επίσημα υποστηριζόμενα μοντέλα, αλλά υπάρχουν και συλλογές μοντέλων που αναπτύσσονται από την κοινότητα. Η πλήρης λίστα των υποστηριζόμενων εργασιών αλλάζει συνεχώς, ώστε να είναι χρήσιμο να κοιτάξετε τον κώδικα του Core ML Tools ως σημείο εκκίνησης. Για παράδειγμα, αν θέλετε να μετατρέψετε ένα PyTorch μοντέλο, μπορείτε να προσπαθήσετε να βρείτε την απαραίτητη στρώση εδώ.
Επιπλέον, ορισμένες νέες αρχιτεκτονικές μπορεί να περιέχουν χειρόγραφο κώδικα CUDA για κάποια από τα στρώματα. Σε τέτοιες περιπτώσεις, δεν μπορείτε να περιμένετε ότι το CoreML θα παρέχει ένα προκαθορισμένο στρώμα. Ωστόσο, μπορείτε να παρέχετε τη δική σας υλοποίηση αν έχετε έναν ικανό μηχανικό που είναι εξοικειωμένος με την γραφή κώδικα GPU.
Συνολικά, η καλύτερη συμβουλή εδώ είναι να προσπαθήσετε να μετατρέψετε το μοντέλο σας σε CoreML νωρίς, ακόμη και πριν από την εκπαίδευση. Αν έχετε ένα μοντέλο που δεν μετατράπηκε αμέσως, είναι δυνατό να τροποποιήσετε την ορισμό του νευρωνικού δικτύου στο πλαίσιο DL ή τον κώδικα του Core ML Tools converter για να παράγετε ένα έγκυρο CoreML μοντέλο χωρίς την ανάγκη να γράψετε μια προσαρμοσμένη στρώση για εξαγωγή συμπερασμάτων CoreML.
Επικύρωση
Σφάλματα του μηχανής εξαγωγής συμπερασμάτων
Δεν υπάρχει τρόπος να ελέγξετε κάθε δυνατό συνδυασμό στρωμάτων, ώστε ο μηχανή εξαγωγής συμπερασμάτων θα έχει πάντα κάποια σφάλματα. Για παράδειγμα, είναι κοινό να δείτε διασταλμένες συνελίξεις να χρησιμοποιούν πολύ περισσότερη μνήμη με το CoreML, πιθανότατα υποδεικνύοντας μια κακώς γραμμένη υλοποίηση με έναν μεγάλο πυρήνα που γεμίζει με μηδενικά. Ένα άλλο κοινό σφάλμα είναι η λανθασμένη έξοδος του μοντέλου για κάποια αρχιτεκτονικά μοντέλων.
Σε αυτή την περίπτωση, η σειρά των εργασιών μπορεί να επηρεάσει. Είναι δυνατό να λάβετε λανθασμένα αποτελέσματα ανάλογα με το αν η ενεργοποίηση με συνβολές ή η υπολειμματική σύνδεση έρχεται πρώτα. Ο seul πραγματικός τρόπος να διασφαλίσετε ότι όλα λειτουργούν σωστά είναι να πάρτε το μοντέλο σας, να το τρέξετε στην προοριζόμενη συσκευή και να συγκρίνετε το αποτέλεσμα με μια έκδοση desktop. Για αυτό το τεστ, είναι χρήσιμο να έχετε τουλάχιστον ένα ημι-εκπαιδευμένο μοντέλο διαθέσιμο, αλλιώς η αριθμητική σφάλμα μπορεί να συσσωρευτεί για κακώς τυχαία αρχικοποιημένα μοντέλα. Ακόμη και αν το τελικό εκπαιδευμένο μοντέλο θα λειτουργήσει σωστά, τα αποτελέσματα μπορεί να είναι αρκετά διαφορετικά μεταξύ της συσκευής και του desktop για ένα τυχαία αρχικοποιημένο μοντέλο.
Απώλεια ακρίβειας
Το iPhone χρησιμοποιεί εκτενώς υπολογισμούς μισής ακρίβειας για εξαγωγή συμπερασμάτων. Ενώ κάποια μοντέλα δεν έχουν καμία αξιοσημείωτη υποβάθμιση ακρίβειας λόγω των λιγότερων bits στη floating point αναπαράσταση, άλλα μοντέλα μπορεί να υποφέρουν. Μπορείτε να προσεγγίσετε την απώλεια ακρίβειας αξιολογώντας το μοντέλο σας στο desktop με μισή ακρίβεια και υπολογίζοντας μια μετρική αξιολόγησης για το μοντέλο σας. Ένας ακόμη καλύτερος τρόπος είναι να το τρέξετε σε μια πραγματική συσκευή για να δείτε αν το μοντέλο είναι τόσο ακριβές όσο προορίζεται.
Προφίλ
Διάφορα μοντέλα iPhone έχουν διαφορετικές ικανότητες υλικής υποδομής. Τα τελευταία έχουν βελτιωμένες μονάδες επεξεργασίας Neural Engine που μπορούν να ανυψώσουν την συνολική απόδοση σημαντικά. Είναι βελτιστοποιημένα για συγκεκριμένες εργασίες και το CoreML είναι σε θέση να διανείμει έξυπνα την εργασία μεταξύ CPU, GPU και Neural Engine. Τα Apple GPU έχουν επίσης βελτιωθεί με τον καιρό, ώστε να είναι φυσιολογικό να δείτε διαφορετικές επιδόσεις σε διάφορα μοντέλα iPhone. Είναι μια καλή ιδέα να δοκιμάσετε τα μοντέλα σας σε ελάχιστα υποστηριζόμενες συσκευές για να διασφαλίσετε τη μέγιστη συμβατότητα και αποδεκτή απόδοση για παλαιότερες συσκευές.
Είναι επίσης αξιοσημείωτο ότι το CoreML μπορεί να βελτιστοποιήσει μακριά κάποια από τα ενδιάμεσα στρώματα και τις υπολογίσεις στην θέση, που μπορεί να βελτιστοποιήσει δραματικά την απόδοση. Ένας άλλος παράγοντας που πρέπει να ληφθεί υπόψη είναι ότι μερικές φορές, ένα μοντέλο που εκτελείται χειρότερα σε desktop μπορεί να κάνει εξαγωγή συμπερασμάτων γρηγορότερα στο iOS. Αυτό σημαίνει ότι αξίζει να δαπανήσετε κάποιο χρόνο πειραματιζόμενοι με διάφορες αρχιτεκτονικές.
Για ακόμη περισσότερη βελτιστοποίηση, το Xcode έχει ένα ωραίο εργαλείο Instruments με ένα πρότυπο ακριβώς για τα μοντέλα CoreML που μπορεί να δώσει μια πιο πλήρη εικόνα για το τι επιβραδύνει την εξαγωγή συμπερασμάτων του μοντέλου σας.
Συμπέρασμα
Κανείς δεν μπορεί να προβλέψει όλους τους πιθανούς κινδύνους όταν αναπτύσσει ML μοντέλα για iOS. Ωστόσο, υπάρχουν κάποια λάθη που μπορούν να αποφευχθούν αν ξέρετε τι να ψάχνετε. Ξεκινήστε τη μετατροπή, επικύρωση και προφίλ των ML μοντέλων σας νωρίς για να διασφαλίσετε ότι το μοντέλο σας θα λειτουργήσει σωστά και θα ταιριάξει με τις επιχειρηματικές σας απαιτήσεις, και ακολουθήστε τις συμβουλές που περιγράφονται παραπάνω για να διασφαλίσετε την επιτυχία σας όσο γρήγορα δυνατόν.












