Открыть сервис

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) и аппаратным обеспечением устройства. Основные компоненты архитектуры:

  1. Приложение (Application): Разрабатывается с использованием фреймворка ML (например, TensorFlow Lite). Приложение загружает предварительно обученную модель (обычно в формате .tflite) и вызывает API для выполнения вывода (inference).
  2. NNAPI Runtime: Компонент операционной системы, который управляет планированием и выполнением запросов. Он получает от приложения описание модели (граф вычислений) и входные данные.
  3. Драйверы (Drivers): Аппаратно-зависимые модули, предоставляемые производителями чипов (Qualcomm, MediaTek, Samsung, HiSilicon и др.). Они реализуют интерфейс NNAPI для конкретного аппаратного ускорителя (GPU, DSP, NPU).
  4. Аппаратное обеспечение (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 →