Rockchip · AI & Linux Hub

AI-инференс

RKNN2 SDK V2.5.0 · Процесс разработки и выбор интерфейса

RKNN2 SDK V2.5.0 · Процесс разработки и выбор интерфейса · Полная серия руководства разработчика

· ArmSoM Editorial · Rockchip source documentation · 5 мин чтения

Справочник платформы по руководству Rockchip RKNN2 SDK V2.5.0. Рассматриваются только перечисленные в исходном документе SoC, Linux/Android Runtime и Toolkit. Возможности действуют при указанных в каждом разделе условиях для чипа, SDK, драйвера и ядра и не означают поддержку всех плат ArmSoM. Перед развёртыванием проверьте BSP, драйвер NPU, Runtime и версию модели конкретной платы. Проверка на оборудовании ArmSoM не проводилась; журналы, показатели и примеры взяты из оригинала.

Источники и вычитка: китайская версия следует китайскому V2.5.0 (182 страницы), английская, русская и немецкая — английскому V2.5.0 (208 страниц). Различия оригиналов сохранены; сведения старой версии не выдаются за новые. Китайские рисунки взяты из китайского PDF, остальные — из английского, включая отдельно извлечённые векторные схемы. Номера разделов и формул сохранены. Некоторые ссылки используют старую нумерацию; примеры динамической формы содержат «1224+140=264», утверждения о TP_NORM противоречат друг другу, а init()/rknn.val_perf() отличаются от последующих описаний API. Эти сомнения сохранены: перед выполнением проверьте реальные заголовки и справочник V2.5.0. Код и параметры сохранены, разрывы PDF и продолжения таблиц восстановлены.

Rockchip RKNN2 SDK V2.5.0

RKNN2 SDK V2.5.0 · 3/22

1. Программный стек и основные понятия

2. Среда разработки, версии и подключение платы

Процесс разработки и выбор интерфейса

4. Преобразование моделей и редактирование ONNX

5. Квантование, гибридное квантование и QAT

6. Инференс, оценка точности, производительности и памяти

7. Жизненный цикл Runtime, размещение данных и память

8. Нулевое копирование и ограничения входов/выходов

9. Развёртывание через C API и генерация кода

10. Развёртывание Python через Toolkit Lite2

11. Matmul API и размещение матриц

12. Многоядерная настройка NPU и производительность

13. Модели с динамической формой и развёртывание

14. Многопакетный инференс

15. SRAM NPU RK3588/RK3576

16. Согласованность кэша и разреженный инференс

17. Пользовательские операторы: Python и C API

18. Развёртывание зашифрованных моделей

19. Диагностика точности

20. Анализ производительности и оптимизация сети

21. Анализ, совместное использование и повторное использование памяти

22. Вопросы, обработка ошибок и справочные ресурсы

1.3 Процесс разработки и выбор интерфейса

1.3.1 Общий процесс разработки модели

Общие этапы разработки RKNN показаны на следующей схеме. Процесс состоит из преобразования модели, её оценки, затем развёртывания и запуска на плате.

Рисунок 1-5. Процесс разработки RKNN

Рисунок 1-5. Процесс разработки RKNN

1 Преобразование модели

На этом этапе исходная модель глубокого обучения преобразуется в RKNN для эффективного инференса на RKNPU. Этап включает пять шагов:

a. Получение исходной модели: получите или обучите модель. Рекомендуются распространённые фреймворки, например ONNX, PyTorch или TensorFlow.

b. Настройка модели: задайте в RKNN-Toolkit2 необходимые параметры нормализации, квантования и целевой платформы.

c. Загрузка модели: импортируйте её через интерфейс загрузки, соответствующий фреймворку.

d. Построение модели: вызовите rknn.build(); при необходимости включите квантование для повышения аппаратной производительности инференса.

e. Экспорт модели: сохраните модель в файл .rknn через rknn.export_rknn() для последующего развёртывания.

Подробнее см. раздел 2.1 «Преобразование обычной модели».

2 Оценка модели

Цель этого этапа — оценить точность результатов, производительность инференса и использование памяти. Основные шаги:

a. Отладка подключённой модели: через Python подключитесь к RKNPU, выполните инференс и проверьте точность. Этап охватывает обработку входа и выхода для обеспечения правильной работы модели на плате.

b. Оценка точности: rknn.accuracy_analysis() сравнивает результаты квантованной модели и модели с плавающей точкой для анализа источников ошибки квантования.

c. Оценка производительности: rknn.eval_perf() анализирует инференс на RKNPU и помогает оптимизировать структуру модели и ускорить выполнение.

d. Оценка памяти: rknn.eval_memory() показывает использование памяти модели на RKNPU и помогает оптимизировать структуру и уменьшить расход памяти.

Подробнее см. 2.3 «Оценка модели», 3.2 «Развёртывание обычных моделей через C API» и

3.3 «Развёртывание через Toolkit Lite Python».

3. Развёртывание и выполнение на плате:

Этот этап охватывает фактическое развёртывание и запуск модели и обычно состоит из следующих шагов:

a. Инициализация: загрузите модель RKNN на RKNPU и подготовьте предварительную обработку.

b. Предварительная обработка: загрузите входные данные на RKNPU и подготовьте инференс.

c. Инференс: передайте данные модели и получите результаты выполнения.

d. Последующая обработка: обработайте результаты инференса и передайте их приложению.

e. Освобождение модели: после инференса освободите ресурсы модели, чтобы она могла использоваться другими задачами.

Подробнее см. 3.3 «Развёртывание через Toolkit Lite Python».

Эти три этапа образуют полный процесс RKNN: преобразование, отладку, оценку и эффективное развёртывание моделей ИИ на RKNPU.

1.3.2 Выбор интерфейса

RKNN2 SDK предоставляет два способа вызова модели на плате; выбор зависит от сценария:

Способ Язык Применение
RKNN Runtime (C API) C / C++ Промышленное развёртывание, чувствительные к производительности задачи
RKNN-Toolkit Lite2 (Python API) Python Быстрая проверка на плате, разработка прототипов

Различия:

Производительность: C API обеспечивает максимальную производительность; Toolkit Lite несколько медленнее из-за накладных расходов оболочки Python.

Удобство разработки: Toolkit Lite проще — Python и отсутствие кросс-компиляции. C API требует кросс-компиляции и интеграции в приложение платы.

Полнота функций: C API поддерживает все расширенные возможности — zero-copy, несколько ядер NPU, матричное умножение, динамические формы, SRAM, шифрование моделей и другие. Toolkit Lite ориентирован на быструю проверку на плате и имеет меньше расширенных функций.

Рекомендации по выбору:

Промышленное развёртывание или чувствительность к производительности: используйте C API для оптимальной скорости, полного набора функций и средств безопасности, включая развёртывание зашифрованной модели.

Проверка на плате или прототипирование: используйте Toolkit Lite. Кросс-компиляция не нужна; преобразованная .rknn-модель позволяет быстро проверить результаты на плате.

Примечание: подробное использование интерфейсов описано в 3.2 «Развёртывание обычных моделей через C API» и 3.3 «Развёртывание через Toolkit Lite Python».

1.3.3 Результаты преобразования и файлы развёртывания

После преобразования создаются следующие файлы для развёртывания:

Файл/каталог Описание
.rknn Файл модели RKNN, содержащий структуру и веса
Пример развёртывания на C++ (необязательно) Создаётся параметром cpp_gen_cfg в rknn.export_rknn() либо через rknn.codegen(); пригоден для прямой проверки производительности и точности, а также дальнейшей разработки

Примечание: RKNN2 экспортирует единый файл .rknn со структурой и весами модели. Его нужно передать на плату: C API загружает модель через rknn_init(), а Toolkit Lite2 — через init() согласно исходному тексту. Файлы для зашифрованного развёртывания описаны в 4.2.2 «Развёртывание зашифрованной модели».

Другие статьи по теме → · Учебные маршруты →