Neural Networks API
Neural Networks API (NNAPI) — это программный интерфейс прикладного программирования (API), предназначенный для выполнения операций машинного обучения, в частности, вычислений на основе искусственных нейронных сетей, непосредственно на мобильных и встраиваемых устройствах. NNAPI обеспечивает аппаратное ускорение этих вычислений, используя специализированные блоки, такие как графические процессоры (GPU), цифровые сигнальные процессоры (DSP) и нейронные процессоры (NPU), что позволяет снизить задержки и энергопотребление по сравнению с выполнением на центральном процессоре (CPU).
История и развитие
Концепция аппаратного ускорения нейросетевых вычислений на мобильных устройствах возникла с ростом популярности приложений, использующих машинное обучение, таких как распознавание речи, обработка изображений и дополненная реальность. До появления специализированных API такие вычисления выполнялись на CPU, что было медленно и энергозатратно.
Android Neural Networks API
Первая версия Neural Networks API (NNAPI) была представлена компанией Google в 2017 году в составе операционной системы Android 8.1 (Oreo). Она предоставила разработчикам унифицированный интерфейс для доступа к аппаратным ускорителям на устройствах под управлением Android. Изначально NNAPI поддерживала ограниченный набор операций (например, свертки, пулинг, активации) и была ориентирована на фреймворки машинного обучения, такие как TensorFlow Lite и Caffe2.
С каждой новой версией Android NNAPI расширялась:
- Android 9 (Pie): Добавлена поддержка количественных моделей (int8), что позволило уменьшить размер и повысить скорость выполнения.
- Android 10: Введена поддержка динамических тензоров и новых операций, улучшена интеграция с GPU.
- Android 11: Добавлена поддержка моделей с плавающей точкой половинной точности (float16), расширены возможности для работы с памятью.
- Android 12 и выше: Внедрена поддержка NNAPI для выполнения на CPU, а также улучшена обработка больших моделей и добавлены новые типы операций, включая поддержку трансформеров.
Аналоги в других операционных системах
Хотя NNAPI является наиболее известным решением для Android, аналогичные API существуют и в других экосистемах:
- Core ML (Apple): Фреймворк для интеграции моделей машинного обучения в приложения iOS, macOS, watchOS и tvOS. Обеспечивает аппаратное ускорение на GPU и Neural Engine (в процессорах Apple A-серии и M-серии).
- DirectML (Microsoft): API для аппаратного ускорения машинного обучения на устройствах под управлением Windows. Использует DirectX 12 для работы с GPU, включая интегрированные и дискретные видеокарты.
- OpenVINO (Intel): Набор инструментов для оптимизации и развертывания моделей глубокого обучения на оборудовании Intel (CPU, GPU, VPU, FPGA).
- CUDA (NVIDIA): Параллельная вычислительная платформа, широко используемая для обучения и выполнения нейросетей на GPU NVIDIA. Не является мобильным API, но применяется в серверных и настольных системах.
Архитектура и принцип работы
NNAPI работает как промежуточный слой между фреймворком машинного обучения (например, TensorFlow Lite) и аппаратным обеспечением устройства. Основные компоненты архитектуры:
- Приложение (Application): Разрабатывается с использованием фреймворка ML (например, TensorFlow Lite). Приложение загружает предварительно обученную модель (обычно в формате .tflite) и вызывает API для выполнения вывода (inference).
- NNAPI Runtime: Компонент операционной системы, который управляет планированием и выполнением запросов. Он получает от приложения описание модели (граф вычислений) и входные данные.
- Драйверы (Drivers): Аппаратно-зависимые модули, предоставляемые производителями чипов (Qualcomm, MediaTek, Samsung, HiSilicon и др.). Они реализуют интерфейс NNAPI для конкретного аппаратного ускорителя (GPU, DSP, NPU).
- Аппаратное обеспечение (Hardware): Физические чипы, выполняющие вычисления. NNAPI может автоматически выбирать наиболее подходящее устройство для выполнения конкретной операции, основываясь на его производительности и энергопотреблении.
Процесс выполнения выглядит следующим образом:
- Приложение создает компиляцию (Compilation) — представление модели, оптимизированное для целевого устройства.
- Затем создается выполнение (Execution), которое связывает входные данные с моделью и запускает вычисления.
- NNAPI Runtime распределяет операции по доступным аппаратным ускорителям, выполняя их параллельно или последовательно.
Классификация и виды
NNAPI можно классифицировать по нескольким признакам, хотя сам интерфейс является единым для Android. Классификация скорее относится к поддерживаемым операциям и типам данных.
По типу поддерживаемых операций
NNAPI поддерживает широкий спектр операций, необходимых для построения нейронных сетей. Основные категории:
- Сверточные операции:
CONV_2D,DEPTHWISE_CONV_2D,CONV_3D. - Операции пулинга:
AVERAGE_POOL_2D,MAX_POOL_2D,L2_POOL_2D. - Операции активации:
RELU,RELU6,SIGMOID,TANH,SOFTMAX. - Операции нормализации:
BATCH_NORMALIZATION,LOCAL_RESPONSE_NORMALIZATION. - Операции слияния (concatenation):
CONCATENATION. - Операции изменения формы (reshape):
RESHAPE,TRANSPOSE,PAD. - Операции с тензорами:
ADD,MUL,SUB,DIV,MEAN,SUM. - Операции для рекуррентных сетей:
LSTM,RNN.
По типу данных
NNAPI поддерживает различные типы данных для тензоров:
- Float32: Стандартная точность с плавающей запятой.
- Float16: Половинная точность, используется для ускорения на некоторых GPU.
- Int8, UInt8: Целочисленные типы, используемые для квантованных моделей. Квантование позволяет уменьшить размер модели и ускорить выполнение на DSP и NPU.
- Bool: Логический тип.
Применение и значение
NNAPI находит применение в широком спектре мобильных приложений, где требуется быстрая и энергоэффективная обработка данных с помощью нейросетей.
Основные области применения
- Обработка изображений и видео: Улучшение качества фото (шумоподавление, супер-разрешение), распознавание объектов, стилизация изображений, фильтры дополненной реальности.
- Распознавание речи и обработка аудио: Голосовые ассистенты (например, Google Assistant), распознавание команд, синтез речи, шумоподавление в реальном времени.
- Обработка естественного языка (NLP): Автодополнение текста, машинный перевод, анализ тональности.
- Компьютерное зрение: Распознавание лиц, чтение текста (OCR), навигация для людей с ограниченными возможностями.
- Рекомендательные системы: Персонализация контента, прогнозирование действий пользователя.
Значение для разработчиков и пользователей
- Производительность: Выполнение нейросетей на специализированном оборудовании может быть в 10-100 раз быстрее, чем на CPU, что критически важно для приложений реального времени.
- Энергоэффективность: Аппаратное ускорение значительно снижает энергопотребление, что продлевает время работы устройства от батареи.
- Приватность: Вычисления выполняются локально на устройстве, без необходимости отправлять данные на сервер. Это повышает конфиденциальность пользовательских данных.
- Доступность: NNAPI является частью Android, что делает его доступным для миллионов устройств по всему миру. Разработчикам не нужно писать код для каждого типа чипа отдельно.
Критика и ограничения
Несмотря на преимущества, NNAPI имеет ряд ограничений и критических замечаний:
- Фрагментация: Разные производители чипов по-разному реализуют поддержку NNAPI. Качество драйверов, набор поддерживаемых операций и производительность могут сильно варьироваться от устройства к устройству. Это может приводить к непредсказуемому поведению моделей на разных телефонах.
- Ограниченный набор операций: NNAPI не поддерживает все операции, используемые в современных нейросетях. Некоторые сложные или нестандартные операции могут выполняться на CPU, что снижает общую производительность.
- Сложность отладки: Ошибки в работе NNAPI могут быть трудно диагностируемыми, так как они зависят от аппаратного обеспечения и драйверов. Разработчикам часто приходится тестировать модели на большом количестве физических устройств.
- Зависимость от версии Android: Новые версии NNAPI добавляют поддержку новых операций и улучшений, но старые устройства могут не получить обновлений. Это создает разрыв в возможностях между разными версиями ОС.
- Необходимость квантования: Для достижения максимальной производительности на DSP и NPU модели часто требуют квантования (перевода в целочисленный формат), что может приводить к небольшой потере точности.
Источники
- Android Developers Documentation. Neural Networks API.
- Google AI Blog. Introducing the Android Neural Networks API.
- TensorFlow Lite Documentation. Using the Neural Networks API.
- Документация по Core ML (Apple Developer).
- Документация по DirectML (Microsoft Learn).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →