Myslitelé
Vyhněte se skrytým pastem: Navigace v nejasných pastích v ML na iOS

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 obvykle pouze otázkou času, než budete moci vytvořit ML model s nadlidskými výkony. To je especialmente pravdivé v klasických úkolech, jako je klasifikace, regrese a detekce anomálií.
Když jste připraveni řešit některé ze svých obchodních problémů s ML, musíte zvážit, kde vaše ML modely budou spuštěny. Pro některé má smysl spustit serverovou infrastrukturu. To má výhodu, že vaše ML modely zůstanou soukromé, takže je pro konkurenty obtížnější dohnat. Kromě toho servery mohou spustit širší řadu modelů. Například GPT modely (které se staly slavnými díky ChatGPT)目前 vyžadují moderní GPU, takže spotřební zařízení jsou vyřazena. Na druhou stranu, údržba vaší infrastruktury je poměrně nákladná a pokud může spotřební zařízení spustit váš model, proč platit více? Kromě toho mohou existovat také problémy s ochranou osobních údajů, 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í ML modelu. 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 recentní Nvidia RTX 4080 Ti má 20 GB dostupné paměti. Na druhou stranu, iPhony mají video paměť sdílenou s ostatními RAM v tom, co nazývají „sjednocenou pamětí“. Pro srovnání, 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 2-3 GB dostupné paměti pro inferenci neuronové sítě.
Výzkumníci obvykle trénují své modely pro optimalizaci přesnosti nad spotřebou paměti. Nicméně, existuje také výzkum dostupný pro optimalizaci rychlosti a paměťového footprintu, 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é se převádí na CoreML modely s Core ML Tools. CoreML je inference engine napsaný Applen, který může spustit různé modely na zařízeních Apple (AAPL ). Vrstvy jsou dobře optimalizovány pro hardware a seznam podporovaných vrstev je poměrně dlouhý, takže je to excelente výchozí bod. Nicméně, další možnosti, jako je Tensorflow Lite, jsou také dostupné.
Nejlepší způsob, jak vidět, co je možné s CoreML, je podívat se na některé již převedené modely pomocí viewerů, jako je Netron. Apple seznamuje 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 Core ML Tools může být nápomocný jako výchozí bod. Například, pokud chcete převést PyTorch model, 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 situacích, nemůžete 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 obeznámený s psaním GPU kódu.
Celkově, nejlepší rada zde je pokusit se převést váš model na CoreML brzy, dokonce před trénováním. Pokud máte model, který nebyl převeden hned, je možné upravit definici neuronové sítě ve vašem DL frameworku nebo v zdrojovém kódu Core ML Tools, aby se vygeneroval platný CoreML model bez potřeby psaní vlastních vrstev pro CoreML inferenci.
Validace
Chyby inference engine
Neexistuje žádný způsob, jak 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, které je vyplněno 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 zajistit, ž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 nápomocné 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 dobře, 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é znatelné degradace přesnosti kvůli menšímu počtu bitů ve floatovém представlení, 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 iPhonů mají různé hardwarové schopnosti. Nejnovější modely mají vylepšené Neural Engine procesory, které mohou zvýšit celkovou výkonnost významně. Jsou optimalizovány pro určité operace a CoreML je schopen inteligentně distribuovat práci mezi CPU, GPU a Neural Engine. Apple GPU se také vylepšily over time, takže je normální vidět kolísavou výkonnost napříč různými modely iPhonů. Je dobré otestovat vaše modely na minimálně podporovaných zařízeních, aby se zajistila maximální kompatibilita a přijatelná výkonnost pro starší zařízení.
Je také worth mentioning, že CoreML může optimalizovat pryč některé mezilehlé vrstvy a výpočty in-place, což může výrazně zlepšit výkonnost. Další faktor, který je třeba zvážit, je, že někdy model, který funguje hůře na desktopu, může ve skutečnosti provádět inferenci rychleji na iOS. To znamená, že je stojí za to 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 CoreML modely, který může poskytnout více podrobný pohled na to, co zpomaluje váš model inferenci.
Conclusion
Nikdo nemůže předvídat všechny možné pasti, když vyvíjí ML modely pro iOS. Nicméně, existují některé chyby, které lze避nout, pokud víte, co hledat. Začněte převádět, validaovat a profilovat vaše ML modely brzy, aby se zajistilo, že váš model bude fungovat správně a bude odpovídat vašim obchodním požadavkům, a postupujte podle tipů uvedených výše, aby se zajistilo úspěch co nejdříve.












