Несколько недель назад я набросал три варианта развертывания функции суммирования в приложении React Native: запустить небольшую модель на устройстве, вызвать API размещенной модели или разместить небольшую модель на дешевом сервере, которым я управляю. Каждый вариант имел правдоподобное звучание...
Несколько недель назад я набросал три варианта развертывания функции суммирования в приложении React Native: запустить небольшую модель на устройстве, вызвать API размещенной модели или разместить небольшую модель на дешевом сервере, которым я управляю. Каждый вариант имел убедительные аргументы. Ни один из аргументов не устоял перед вопросом, который действительно имеет значение для мобильных устройств: сколько это стоит с точки зрения энергопотребления, задержки и режимов сбоя на реальном телефоне в реальной сети?
Эта статья представляет собой измерительную систему, которую я создал, чтобы честно ответить на этот вопрос. Это воспроизводимый метод, а не отчет о тестировании — я намеренно не публикую здесь цифры, поскольку цифры с моего тестового устройства будут бесполезны для вашего класса устройства, вашей модели и вашей сети. Что передается, так это процедура, инструменты и таблица решений в конце.
Три места размещения, оформленные как ограничения для мобильных устройств
Размещение
Драйвер задержки
Энергетический драйвер
Режим отказа для проверки
Вывод на устройстве
Размер модели по сравнению с SoC/NPU
Устойчивая нагрузка CPU/GPU/NPU, температурный дроссель
Приложение в фоновом режиме, средний вывод, режим низкого энергопотребления
API размещенной модели
Сеть RTT + очередь
Радио (сотовая связь стоит дорого), TLS, повторные попытки
Сетевой переключатель (Wi-Fi → LTE), разрешение