Когда Sipeed представила комплект для разработки MAIX-II Dock AIoT vision, компания обратилась за помощью к сообществу, чтобы те помогли в обратной разработке Allwinner V831 NPU и создании набора ИИ инструментов с открытым исходным кодом на основе NCNN.
Sipeed уже расшифровал регистры NPU, а Джасбир (Jasbir) предложил помощь на следующем этапе. Он уже получил бесплатную плату с образцами и готов опробовать её. Был достигнут хороший прогресс, и теперь можно обнаруживать такие объекты, как лодка, с помощью образца распознавания объектов cifar10.
Allwinner V831 NPU основан на индивидуализированной реализации архитектуры с открытым исходным кодом NVIDIA Deep Learning Accelerator (NVDLA). Allwinner (через Sipeed) попросил удалить эту информацию из первоначального обзора, и после перепроектирования, Джасбир сделал следующие ключевые выводы:
- Тактовая частота NPU по умолчанию составляет 400 МГц, но может быть установлена в диапазоне от 100 до 1200 МГц.
- NPU реализован с конфигурацией nv_small (малая модель NV) и полагается на общую системную память для всех операций с данными.
- Поддерживаются int8 и int16, причем int8 предпочтительнее для скорости и ограниченной встроенной памяти (64 МБ)
- 64 MAC (Atomic-C * Atomic-K)
- Регистр с отображением в память, программируемый из пользовательского пространства
- При обращении к расположениям входных/выходных данных требуются местоположения физических адресов, что означает, что необходимо выделить память ядра и получить физические адреса при доступе из пользовательского пространства.
- Входные/выходные данные имеют структуру, аналогичную частным форматам 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.
Оригинал статьи вы можете прочитать здесь.