Ajatusjohtajat

Vältä piilotetut vaarat: navigointi epäilyttävien esteiden ylitse ML: ssä iOS: ssä

mm
Lisää Unite.AI suosikkilähteisiisi Google-palvelussa

Tarvitsetko ML: ä?

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

Kun olet valmis ratkaisemaan joitain liiketoimintasi ongelmia ML: n avulla, on tärkeää miettiä, missä ML-mallisi tulevat suorittamaan. Jotkut päättävät, että on järkevämpää suorittaa palvelininfrastruktuuri. Tämä antaa hyödyt, kuten sen, että ML-mallisi pysyvät yksityisinä, jotta kilpailijat eivät voi pysyä perässä. Palvelimilla on myös mahdollisuus suorittaa laajempi valikoima malleja. Esimerkiksi GPT-mallit (joista ChatGPT on esimerkki) vaativat nykyaikaisia GPU: ia, joten kuluttajalaitteet eivät ole kyseessä. Toisaalta infrastruktuurin ylläpitäminen on melko kallista, ja jos kuluttajalaitteet voivat suorittaa mallisi, miksi maksaisit enemmän? On myös mahdollista, että on olemassa 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ää asiakkaiden iOS-laitteita ML-mallin suorittamiseen. Mitä voisi mennä pieleen?

Alustan rajoitukset

Muistirajoitukset

iOS-laitteissa on paljon vähemmän käytettävissä olevaa videomuistia kuin niiden työpöytävastineissa. Esimerkiksi viimeisin Nvidia RTX 4080 Ti -malli on varustettu 20 gigatavun muistilla. iPhoneissa on yhdistetty muisti, jota kutsutaan “yhtenäiseksi muistiksi”, ja esimerkiksi iPhone 14 Pro -malli on varustettu 6 gigatavun RAM-muistilla. Jos varaat yli puolet muistista, iOS todennäköisesti lopettaa sovelluksen, jotta käyttöjärjestelmä pysyy vastaanotettavassa tilassa. Tämä tarkoittaa, että voit laskea vain 2-3 gigatavun käytettävissä olevan muistin neuroverkkosuoritukselle.

Tutkijat kouluttavat yleensä mallejaan optimoimaan tarkkuutta muistin käytön sijaan. On kuitenkin myös tutkimuksia, joissa keskitytään nopeuteen ja muistijalanjälkeen, joten voit etsiä vähemmän vaativia malleja tai kouluttaa yhden itse.

Verkkokerrosten (operaatioiden) tuki

Useimmat ML- ja neuroverkkomallit tulevat tunnetuista syväoppimisen kehyksistä ja muunnetaan sitten CoreML -malleiksi Core ML Tools -avainsanalla. CoreML on Applella kehitetty suoritin, joka voi suorittaa erilaisia malleja Apple (AAPL ) -laitteilla. Kerrokset on optimoitu laitteiston kannalta, 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ä CoreML: llä on mahdollista, on tarkastella jo muunnettuja malleja, kuten Netron -näkymä. Apple listaa joitain virallisesti tuettuja malleja, mutta on myös yhteisöllisiä mallieläimiä. Tuettujen operaatioiden täydellinen luettelo muuttuu jatkuvasti, joten Core ML Tools -lähdekoodin tarkastelu voi olla hyödyllinen lähtökohta. Esimerkiksi, jos haluat muuttaa PyTorch-mallin, voit yrittää löytää tarvittavan kerroksen täältä.

Lisäksi tietyt uudet arkkitehtuurit voivat sisältää käsin kirjoitettua CUDA-koodia joillekin kerroksille. Tällaisissa tilanteissa et voi odottaa, että CoreML tarjoaa ennalta määritetyn 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ää muuttaa mallisi CoreML: ksi jo ennen koulutusta. Jos sinulla on malli, jota ei muunnettu välittömästi, on mahdollista muuttaa neuroverkkojen määrittelyä DL-kehyksessäsi tai Core ML Tools -muunnin lähdekoodissa, jotta voit luoda voimassa olevan CoreML-mallin ilman, että tarvitse kirjoittaa mukautettua kerrosta CoreML-suoritukselle.

Validointi

Suoritinmoottorin virheet

Ei ole mahdollista testata kaikkia mahdollisia kerrosten yhdistelmiä, joten suoritinmoottorissa on aina joitakin virheitä. Esimerkiksi on yleistä, että laajennetut konvoluutiot käyttävät liian paljon muistia CoreML: ssä, mikä viittaa huonosti kirjoitettuun toteutukseen, jossa on suuri ydin, joka on täytetty nollilla. Toinen yleinen virhe on virheellinen mallin tulostus joillekin malliarkkitehtuureille.

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

Tarkkuuden menetys

iPhone käyttää laajasti puoltarkkuuden tarkkuutta suorituksessa. Vaikka jotkut mallit eivät kärsi havaittavasta tarkkuuden heikentymisestä vähemmän bittien takia liukuvan pisteen esityksessä, toiset mallit voivat kärsiä. Voit arvioida tarkkuuden menetystä arvioimalla mallisi tarkkuutta työpöydällä puoltarkkuudella ja laskemalla testimetrin mallille. Entä 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 -suoritinyksikö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ä suorituskyvyn vaihtelua eri iPhone-mallien välillä. On hyvä testata malleja vähintään tuettavilla laitteilla, jotta voit varmistaa maksimaalisen yhteensopivuuden ja hyväksyttävän suorituskyvyn vanhemmille laitteille.

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

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

Johtopäätös

Kukaan ei voi ennustaa kaikkia mahdollisia ansaita, kun kehittää ML-malleja iOS: lle. On kuitenkin joitain virheitä, joita voidaan välttää, jos tiedät, mitä etsimään. Aloita muuttaminen, validointi ja profiliointi ML-malleja aikaisin, jotta voit varmistaa, että mallisi toimii oikein ja sopii liiketoimintasi vaatimuksiin, ja noudata yllä mainittuja neuvoja, jotta voit varmistaa 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.