Платформа и источник
Статья подготовлена по PDF производителя RKNN V2.5.0 и относится только к перечисленным в нём чипам и интерфейсам. Для платы ArmSoM сначала проверьте SoC, драйвер NPU, Toolkit/Runtime, SDK/BSP и версию ядра. Проверки на оборудовании ArmSoM не проводились; примеры и измерения оригинала не являются тестами ArmSoM.
Навигация по серии
- Платформы, заголовки и компоновка
- Владение памятью и общий/zero-copy процессы
- Устройство, контекст и флаги инициализации
- Запросы модели, тензоров и динамических форм
- Вход, выполнение, выход и динамические формы
- Тензоры, выделение памяти и синхронизация
- Матричное умножение и динамические формы
- Регистрация и атрибуты пользовательских операторов
- Коды состояния, тензоры, память и расширения
- Структуры матричного умножения
- Структуры операторов и миграция устаревших API
1. Обзор справочника
RKNN C API — интерфейсы языка C для RKNPU Runtime (библиотеки времени выполнения). Они позволяют использовать вычислительную мощность NPU для эффективного инференса моделей RKNN или матричного умножения. Здесь описаны функции, структуры данных и коды возврата RKNN C API.
1.1 Версия
Документ относится к RKNPU Runtime V2.5.0 (см. историю редакций оригинального PDF). Описанные интерфейсы основаны на V2.5.0.
1.2 Поддерживаемые платформы
Документ относится к следующим аппаратным платформам:
RV1103
RV1103B
RV1106
RV1106B
RV1126B
RK2118
RK3562
Серия RK3566
Серия RK3568
Серия RK3576
Серия RK3588
1.3 Заголовки и библиотека Runtime
По назначению RKNN C API делится на три части. Соответствие функций, определений структур данных и заголовочных файлов следующее:
- “rknn_api.h” определяет базовые интерфейсы и структуры данных для развёртывания модели RKNN.
- “rknn_matmul_api.h” определяет интерфейсы и структуры данных матричного умножения.
- “rknn_custom_op.h” определяет интерфейсы и структуры данных пользовательских операторов.
2. Компиляция и компоновка
При сборке приложения необходимо подключить заголовочный файл с функцией интерфейса и скомпоновать приложение с соответствующей библиотекой RKNPU Runtime для используемых аппаратной платформы и системы. Далее описаны заголовочные файлы RKNN C API и файлы библиотек времени выполнения.
2.1 Linux
- Для RK3562, серий RK3566/RK3568/RK3576/RK3588 и RV1126B библиотека RKNPU называется librknnrt.so и находится в
<sdk_path>/rknpu2/runtime, где<sdk_path>— путь к комплекту разработки Rockchip NPU.
- Для RV1106/RV1103/RV1106B/RV1103B библиотека RKNPU — librknnmrt.so в
<sdk_path>/rknpu2/runtime.
2.2 Android
На Android RKNN API можно вызывать двумя способами:
1) Приложение может непосредственно компоноваться с librknnrt.so.
2) На Android приложение компонуется с librknn_api_android.so, реализованной через HIDL.
Устройства Android, которые должны пройти CTS/VTS, должны использовать RKNN API на основе Android HIDL; librknn_api_android.so не включает матричное умножение и пользовательские операторы. Если CTS/VTS не требуется, рекомендуется напрямую использовать librknnrt.so, включающую обе эти функции: цепочка вызовов интерфейса короче и может обеспечивать лучшую производительность.
Код RKNN API через Android HIDL находится в vendor/rockchip/hardware/interfaces/neuralnetworks в Android SDK RK3562/RK3566/RK3568/RK3576/RK3588. После сборки системы создаются библиотеки RKNPU; приложению достаточно компоноваться с librknn_api_android.so, как показано ниже:
/vendor/lib/librknn_api_android.so
/vendor/lib/librknnhal_bridge.rockchip.so
/vendor/lib64/librknn_api_android.so
/vendor/lib64/librknnhal_bridge.rockchip.so
/vendor/lib64/rockchip.hardware.neuralnetworks@1.0.so
/vendor/lib64/rockchip.hardware.neuralnetworks@1.0-adapter-helper.so
/vendor/lib64/hw/rockchip.hardware.neuralnetworks@1.0-impl.so
/vendor/bin/hw/rockchip.hardware.neuralnetworks@1.0-service
Для отдельной повторной сборки этих библиотек также можно использовать следующую команду:
mmm vendor/rockchip/hardware/interfaces/neuralnetworks/ -j8
2.3 Платформа RK2118
Для RK2118 библиотека RKNPU находится в системном SDK RK2118. См. раздел «Prepare RK2118 SDK» документа «RKNN3_RK2118_Quick_Start.pdf».
Источник и редакционные примечания
Технические главы разделены по назначению. Код, идентификаторы и параметры сохранены. Китайская версия следует китайскому оригиналу; английская, русская и немецкая — английскому. В главы без иллюстраций вымышленные изображения не добавлены.
Оговорки оригинала: номера глав и примерные журналы сохранены; ранние версии SDK в журналах не являются версией этой статьи. Runtime переходит от главы 3 к 5 и повторяет номера запросов. Таблица rknn_init называет extend отключённым, но далее описывает user_key и общие веса. Текст о нативном динамическом выходе указывает RKNN_QUERY_CURRENT_OUTPUT_ATTR, пример — RKNN_QUERY_CURRENT_NATIVE_OUTPUT_ATTR. Некоторые описания native NHWC/NC1HWC2 смешивают вход и выход. Проверяйте фактические заголовки V2.5.0 и целевой SDK: поведение не подтверждено тестами. Ссылка RK2118 в оригинале называется RKNN3_RK2118_Quick_Start.pdf, а в текущем каталоге находится руководство RKNN2.
