Leader di pensiero
Evitare i Pericoli Nascosti: Navigare nelle Insidie Non Ovvie dell’Apprendimento Automatico su iOS

Hai Bisogno dell’Apprendimento Automatico?
L’apprendimento automatico è eccellente nel rilevare modelli. Se riesci a raccogliere un set di dati pulito per il tuo compito, è solitamente solo questione di tempo prima di riuscire a costruire un modello di apprendimento automatico con prestazioni sovrumane. Ciò è particolarmente vero in compiti classici come la classificazione, la regressione e la rilevazione di anomalie.
Quando sei pronto a risolvere alcuni dei tuoi problemi aziendali con l’apprendimento automatico, devi considerare dove i tuoi modelli di apprendimento automatico saranno eseguiti. Per alcuni, ha senso eseguire un’infrastruttura di server. Ciò ha il vantaggio di mantenere i tuoi modelli di apprendimento automatico privati, quindi è più difficile per i concorrenti raggiungere. Inoltre, i server possono eseguire una gamma più ampia di modelli. Ad esempio, i modelli GPT (resi famosi con ChatGPT) richiedono attualmente GPU moderne, quindi i dispositivi consumer sono esclusi. D’altra parte, mantenere la tua infrastruttura è abbastanza costoso e se un dispositivo consumer può eseguire il tuo modello, perché pagare di più? Inoltre, potrebbero esserci anche problemi di privacy in cui non puoi inviare dati utente a un server remoto per l’elaborazione.
Tuttavia, supponiamo che abbia senso utilizzare i dispositivi iOS dei tuoi clienti per eseguire un modello di apprendimento automatico. Cosa potrebbe andare storto?
Limitazioni della Piattaforma
Limiti di Memoria
I dispositivi iOS hanno molto meno memoria video disponibile rispetto ai loro omologhi desktop. Ad esempio, il recente Nvidia RTX 4080 Ti ha 20 GB di memoria disponibile. Gli iPhone, d’altra parte, hanno memoria video condivisa con il resto della RAM in ciò che chiamano “memoria unificata”. Per riferimento, l’iPhone 14 Pro ha 6 GB di RAM. Inoltre, se si allocano più della metà della memoria, iOS è molto probabile che uccida l’app per assicurarsi che il sistema operativo rimanga rispondente. Ciò significa che puoi contare solo su avere 2-3 GB di memoria disponibile per l’inferenza della rete neurale.
I ricercatori di solito addestrano i loro modelli per ottimizzare la precisione sull’utilizzo della memoria. Tuttavia, esiste anche la ricerca disponibile su modi per ottimizzare la velocità e l’impronta della memoria, quindi puoi cercare modelli meno esigenti o addestrarne uno tu stesso.
Supporto per le Operazioni dei Layer di Rete
La maggior parte dell’apprendimento automatico e delle reti neurali proviene da framework di apprendimento profondo ben noti e vengono quindi convertiti in CoreML con Core ML Tools. CoreML è un motore di inferenza scritto da Apple (AAPL ) che può eseguire vari modelli su dispositivi Apple. I layer sono ben ottimizzati per l’hardware e l’elenco dei layer supportati è abbastanza lungo, quindi questo è un ottimo punto di partenza. Tuttavia, altre opzioni come Tensorflow Lite sono anche disponibili.
Il modo migliore per vedere cosa è possibile con CoreML è guardare alcuni modelli già convertiti utilizzando visualizzatori come Netron. Apple elenca alcuni dei modelli ufficialmente supportati, ma esistono anche zoo di modelli guidati dalla comunità. L’elenco completo delle operazioni supportate è in costante cambiamento, quindi guardare il codice sorgente di Core ML Tools può essere utile come punto di partenza. Ad esempio, se desideri convertire un modello PyTorch, puoi provare a trovare il layer necessario qui.
Inoltre, alcune nuove architetture possono contenere codice CUDA scritto a mano per alcuni dei layer. In tali situazioni, non puoi aspettarti che CoreML fornisca un layer predefinito. Tuttavia, puoi fornire la tua implementazione se hai un ingegnere esperto familiarizzato con la scrittura di codice GPU.
Nel complesso, il miglior consiglio qui è provare a convertire il tuo modello in CoreML presto, anche prima di addestrarlo. Se hai un modello che non è stato convertito subito, è possibile modificare la definizione della rete neurale nel tuo framework di apprendimento profondo o nel codice sorgente del convertitore Core ML Tools per generare un modello CoreML valido senza la necessità di scrivere un layer personalizzato per l’inferenza CoreML.
Convalida
Bug del Motore di Inferenza
Non c’è modo di testare ogni combinazione possibile di layer, quindi il motore di inferenza avrà sempre alcuni bug. Ad esempio, è comune vedere convoluzioni dilatate utilizzare troppa memoria con CoreML, probabilmente indicando un’implementazione scritta male con un kernel grande paddato con zeri. Un altro bug comune è l’output del modello errato per alcune architetture del modello.
In questo caso, l’ordine delle operazioni può essere un fattore. È possibile ottenere risultati errati a seconda di whether l’attivazione con la convoluzione o la connessione residuale arriva per prima. L’unico modo reale per garantire che tutto funzioni correttamente è prendere il tuo modello, eseguirlo sul dispositivo previsto e confrontare il risultato con una versione desktop. Per questo test, è utile avere almeno un modello semi-addestrato disponibile, altrimenti l’errore numerico può accumularsi per modelli con inizializzazione casuale. Anche se il modello finale addestrato funzionerà correttamente, i risultati possono essere abbastanza diversi tra il dispositivo e il desktop per un modello con inizializzazione casuale.
Perdita di Precisione
L’iPhone utilizza estensivamente l’accuratezza a precisione dimezzata per l’inferenza. Mentre alcuni modelli non hanno alcun degrado di accuratezza notevole a causa dei bit più piccoli nella rappresentazione a virgola mobile, altri modelli possono soffrire. Puoi approssimare la perdita di precisione valutando il tuo modello sul desktop con precisione dimezzata e calcolando una metrica di test per il tuo modello. Un metodo ancora migliore è eseguirlo su un dispositivo reale per scoprire se il modello è così preciso come previsto.
Profiling
I diversi modelli di iPhone hanno capacità hardware variate. Gli ultimi hanno migliorato le unità di elaborazione del Neural Engine che possono elevare le prestazioni complessive in modo significativo. Sono ottimizzati per determinate operazioni e CoreML è in grado di distribuire intelligentemente il lavoro tra CPU, GPU e Neural Engine. Le GPU di Apple sono anche migliorate nel tempo, quindi è normale vedere prestazioni fluttuanti tra i diversi modelli di iPhone. È una buona idea testare i tuoi modelli sui dispositivi supportati minimamente per assicurare la massima compatibilità e prestazioni accettabili per i dispositivi più vecchi.
È anche degno di nota che CoreML può ottimizzare alcune delle layer intermedie e dei calcoli in-place, il che può migliorare drasticamente le prestazioni. Un altro fattore da considerare è che a volte un modello che si esegue peggio su un desktop può effettivamente eseguire l’inferenza più velocemente su iOS. Ciò significa che vale la pena spendere un po’ di tempo a sperimentare con diverse architetture.
Per un’ulteriore ottimizzazione, Xcode ha uno strumento Instruments con un modello appena per i modelli CoreML che può fornire un’idea più approfondita di cosa sta rallentando la tua inferenza del modello.
Conclusione
Nessuno può prevedere tutte le possibili insidie quando si sviluppano modelli di apprendimento automatico per iOS. Tuttavia, ci sono alcuni errori che possono essere evitati se sai cosa cercare. Inizia a convertire, convalidare e profilare i tuoi modelli di apprendimento automatico presto per assicurarti che il tuo modello funzioni correttamente e si adatti alle tue esigenze aziendali e segui i suggerimenti sopra indicati per assicurare il successo il più presto possibile.












