Connect with us

Myslitelé

Vyhnout se skrytým nebezpečím: Navigace v méně zjevných pastech v ML na iOS

mm

Potřebujete ML?

Strojové učení je excelente v rozpoznávání vzorců. Pokud se vám podaří shromáždit čistou datovou sadu pro váš úkol, je to obvykle pouze otázka času, než budete moci vytvořit model ML s nadlidskými výkony. To platí zejména u klasických úkolů, jako je klasifikace, regrese a detekce anomálií.

Když jste připraveni vyřešit některé ze svých obchodních problémů pomocí ML, musíte zvážit, kde budou vaše modely ML spouštěny. Pro některé má smysl spouštět serverovou infrastrukturu. To má výhodu, že vaše modely ML zůstávají soukromé, takže je pro konkurenty obtížnější dohnat vás. Kromě toho mohou servery spouštět širší řadu modelů. Například modely GPT (proslulé díky ChatGPT)目前 vyžadují moderní GPU, takže spotřební zařízení jsou v tomto případě out of the question. Na druhou stranu, údržba vaší infrastruktury je poměrně nákladná a pokud může spotřební zařízení spouštět váš model, proč platit více? Kromě toho mohou existovat také obavy o ochranu soukromí, kdy nemůžete odesílat uživatelská data na vzdálený server pro zpracování.

Nicméně, předpokládejme, že má smysl použít zařízení iOS vašich zákazníků pro spuštění modelu ML. Co by mohlo být špatně?

Omezení platformy

Omezení paměti

Zařízení iOS mají mnohem méně dostupné video paměti než jejich desktopové protějšky. Například nedávný Nvidia RTX 4080 Ti má 20 GB dostupné paměti. Naopak, iPhone má video paměť sdílenou s ostatními RAM v tom, co nazývají „unified memory“. Pro referenci, iPhone 14 Pro má 6 GB RAM. Kromě toho, pokud přidělíte více než polovinu paměti, iOS je velmi pravděpodobně ukončí aplikaci, aby zajistil, že operační systém zůstane reaktivní. To znamená, že můžete počítat pouze s tím, že budete mít 2-3 GB dostupné paměti pro inferenci neuronové sítě.

Výzkumníci obvykle trénují své modely pro optimalizaci přesnosti nad využitím paměti. Existuje však také výzkum dostupný na způsoby, jak optimalizovat pro rychlost a paměťový otisk, takže můžete buď hledat méně náročné modely nebo trénovat jeden sami.

Podpora vrstev sítě (operací)

Většina ML a neuronových sítí pochází z dobře známých frameworků hlubokého učení a poté jsou převedeny do CoreML modelů s Core ML Tools. CoreML je inference engine napsaný společností Apple, který může spouštět různé modely na zařízeních Apple. Vrstvy jsou dobře optimalizovány pro hardware a seznam podporovaných vrstev je khá dlouhý, takže je to excelente výchozí bod. Existují však také další možnosti, jako je Tensorflow Lite.

Nejlepší způsob, jak vidět, co je možné s CoreML, je podívat se na některé již převedené modely pomocí prohlížečů, jako je Netron. Apple uvádí některé oficiálně podporované modely, ale existují také komunitně vedené modely. Úplný seznam podporovaných operací se neustále mění, takže pohled na zdroj kódu Core ML Tools může být užitečný jako výchozí bod. Například, pokud chcete převést model PyTorch, můžete se pokusit najít nezbytnou vrstvu zde.

Kromě toho, některé nové architektury mohou obsahovat ručně psaný CUDA kód pro některé vrstev. V takových případech nelze očekávat, že CoreML poskytne předdefinovanou vrstvu. Nicméně, můžete poskytnout svou vlastní implementaci, pokud máte zkušeného inženýra, který je seznámen s psaním kódu GPU.

Celkově, nejlepší rada zde je pokusit se převést váš model do CoreML brzy, dokonce před trénováním. Pokud máte model, který nebyl převeden okamžitě, je možné upravit definici neuronové sítě ve vašem frameworku DL nebo zdrojovém kódu Core ML Tools converter, aby se generoval platný model CoreML bez potřeby psaní vlastních vrstev pro inferenci CoreML.

Validace

Chyby inference engine

Není možné otestovat každou možnou kombinaci vrstev, takže inference engine bude vždy mít některé chyby. Například, je běžné vidět, že dilated konvoluce používají příliš mnoho paměti s CoreML, pravděpodobně ukazující na špatně napsanou implementaci s velkou jádrem vyplněnou nulami. Další běžnou chybou je nesprávný výstup modelu pro některé architektury modelů.

V tomto případě, pořadí operací může hrát roli. Je možné získat nesprávné výsledky v závislosti na tom, zda aktivace s konvolucí nebo reziduální spojení přichází první. Jediný skutečný způsob, jak garantovat, že vše funguje správně, je vzít váš model, spustit ho na cílovém zařízení a porovnat výsledek s desktopovou verzí. Pro tento test, je užitečné mít alespoň semi-trénovaný model k dispozici, jinak může numerická chyba akumulovat pro špatně inicializované modely. I když konečný trénovaný model bude fungovat správně, výsledky mohou být bastante odlišné mezi zařízením a desktopem pro náhodně inicializovaný model.

Ztráta přesnosti

iPhone používá polovinu přesnosti pro inferenci. Zatímco některé modely nemají žádné pozorovatelné snížení přesnosti kvůli menšímu počtu bitů v plovoucí řádce, jiné modely mohou trpět. Můžete aproximovat ztrátu přesnosti vyhodnocením vašeho modelu na desktopu s polovinou přesnosti a výpočtem testovací metriky pro váš model. Ještě lepší metodou je spustit ho na skutečném zařízení, aby se zjistilo, zda model je tak přesný, jak je zamýšleno.

Profiling

Různé modely iPhone mají různé hardwarové schopnosti. Nejnovější z nich mají vylepšené Neural Engine procesorové jednotky, které mohou zvýšit celkový výkon výrazně. Jsou optimalizovány pro určité operace a CoreML je schopen inteligentně rozdělit práci mezi CPU, GPU a Neural Engine. Apple GPU se také vylepšily over time, takže je normální vidět kolísavé výkony napříč různými modely iPhone. Je dobré otestovat vaše modely na minimálně podporovaných zařízeních, aby se zajistila maximální kompatibilita a přijatelný výkon pro starší zařízení.

Je také worth mentioning, že CoreML může optimalizovat pryč některé mezilehlé vrstvy a výpočty na místě, což může výrazně zlepšit výkon. Další faktor, který je třeba vzít v úvahu, je, že někdy model, který funguje hůře na desktopu, může ve skutečnosti dělat inferenci rychleji na iOS. To znamená, že je worth strávit nějaký čas experimentováním s různými architekturami.

Pro ještě více optimalizace, Xcode má pěkný nástroj Instruments s šablonou pouze pro modely CoreML, který může poskytnout hlubší vhled do toho, co zpomaluje váš model inferenci.

Závěr

Nikdo nemůže předpovědět všechny možné pasti, když vyvíjí modely ML pro iOS. Nicméně, existují některé chyby, které lze避nout, pokud víte, na co se zaměřit. Začněte převádět, ověřovat a profilovat vaše modely ML brzy, aby se zajistilo, že váš model bude fungovat správně a bude splňovat vaše obchodní požadavky, a postupujte podle tipů uvedených výše, aby se zajistilo úspěch co nejdříve.

Konstantin Semianov, je CTO společnosti Neatsy.AI, první aplikace na světě, která detekuje ortopedická a podiatrická zdravotní problémy, využívající AI & AR, pouze s pomocí iPhone kamery. Předtím, než nastoupil do Neatsy.AI, pracoval jako inženýr výzkumu a vývoje v Prisma Labs, tvůrcích aplikace Lensa.