Connect with us

Ajatusjohtajat

Välttämällä piileviä vaaroja: Navigointi epäilyttävien loukkauksien yli ML: ssä iOS: ssä

mm

Tarvitsetko ML: ää?

Machine learning on erinomainen havaitsemaan kuvioita. Jos onnistut keräämään puhdas tietojoukko tehtävääsi varten, on yleensä vain ajan kysymys, ennen kuin pystyt luomaan ML-mallin, jolla on yliluonnollinen suorituskyky. Tämä on erityisen totta perinteisissä tehtävissä, kuten luokittelussa, regressiossa ja poikkeamien havaitsemisessa.

Kun olet valmis ratkaisemaan joitain liiketoimintasi ongelmia ML: n avulla, on tärkeää miettiä, missä ML-mallisi tulevat suorittamaan. Jotkut saattavat katsoa, että palvelininfrastruktuurin käyttäminen on järkevää. Tämä antaa hyödyksi, että ML-mallisi pysyvät yksityisinä, joten kilpailijat eivät voi pysyä perässä. Palvelimilla voidaan myös suorittaa laajempi valikoima malleja. Esimerkiksi GPT-mallit (joista tuli kuuluisia ChatGPT) vaativat nykyaikaisia GPU: ia, joten kuluttajalaitteet ovat kyseessä. Toisaalta infrastruktuurin ylläpitäminen on melko kallista, ja jos kuluttajalaitteilla voidaan suorittaa mallisi, miksi maksaisi enemmän? Lisäksi voi olla myös tietosuojaa koskevia huolenaiheita, joissa et voi lähettää käyttäjän tietoja etäpalvelimelle prosessointia varten.

Oletetaan kuitenkin, että on järkevää käyttää asiakkaidesi iOS-laitteita ML-mallin suorittamiseen. Mitä voisi mennä pieleen?

Alustan rajoitukset

Muistirajoitukset

iOS-laitteilla on paljon vähemmän käytettävissä olevaa videomuistia kuin niiden työpöytävastineilla. Esimerkiksi viimeaikainen Nvidia RTX 4080 Ti on 20 GB käytettävissä olevaa muistia. iPhoneilla on videomuisti, joka on jaettu muun RAMin kanssa niin kutsutussa “yhtenäisessä muistissa”. Vertailun vuoksi iPhone 14 Pro: lla on 6 GB RAM: ia. Lisäksi, jos varaat yli puolet muistista, iOS todennäköisesti tappaa sovelluksen varmistamaan, että käyttöjärjestelmä säilyy vastaanotettavassa tilassa. Tämä tarkoittaa, että voit laskea vain 2-3 GB käytettävissä olevasta muistista neuroverkkosuoritukselle.

Tutkijat kouluttavat yleensä mallejaan optimaalisen tarkin luokittelun yli muistin käytön. On kuitenkin myös tutkimuksia, joissa on keinoja optimoida nopeutta ja muistijalanjälkeä, joten voit joko etsiä vähemmän vaativia malleja tai kouluttaa yhden itse.

Verkkokerrosten (operaatioiden) tuki

Useimmat ML- ja neuroverkkomallit tulevat tunnetuista syväoppimisen kehyksistä ja muunnetaan CoreML-malleiksi Core ML Tools: n avulla. CoreML on Applella kirjoitettu inference-moottori, joka voi suorittaa erilaisia malleja Apple-laitteilla. Kerrokset on optimoitu hyvin laitteiston kanssa, ja tuettujen kerrosten luettelo on melko pitkä, joten tämä on erinomainen lähtökohta. On kuitenkin myös muita vaihtoehtoja, kuten Tensorflow Lite.

Paras tapa nähdä, mitä on mahdollista CoreML: n kanssa, on tarkastella joitain jo muunnettuja malleja, kuten Netron: n kaltaisia näkymäohjelmia. Apple listaa joitain virallisesti tuettuja malleja, mutta on myös yhteisöllisiä mallieläimiä. Tuettujen operaatioiden luettelo muuttuu jatkuvasti, joten Core ML Tools -lähdekoodin tarkastelu voi olla hyödyllinen lähtökohtana. Esimerkiksi, jos haluat muuntaa PyTorch-mallin, voit yrittää löytää tarvittavan kerroksen täältä.

Lisäksi tietyt uudet arkkitehtuurit saattavat sisältää käsin kirjoitettua CUDA-koodia joillekin kerroksille. Sellaisissa tilanteissa et voi odottaa, että CoreML tarjoaa esitietyn kerroksen. Kuitenkin voit tarjota omia toteutuksia, jos sinulla on taitava insinööri, joka on perehtynyt GPU-koodin kirjoittamiseen.

Yleisesti ottaen, paras neuvo tässä on yrittää muuntaa mallisi CoreML: ksi jo ennen koulutusta. Jos sinulla on malli, jota ei ole muunnettu välittömästi, on mahdollista muokata neuroverkkomäärittelyä DL-kehyksessäsi tai Core ML Tools -muunnin lähdekoodissa luomaan kelvollinen CoreML-malli ilman, että tarvitsee kirjoittaa mukautettua kerrosta CoreML-inferenssille.

Validointi

Inferenssimoottorin buggit

Ei ole mahdollista testata kaikkia mahdollisia kerrosten yhdistelmiä, joten inferenssimoottorilla on aina jotain bugeja. Esimerkiksi on yleistä nähdä, että dilatoituneet konvoluutiot käyttävät liian paljon muistia CoreML: n kanssa, mikä todennäköisesti osoittaa huonosti kirjoitetun toteutuksen, jossa on suuri ydin, joka on täytetty nolla-arvoilla. Toinen yleinen bugi on virheellinen mallin tuloste joillekin malliarkkitehtuureille.

Tässä tapauksessa operaatioiden järjestys voi vaikuttaa. On mahdollista saada virheellisiä tuloksia siitä, riippuen siitä, tuleeko aktivaatio konvoluution jälkeen vai residuaalinen yhteys ensin. Ainoa todellinen tapa varmistaa, että kaikki toimii oikein, on ottaa mallisi, suorittaa se tarkoitetulla laitteella ja verrata tulosta työpöytäversioon. Tässä testissä on hyödyllistä olla ainakin puoliksi koulutettu malli saatavilla, muuten numeerinen virhe voi kertyä huonosti satunnaisesti aloitettujen mallien kanssa. Vaikka lopullinen koulutettu malli toimii hyvin, tulokset voivat olla melko erilaiset laitteen ja työpöydän välillä satunnaisesti aloitetuille malleille.

Tarkkuuden menetys

iPhone käyttää laajasti puoltarkkuuden tarkkuutta inferenssille. Vaikka jotkut mallit eivät ole havainneet merkittävää tarkkuuden heikentymistä vähemmän bittien takia liukulukuesityksessä, jotkut mallit voivat kärsiä. Voit arvioida tarkkuuden menetystä arvioimalla mallisi työpöydällä puoltarkkuudella ja laskeaksesi testimetrin mallille. Entistä parempi menetelmä on suorittaa se todellisella laitteella, jotta voit selvittää, onko malli yhtä tarkin kuin tarkoitus.

Profiili

Eri iPhone-mallit ovat erilaisia laitteellisesti. Uusimmat mallit ovat parantaneet Neuro Engine -suoritin yksiköitä, mikä voi parantaa suorituskykyä merkittävästi. Ne on optimoitu tiettyjen operaatioiden suorittamiseen, ja CoreML pystyy jakamaan työn älykkäästi CPU: n, GPU: n ja Neuro Engine -yksikön välillä. Apple GPU: t ovat myös parantuneet ajan myötä, joten on normaalia nähdä vaihtelevia suorituskykyjä eri iPhone-mallien välillä. On hyvä idea testata malleja minimoiduilla laitteilla varmistamaan maksimaalinen yhteensopivuus ja hyväksyttävä suorituskyky vanhemmille laitteille.

On myös mainittava, että CoreML voi optimoida pois joitain välimuistikerroksia ja laskelmia paikallisesti, mikä voi parantaa suorituskykyä dramaattisesti. Toinen asia, jota on syytä ottaa huomioon, on, että joskus malli, joka suorittaa huonommin työpöydällä, voi todellakin suorittaa inferenssin nopeammin iOS: ssä. Tämä tarkoittaa, että on syytä viettää aikaa kokeilemassa eri arkkitehtuureja.

Lisäksi Xcode: lla on mukava Instruments-työkalu, jossa on mallinne CoreML-malleille, joka voi antaa tarkemman näkymän siihen, mikä hidastaa mallin inferenssiä.

Johtopäätös

Kukaan ei voi ennustaa kaikkia mahdollisia loukkauksia, kun kehittää ML-malleja iOS: lle. On kuitenkin joitain virheitä, joita voidaan välttää, jos tietää, mitä etsiä. Aloita muuntaminen, validointi ja profiili mallisi aikaisin varmistamaan, että mallisi toimii oikein ja täyttää liiketoimintavaatimukset, ja noudata yllä lueteltuja neuvoja varmistamaan onnistumisen mahdollisimman nopeasti.

Konstantin Semianov, on Neatsy.AI:n CTO, maailman ensimmäinen sovellus, joka havaitsee ortopediset ja podiatriset terveysongelmat käyttäen AI:ta ja AR:ia vain iPhone-kameran avulla. Ennen Neatsy.AI:ta hän työskenteli tutkimus- ja kehitysinsinöörinä Prisma Labsissa, Lensa-sovelluksen luojana.