заглушки Избегайте скрытых опасностей: обход неочевидных ловушек в машинном обучении на iOS - Unite.AI
Свяжитесь с нами:

Лидеры мысли

Как избежать скрытых опасностей: обход неочевидных ловушек в машинном обучении на iOS

mm

опубликованный

 on

Вам нужен МЛ?

Машинное обучение отлично справляется с выявлением закономерностей. Если вам удастся собрать чистый набор данных для вашей задачи, то создание модели машинного обучения со сверхчеловеческой производительностью обычно является лишь вопросом времени. Это особенно актуально для классических задач, таких как классификация, регрессия и обнаружение аномалий.

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

Однако предположим, что имеет смысл использовать устройства iOS ваших клиентов для запуска модели машинного обучения. Что может пойти не так?

Ограничения платформы

Ограничения по памяти

Устройства iOS имеют гораздо меньше доступной видеопамяти, чем их настольные аналоги. Например, недавняя Nvidia RTX 4080 Ti имеет 20 ГБ доступной памяти. iPhone, с другой стороны, имеет видеопамять, совместно используемую с остальной частью оперативной памяти, в так называемой «унифицированной памяти». Для справки: у iPhone 14 Pro 6 ГБ оперативной памяти. Более того, если вы выделите больше половины памяти, iOS, скорее всего, убьет приложение, чтобы убедиться, что операционная система остается отзывчивой. Это означает, что вы можете рассчитывать только на наличие 2-3 ГБ доступной памяти для вывода нейронной сети.

Исследователи обычно тренируют свои модели, чтобы оптимизировать точность по использованию памяти. Тем не менее, также доступны исследования способов оптимизации скорости и объема памяти, поэтому вы можете либо поискать менее требовательные модели, либо обучить их самостоятельно.

Поддержка сетевых уровней (операций)

Большинство ML и нейронных сетей основаны на хорошо известных фреймворках глубокого обучения, а затем преобразуются в CoreML модели с Основные инструменты машинного обучения. CoreML — это механизм логического вывода, написанный Apple, который может запускать различные модели на устройствах Apple. Слои хорошо оптимизированы для аппаратного обеспечения, а список поддерживаемых слоев довольно длинный, так что это отличная отправная точка. Однако другие варианты, такие как Тензорфлоу Лайт Также доступны.

Лучший способ увидеть возможности CoreML — просмотреть некоторые уже преобразованные модели с помощью таких средств просмотра, как Нетрон. 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 также улучшались с течением времени, поэтому нормально видеть колебания производительности на разных моделях iPhone. Рекомендуется протестировать свои модели на минимально поддерживаемых устройствах, чтобы обеспечить максимальную совместимость и приемлемую производительность для старых устройств.

Также стоит упомянуть, что CoreML может оптимизировать некоторые промежуточные уровни и вычисления на месте, что может значительно повысить производительность. Еще один фактор, который следует учитывать, заключается в том, что иногда модель, которая хуже работает на настольном компьютере, на самом деле может быстрее выполнять логические выводы на iOS. Это означает, что стоит потратить некоторое время на эксперименты с различными архитектурами.

Для еще большей оптимизации в Xcode есть хороший инструмент Instruments с шаблоном только для моделей CoreML, который может дать более полное представление о том, что замедляет вывод модели.

Заключение

Никто не может предусмотреть все возможные подводные камни при разработке моделей машинного обучения для iOS. Однако есть некоторые ошибки, которых можно избежать, если знать, что искать. Начните преобразовывать, проверять и профилировать свои модели машинного обучения заранее, чтобы убедиться, что ваша модель будет работать правильно и соответствовать вашим бизнес-требованиям, и следуйте советам, изложенным выше, чтобы добиться успеха как можно быстрее.

Константин Семянов, технический директор Аккуратный.AI, первое в мире приложение, которое выявляет ортопедические и подиатрические проблемы со здоровьем, используя искусственный интеллект и дополненную реальность, используя только камеру iPhone. До Neatsy.AI он работал инженером по исследованиям и разработкам в Prisma Labs, создателях приложения Lensa.