Обратная разработка Allwinner V831 NPU (Neural Processing Unit)


Когда Sipeed представила комплект для разработки MAIX-II Dock AIoT vision, компания обратилась за помощью к сообществу, чтобы те помогли в обратной разработке Allwinner V831 NPU и создании набора ИИ инструментов с открытым исходным кодом на основе NCNN.

Sipeed уже расшифровал регистры NPU, а Джасбир (Jasbir) предложил помощь на следующем этапе. Он уже получил бесплатную плату с образцами и готов опробовать её. Был достигнут хороший прогресс, и теперь можно обнаруживать такие объекты, как лодка, с помощью образца распознавания объектов cifar10.

Allwinner V831 NPU основан на индивидуализированной реализации архитектуры с открытым исходным кодом NVIDIA Deep Learning Accelerator (NVDLA). Allwinner (через Sipeed) попросил удалить эту информацию из первоначального обзора, и после перепроектирования, Джасбир сделал следующие ключевые выводы:

  1. Тактовая частота NPU по умолчанию составляет 400 МГц, но может быть установлена в диапазоне от 100 до 1200 МГц.
  2. NPU реализован с конфигурацией nv_small (малая модель NV) и полагается на общую системную память для всех операций с данными.
  3. Поддерживаются int8 и int16, причем int8 предпочтительнее для скорости и ограниченной встроенной памяти (64 МБ)
  4. 64 MAC (Atomic-C * Atomic-K)
  5. Регистр с отображением в память, программируемый из пользовательского пространства
  6. При обращении к расположениям входных/выходных данных требуются местоположения физических адресов, что означает, что необходимо выделить память ядра и получить физические адреса при доступе из пользовательского пространства.
  7. Входные/выходные данные имеют структуру, аналогичную частным форматам NVDLA, поэтому такие форматы, как nhwc или nchw, должны быть преобразованы перед подачей в NPU.

Эти результаты позволили ему адаптировать код для демонстрации cifar10 из библиотеки Arm CMSIS_5 NN, удалив при этом все двоичные файлы Allwinner с закрытым исходным кодом. Вы найдете исходный код в репозитории v831-npu на Github, а также можете проверить пост Джасбира, чтобы узнать, как попробовать его, если у вас под рукой есть плата Allwinner V831.

Текущий код поддерживает прямые свертки, сложение смещения, relu / prelu, поэлементные операции и максимальное/среднее объединение, и есть еще много работы, которая должна быть выполнена, включая разработку утилиты преобразования входных/выходных данных и интеграцию в существующий фреймворк.

Хорошей новость заключается в том, что эта работа также должна принести пользу другим функциям платформы — ускорителю AI на основе NVDLA, включая Beagle V SBC.

Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 vote
Article Rating
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 Комментарий
Inline Feedbacks
View all comments