Ηγέτες σκέψης
Αποφεύγοντας τους Κρυμμένους Κινδύνους: Πλοήγηση στις Μη Εμφανείς Παγίδες στο ML trên iOS

Χρειάζεστε ML;
Η μηχανική μάθηση είναι εξαιρετική στο να αναγνωρίζει μοτίβα. Αν καταφέρετε να συλλέξετε ένα καθαρό σύνολο δεδομένων για την εργασία σας, συνήθως είναι μόνο θέμα χρόνου πριν καταφέρετε να δημιουργήσετε ένα ML μοντέλο με υπεράνθρωπη απόδοση. Αυτό είναι ιδιαίτερα αληθινό σε κλασικές εργασίες όπως η ταξινόμηση, η παλινδρόμηση και η ανίχνευση ανωμαλιών.
Όταν είστε έτοιμοι να λύσετε κάποια από τα προβλήματα της επιχείρησής σας με ML, πρέπει να λάβετε υπόψη σας που θα τρέχουν τα ML μοντέλα σας. Για κάποιους, έχει νόημα να τρέξουν μια υποδομή εξυπηρετητή. Αυτό έχει το πλεονέκτημα να giữει τα ML μοντέλα σας ιδιωτικά, ώστε να είναι πιο δύσκολο για τους ανταγωνιστές να σας φτάσουν. Επιπλέον, οι εξυπηρετητές μπορούν να τρέξουν ένα ευρύ φάσμα μοντέλων. Για παράδειγμα, τα μοντέλα GPT (που έγιναν διάσημα με το ChatGPT) απαιτούν τρέχοντες GPU, οπότε τα καταναλωτικά συσκευές είναι εκτός ερώτησης. Από την άλλη πλευρά, η διατήρηση της υποδομής σας είναι khá δαπανηρή, και αν μια καταναλωτική συσκευή μπορεί να τρέξει το μοντέλο σας, γιατί να πληρώσετε περισσότερα; Επιπλέον, μπορεί να υπάρχουν προβλήματα ιδιωτικότητας όπου δεν μπορείτε να στείλετε δεδομένα χρήστη σε einen απομακρυσμένο εξυπηρετητή για επεξεργασία.
Ωστόσο, ας υποθέσουμε ότι έχει νόημα να χρησιμοποιήσετε τις συσκευές 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 που μπορεί να τρέξει διάφορα μοντέλα σε συσκευές Apple. Τα στρώματα είναι καλά-βελτιστοποιημένα για το υλικό και η λίστα των υποστηριζόμενων στρωμάτων είναι khá μεγάλη, οπότε αυτό είναι ένα εξαιρετικό σημείο εκκίνησης. Ωστόσο, άλλες επιλογές όπως το Tensorflow Lite είναι επίσης διαθέσιμες.
Ο καλύτερος τρόπος για να δείτε τι είναι δυνατό με το CoreML είναι να δείτε κάποια ήδη μετατρεμένα μοντέλα χρησιμοποιώντας προγράμματα προβολής όπως το Netron. Η Apple καταγράφει κάποια από τα επίσημα υποστηριζόμενα μοντέλα, αλλά υπάρχουν επίσης μοντέλα ζωολογικών κήπων που οδηγούνται από την κοινότητα. Η πλήρης λίστα των υποστηριζόμενων εργασιών αλλάζει συνεχώς, οπότε το να κοιτάξετε τον κώδικα πηγής των Core ML Tools μπορεί να είναι χρήσιμο ως σημείο εκκίνησης. Για παράδειγμα, αν θέλετε να μετατρέψετε ένα PyTorch μοντέλο, μπορείτε να προσπαθήσετε να βρείτε την απαραίτητη στρώση εδώ.
Επιπλέον, ορισμένες νέες αρχιτεκτονικές μπορεί να περιέχουν χειρογραφημένο CUDA κώδικα για κάποια από τα στρώματα. Σε τέτοιες περιπτώσεις, δεν μπορείτε να περιμένετε ότι το CoreML θα παρέχει ένα προκαθορισμένο στρώμα. Ωστόσο, μπορείτε να παρέχετε τη δική σας υλοποίηση αν έχετε έναν ικανό μηχανικό που είναι εξοικειωμένος με τη γραφή κώδικα GPU.
Συνολικά, η καλύτερη συμβουλή εδώ είναι να προσπαθήσετε να μετατρέψετε το μοντέλο σας σε CoreML νωρίς, ακόμη και πριν από την εκπαίδευση. Αν έχετε ένα μοντέλο που δεν μετατράπηκε αμέσως, είναι δυνατό να τροποποιήσετε την ορισμό του νευρωνικού δικτύου στο πλαίσιο DL ή τον κώδικα του μετατροπέα Core ML Tools για να δημιουργήσετε ένα έγκυρο CoreML μοντέλο χωρίς την ανάγκη να γράψετε một προσαρμοσμένο στρώμα για εύρεση CoreML.
Επαλήθευση
Σφάλματα κινητήρα εύρεσης
Δεν υπάρχει τρόπος να δοκιμάσετε κάθε δυνατή συνδυασμό στρωμάτων, οπότε ο κινητήρας εύρεσης θα έχει πάντα κάποια σφάλματα. Για παράδειγμα, είναι συνηθισμένο να δείτε διασταλμένες συν convolutions να χρησιμοποιούν πολύ περισσότερη μνήμη με CoreML, πιθανότατα που υποδηλώνει μια κακώς γραμμένη υλοποίηση με ένα μεγάλο πυρήνα που γεμίζει με μηδενικά. Ένα άλλο συνηθισμένο σφάλμα είναι η λανθασμένη έξοδος μοντέλου για κάποια αρχιτεκτονική μοντέλου.
Σε αυτή την περίπτωση, η σειρά των εργασιών μπορεί να παίξει ρόλο. Είναι δυνατό να λάβετε λανθασμένα αποτελέσματα ανάλογα με το αν η ενεργοποίηση με convolution ή η残 connection έρχεται πρώτα. Ο唯一 πραγματικός τρόπος για να εγγυηθεί ότι όλα λειτουργούν σωστά είναι να πάρει το μοντέλο σας, να το τρέξει στη συσκευή που προορίζεται και να συγκρίνει το αποτέλεσμα με μια εκδοχή desktop. Για αυτό το τεστ, είναι χρήσιμο να έχετε τουλάχιστον ένα ημι-εκπαιδευμένο μοντέλο διαθέσιμο, αλλιώς το σφάλμα μπορεί να συσσωρευτεί για μοντέλα που έχουν τυχαία αρχικοποιηθεί.尽管 το τελικό εκπαιδευμένο μοντέλο θα λειτουργήσει καλά, τα αποτελέσματα possono να είναι khá διαφορετικά μεταξύ της συσκευής και του desktop για ένα τυχαία αρχικοποιημένο μοντέλο.
Απώλεια ακρίβειας
Το iPhone χρησιμοποιεί εκτενώς ακρίβεια μισής ακρίβειας για εύρεση. Ενώ κάποια μοντέλα δεν έχουν καμία αξιοσημείωτη υποβάθμιση ακρίβειας λόγω λιγότερων bit στη μορφή κινητής υποδιαστολής, άλλα μοντέλα μπορεί να υποφέρουν. Μπορείτε να προσεγγίσετε την απώλεια ακρίβειας αξιολογώντας το μοντέλο σας στο desktop με μισή ακρίβεια και υπολογίζοντας ένα τεστ μετρητή για το μοντέλο σας. Ένας ακόμα καλύτερος μέθοδος είναι να το τρέξει σε μια πραγματική συσκευή για να δείτε αν το μοντέλο είναι τόσο ακριβές όσο προορίζεται.
Προφίλ
Διάφορα μοντέλα iPhone έχουν διαφορετικές ικανότητες υλικού. Τα τελευταία έχουν βελτιωμένες μονάδες επεξεργασίας Neural Engine που μπορούν να ανυψώσουν την συνολική απόδοση σημαντικά. Είναι βελτιστοποιημένα για ορισμένες εργασίες, και το CoreML είναι σε θέση να διανείμει έξυπνα την εργασία μεταξύ CPU, GPU και Neural Engine. Τα GPU της Apple έχουν επίσης βελτιωθεί με τον καιρό, οπότε είναι φυσιολογικό να δείτε μεταβαλλόμενες επιδόσεις σε διάφορα μοντέλα iPhone. Είναι μια καλή ιδέα να δοκιμάσετε τα μοντέλα σας σε ελάχιστα υποστηριζόμενες συσκευές για να διασφαλίσετε τη μέγιστη συμβατότητα και αποδεκτή απόδοση για παλαιότερες συσκευές.
Είναι επίσης αξιοσημείωτο ότι το CoreML μπορεί να βελτιστοποιήσει μακριά κάποια από τα ενδιάμεσα στρώματα και τις υπολογίσεις στην θέση, το οποίο μπορεί να βελτιστοποιήσει δραστικά την απόδοση. Ένας άλλος παράγοντας που πρέπει να ληφθεί υπόψη είναι ότι μερικά μοντέλα που εκτελούνται χειρότερα σε desktop μπορεί να κάνουν inference γρηγορότερα σε iOS. Αυτό σημαίνει ότι αξίζει να δαπανήσετε κάποιο χρόνο πειραματιζόμενοι με διαφορετικές αρχιτεκτονικές.
Για ακόμα περισσότερη βελτιστοποίηση, το Xcode έχει ένα ωραίο εργαλείο Instruments με ένα πρότυπο μόνο για CoreML μοντέλα που μπορεί να δώσει μια πιο tỉομένη εντύπωση για τι είναι αυτό που επιβραδύνει την εύρεση του μοντέλου σας.
Συμπέρασμα
Κανείς δεν μπορεί να προβλέψει όλους τους πιθανούς κινδύνους όταν αναπτύσσει ML μοντέλα για iOS. Ωστόσο, υπάρχουν κάποια λάθη που μπορούν να αποφευχθούν αν ξέρετε τι να ψάξετε. Ξεκινήστε τη μετατροπή, επαλήθευση και προφίλ των ML μοντέλων σας νωρίς για να διασφαλίσετε ότι το μοντέλο σας θα λειτουργήσει σωστά και θα ανταποκριθεί στις επιχειρηματικές σας απαιτήσεις, και ακολουθήστε τις συμβουλές που περιγράφονται παραπάνω για να διασφαλίσετε την επιτυχία όσο το δυνατόν γρηγορότερα.












