Lideri de opinie

Evitarea pericolelor ascunse: navigarea în capcanele neobișnuite în ML pe iOS

mm
Adaugă Unite.AI la sursele tale preferate pe Google

Ai nevoie de ML?

Învățarea automată este excelentă la detectarea modelelor. Dacă reușiți să colectați un set de date curat pentru sarcina dvs., este de obicei doar o chestiune de timp înainte de a putea construi un model ML cu performanță supraomenească. Acest lucru este valabil mai ales în sarcini clasice, cum ar fi clasificarea, regresia și detectarea anomaliilor.

Când sunteți gata să rezolvați unele dintre problemele dvs. de afaceri cu ML, trebuie să luați în considerare unde vor rula modelele dvs. ML. Pentru unii, are sens să ruleze o infrastructură de server. Acest lucru are avantajul de a păstra modelele dvs. ML private, astfel încât concurenții să nu poată ține pasul. În plus, serverele pot rula o varietate mai largă de modele. De exemplu, modelele GPT (făcute faimoase de ChatGPT) necesită în prezent GPU-uri moderne, astfel încât dispozitivele consumatorilor sunt excluse. Pe de altă parte, menținerea infrastructurii dvs. este destul de costisitoare, și dacă un dispozitiv consumator poate rula modelul dvs., de ce să plătiți mai mult? În plus, pot exista și preocupări legate de confidențialitate, în care nu puteți trimite datele utilizatorilor către un server remote pentru procesare.

Cu toate acestea, să presupunem că are sens să utilizați dispozitivele iOS ale clienților dvs. pentru a rula un model ML. Ce ar putea merge prost?

Limitări ale platformei

Limitări de memorie

Dispozitivele iOS au mult mai puțină memorie video disponibilă decât omologii lor de desktop. De exemplu, recenta Nvidia RTX 4080 Ti are 20 GB de memorie disponibilă. În schimb, iPhone-urile au memorie video partajată cu restul RAM-ului în ceea ce ei numesc “memorie unificată”. Pentru referință, iPhone 14 Pro are 6 GB de RAM. Mai mult, dacă alocați mai mult de jumătate din memorie, iOS este foarte probabil să omoare aplicația pentru a se asigura că sistemul de operare rămâne răspunsiv. Acest lucru înseamnă că puteți conta doar pe 2-3 GB de memorie disponibilă pentru inferența rețelelor neuronale.

Cercetătorii obișnuiesc să antreneze modelele lor pentru a optimiza acuratețea în detrimentul utilizării memoriei. Cu toate acestea, există și cercetări disponibile cu privire la modurile de a optimiza pentru viteză și amprentă de memorie, astfel încât puteți căuta modele mai puțin solicitante sau antrena unul singur.

Suport pentru straturi de rețea (operații)

Majoritatea ML și rețelelor neuronale provin din cadrul deep learning cunoscute și sunt apoi convertite în CoreML cu Core ML Tools. CoreML este un motor de inferență scris de Apple (AAPL ) care poate rula diverse modele pe dispozitive Apple. Straturile sunt bine optimizate pentru hardware și lista stratelor suportate este destul de lungă, astfel încât acesta este un punct de plecare excelent. Cu toate acestea, există și alte opțiuni, cum ar fi Tensorflow Lite.

Cel mai bun mod de a vedea ce este posibil cu CoreML este să examinați unele modele convertite utilizând vizualizatoare precum Netron. Apple listează unele dintre modelele oficiale suportate, dar există și zoouri de modele conduse de comunitate. Lista completă a operațiunilor suportate se schimbă în mod constant, astfel încât examinarea codului sursă al Core ML Tools poate fi utilă ca punct de plecare. De exemplu, dacă doriți să convertiți un model PyTorch, puteți încerca să găsiți stratul necesar aici.

În plus, anumite arhitecturi noi pot conține cod CUDA scris de mână pentru unele dintre straturi. În astfel de situații, nu puteți aștepta ca CoreML să ofere un strat predefinit. Cu toate acestea, puteți oferi propria implementare dacă aveți un inginer calificat familiarizat cu scrierea de cod GPU.

În general, cel mai bun sfat aici este să încercați să convertiți modelul dvs. în CoreML devreme, chiar înainte de a-l antrena. Dacă aveți un model care nu a fost convertit imediat, este posibil să modificați definiția rețelei neuronale în cadrul dvs. DL sau în codul sursă al convertorului Core ML Tools pentru a genera un model CoreML valabil fără a fi nevoie să scrieți un strat personalizat pentru inferența CoreML.

Validare

Bugs în motorul de inferență

Nu există niciun mod de a testa toate combinațiile posibile de straturi, astfel încât motorul de inferență va avea întotdeauna unele bug-uri. De exemplu, este obișnuit să vedeți convoluții dilatați care utilizează prea multă memorie cu CoreML, probabil indicând o implementare prost scrisă cu un kernel mare umplut cu zerouri. Un alt bug obișnuit este ieșirea modelului incorectă pentru anumite arhitecturi de modele.

În acest caz, ordinea operațiunilor poate conta. Este posibil să obțineți rezultate incorecte, în funcție de faptul dacă activarea cu convoluția sau conexiunea reziduală vine prima. Singurul mod real de a garanta că totul funcționează corect este să luați modelul dvs., să-l rulați pe dispozitivul destinat și să comparați rezultatul cu o versiune de desktop. Pentru acest test, este util să aveți cel puțin un model semi-antrenat disponibil, altfel eroarea numerică poate acumula pentru modele prost inițializate aleator. Chiar dacă modelul final antrenat va funcționa bine, rezultatele pot fi destul de diferite între dispozitiv și desktop pentru un model inițializat aleator.

Pierderea preciziei

iPhone utilizează în mod extensiv precizia jumătate pentru inferență. În timp ce unele modele nu au nicio degradare a acurateței datorită numărului mai mic de biți în reprezentarea punctului plutitor, alte modele pot suferi. Puteți aproxima pierderea preciziei evaluând modelul dvs. pe desktop cu precizie jumătate și calculând o metrică de test pentru modelul dvs. Un mod și mai bun este să-l rulați pe un dispozitiv real pentru a vedea dacă modelul este la fel de precis cum este de dorit.

Profilare

Diferitele modele de iPhone au capacități hardware variate. Cele mai recente au unități de procesare Neural Engine îmbunătățite, care pot crește semnificativ performanța generală. Acestea sunt optimizate pentru anumite operații, iar CoreML poate distribui inteligent munca între CPU, GPU și Neural Engine. GPU-urile Apple s-au îmbunătățit de-a lungul timpului, astfel încât este normal să vedeți fluctuații de performanță între diferitele modele de iPhone. Este o idee bună să testați modelele dvs. pe dispozitivele minim suportate pentru a asigura compatibilitatea maximă și o performanță acceptabilă pentru dispozitivele mai vechi.

De asemenea, este demn de menționat că CoreML poate optimiza unele dintre straturile intermediare și calculele în loc, ceea ce poate îmbunătăți semnificativ performanța. Un alt factor de luat în considerare este că, uneori, un model care se comportă mai prost pe desktop poate, de fapt, să facă inferență mai rapidă pe iOS. Acest lucru înseamnă că merită să petreceți ceva timp experimentând cu arhitecturi diferite.

Pentru o optimizare și mai bună, Xcode are un instrument de instrumente frumos cu un șablon special pentru modelele CoreML, care poate oferi o perspectivă mai cuprinzătoare asupra a ceea ce încetinește modelul dvs. de inferență.

Concluzie

Nimeni nu poate prevedea toate capcanele posibile atunci când dezvoltă modele ML pentru iOS. Cu toate acestea, există unele greșeli care pot fi evitate dacă știți ce să căutați. Începeți să convertiți, validați și profilați modelele dvs. ML devreme pentru a vă asigura că modelul dvs. va funcționa corect și va corespunde cerințelor dvs. de afaceri și urmați sfaturile prezentate mai sus pentru a asigura succesul cât mai curând posibil.

Konstantin Semianov, este CTO al Neatsy.AI, prima aplicație din lume care detectează probleme de sănătate ortopedică și podiatrie, utilizând AI & AR, cu o simplă cameră iPhone. Înainte de Neatsy.AI, el a lucrat ca inginer de cercetare și dezvoltare la Prisma Labs, creatorii aplicației Lensa.