Лідери думок

Уникнення прихованих небезпек: навігація по неочевидним пасткам у ML на iOS

mm
Додайте Unite.AI до бажаних джерел у Google

Чи потрібен вам ML?

Машинне навчання чудово підходить для виявлення закономірностей. Якщо ви зможете зібрати чистий набір даних для вашого завдання, то зазвичай це лише питання часу, перш ніж ви зможете створити модель ML з надлюдською продуктивністю. Це особливо вірно для класичних завдань, таких як класифікація, регресія та виявлення аномалій.

Коли ви готові вирішити деякі з ваших бізнес-проблем за допомогою ML, вам потрібно подумати, де ваші моделі ML будуть працювати. Для деяких це має сенс запускати серверну інфраструктуру. Це має перевагу у збереженні ваших моделей ML приватними, тому що це складніше для конкурентів наздогнати. Крім того, сервери можуть запускати більший різноманіття моделей. Наприклад, моделі GPT (став відомими завдяки ChatGPT) зараз вимагають сучасних GPU, тому споживчі пристрої виключені з питання. З іншого боку, підтримка вашої інфраструктури досить дорога, і якщо споживчий пристрій може запускати вашу модель, чому платити більше? Крім того, можуть бути й питання конфіденційності, коли ви не можете надсилати дані користувачів на віддалений сервер для обробки.

Однак, припустимо, що має сенс використовувати пристрої iOS ваших клієнтів для запуску моделі ML. Що могло би піти не так?

Обмеження платформи

Обмеження пам’яті

Пристрої iOS мають значно менше доступної відеопам’яті, ніж їхні настільні аналоги. Наприклад, недавній Nvidia RTX 4080 Ti має 20 ГБ доступної пам’яті. З іншого боку, в iPhone пам’ять розділяється з рештою оперативної пам’яті в тому, що вони називають “уніфікованою пам’яттю”. Для порівняння, iPhone 14 Pro має 6 ГБ оперативної пам’яті. Крім того, якщо ви виділили більше половини пам’яті, iOS дуже ймовірно вб’є застосунок, щоб забезпечити реакційність операційної системи. Це означає, що ви можете розраховувати лише на 2-3 ГБ доступної пам’яті для висновку нейронної мережі.

Дослідники зазвичай тренують свої моделі для оптимізації точності над використанням пам’яті. Однак також є дослідження щодо оптимізації для швидкості та пам’яті, тому ви можете шукати менш вимогливі моделі або тренувати одну самі.

Підтримка операцій шарів мережі

Більшість моделей ML і нейронних мереж походять від відомих фреймворків глибокого навчання, а потім конвертуються в CoreML моделі з Core ML Tools. CoreML – це інженер висновку, написаний Apple (AAPL ), який може запускати різні моделі на пристроях Apple. Шари добре оптимізовані для апаратного забезпечення, а список підтримуваних шарів досить довгий, тому це чудовий стартовий пункт. Однак інші варіанти, такі як Tensorflow Lite, також доступні.

Найкращий спосіб побачити, що можливе з CoreML, – це подивитися на вже конвертовані моделі за допомогою інструментів, таких як Netron. Apple перелічує деякі з офіційно підтримуваних моделей, але також є спільні моделі зоопарків. Повний список підтримуваних операцій постійно змінюється, тому перегляд джерельного коду Core ML Tools може бути корисним як стартовий пункт. Наприклад, якщо ви хочете конвертувати модель PyTorch, ви можете спробувати знайти необхідний шар тут.

Крім того, деякі нові архітектури можуть містити написаний вручну код CUDA для деяких шарів. У таких ситуаціях ви не можете очікувати, що CoreML надасть попередньо визначений шар. Однак ви можете надати власну реалізацію, якщо у вас є кваліфікований інженер, знайомий з написанням коду GPU.

Загалом, найкращий порада тут – спробувати конвертувати вашу модель в CoreML рано, навіть до тренування. Якщо у вас є модель, яка не була конвертована відразу, це можливо модифікувати визначення нейронної мережі в вашому фреймворку DL або джерельному коді конвертера Core ML Tools, щоб згенерувати дійсну модель CoreML без потреби написання власного шару для висновку CoreML.

Валідация

Баги інженерії висновку

Не існує способу протестувати кожну можливу комбінацію шарів, тому інженер висновку завжди матиме деякі баги. Наприклад, це звично бачити розширені конволюції, які використовують занадто багато пам’яті з CoreML, ймовірно, вказуючи на погано написану реалізацію з великим ядром, заповненим нулями. Інший звичайний баг – неправильний вивід моделі для деяких архітектур моделей.

У цьому випадку порядок операцій може мати значення. Це можливо отримати неправильні результати залежно від того, чи активація з конволюцією чи залишкова зв’язок приходять першими. Єдиний справжній спосіб гарантувати, що все працює правильно, – це взяти вашу модель, запустити її на призначеному пристрої та порівняти результат з версією для робочого столу. Для цього тесту корисно мати至少 напівтреновану модель, інакше числовий похибка може накопичуватися для погано ініціалізованих моделей. Хоча остаточно тренована модель працюватиме нормально, результати можуть бути досить різними між пристроєм та робочим столом для випадково ініціалізованої моделі.

Втрата точності

iPhone використовує напівточну точність розширено для висновку. Хоча деякі моделі не мають жодного помітного погіршення точності через менше біт у представленні з плаваючою комою, інші моделі можуть страждати. Ви можете наблизити втрату точності, оцінюючи вашу модель на робочому столі з напівточною точністю та обчислюючи тестовий метрик для вашої моделі. Ще кращий метод – запустити її на справжньому пристрої, щоб дізнатися, чи модель такої ж точності, як передбачалося.

Профайлінг

Різні моделі iPhone мають різну апаратну потужність. Останні мають покращені процесори Neural Engine, які можуть підвищити загальну продуктивність значно. Вони оптимізовані для певних операцій, а CoreML може інтелектуально розподіляти роботу між CPU, GPU та Neural Engine. Apple GPU також покращилися з часом, тому нормально бачити коливання продуктивності на різних моделях iPhone. Це хороша ідея протестувати ваші моделі на мінімально підтримуваних пристроях, щоб забезпечити максимальну сумісність та прийнятну продуктивність для старших пристроїв.

Також варто згадати, що CoreML може оптимізувати деякі проміжні шари та обчислення на місці, що може суттєво покращити продуктивність. Іншим фактором, який потрібно враховувати, є те, що іноді модель, яка працює гірше на робочому столі, може насправді робити висновок швидше на iOS. Це означає, що варто витратити деякий час на експерименти з різними архітектурами.

Для ще більшої оптимізації Xcode має гарний інструмент Instruments з шаблоном саме для моделей CoreML, який може надати більш глибокий погляд на те, що сповільнює вашу модель висновку.

Висновок

Ніхто не може передбачити всі можливі пастки при розробці моделей ML для iOS. Однак існують деякі помилки, яких можна уникнути, якщо ви знаєте, на що слід звернути увагу. Почніть конвертувати, валідувати та профайлювати ваші моделі ML рано, щоб đảmнити, що ваша модель працюватиме правильно та відповідатиме вашим бізнес-вимогам, і слідуйте порадам, викладеним вище, щоб забезпечити успіх якомога швидше.

Konstantin Semianov, є CTO компанії Neatsy.AI, першого в світі додатка, який виявляє ортопедичні та подологічні проблеми зі здоров'ям, використовуючи AI та AR, лише за допомогою камери iPhone. До Neatsy.AI він працював інженером-дослідником у Prisma Labs, створенні додатка Lensa.