Rockchip · AI & Linux Hub

AI-инференс

RKNN-Toolkit2 Python API V2.5.0 — Точность, производительность, память и запросы устройств

RKNN-Toolkit2 Python API V2.5.0 — Точность, производительность, память и запросы устройств | Полные параметры, примеры и ограничения платформ

· ArmSoM · 7 мин чтения

Платформа и источник

Статья подготовлена по PDF производителя RKNN V2.5.0 и относится только к перечисленным в нём чипам и интерфейсам. Для платы ArmSoM сначала проверьте SoC, драйвер NPU, Toolkit/Runtime, SDK/BSP и версию ядра. Проверки на оборудовании ArmSoM не проводились; примеры и измерения оригинала не являются тестами ArmSoM.

Навигация по серии

8 Оценка точности, производительности и памяти API

8.1 Анализ точности квантования

Интерфейс выполняет инференс квантованной модели и формирует выходы каждого слоя для анализа точности квантования.

API accuracy_analysis
Описание Выполнить инференс квантованной модели и создать снимок, то есть выгрузить данные тензоров каждого слоя. Для вычисления ошибки квантования выгружаются оба типа данных: fp32 и quant.
Примечания:
1. Интерфейс вызывается только после build или hybrid_quantization_step2.
2. Если target равно None, а исходная модель уже квантована (модель QAT), вызов завершится ошибкой.
3. Метод квантования соответствует настройке config.
Параметр inputs: Список путей к изображениям (jpg/png/bmp/npy).
Параметр output_dir: Каталог вывода всех данных снимка. По умолчанию ‘./snapshot’.
Если target не задан, в output_dir создаются:
- Каталог simulator: результаты каждого слоя симулятора при полном выполнении квантованной модели (выход преобразован в float32).
- Каталог golden: результаты каждого слоя симулятора при полном выполнении модели с плавающей точкой.
- error_analysis.txt: косинусное расстояние (entire_error и single_error) между результатом каждого слоя квантованной модели в симуляторе и моделью с плавающей точкой в симуляторе при полном вычислении квантованной модели. Различие entire_error/single_error заключается в том, поступает ли вход каждого слоя из квантованной модели или модели с плавающей точкой. Подробнее см. error_analysis.txt.
Если target задан, в output_dir дополнительно создаются:
- Каталог runtime: результаты каждого слоя при полном выполнении квантованной модели на NPU (выход преобразован в float32).
- error_analysis.txt: дополнительно записывается косинусное расстояние (entire_error) между результатами каждого слоя симулятора и NPU при полном вычислении квантованной модели. Подробнее см. error_analysis.txt.
Параметр target: Целевая аппаратная платформа. Поддерживаются ‘rv1103’, ‘rv1103b’, ‘rv1106’, ‘rv1106b’, ‘rv1126b’, ‘rk3562’, ‘rk3566’, ‘rk3568’, ‘rk3576’ и ‘rk3588’. По умолчанию “None”.
Если target задан, получаются выходы каждого слоя NPU и анализируется их точность.
Параметр device_id: Идентификатор устройства. При подключении нескольких устройств к ПК его необходимо указать; значение получают через list_devices. По умолчанию “None “.
Возвращаемое значение 0: Успешно.
Возвращаемое значение -1: Ошибка.

Пример кода:

# Accuracy analysis
ret = rknn.accuracy_analysis(inputs=['./dog_224x224.jpg'])

8.2 Оценка производительности модели

API eval_perf
Описание Оценить производительность модели.
Модель должна выполняться на RV1103 / RV1103B / RV1106 / RV1106B / RV1126B / RK3562 / RK3566 / RK3568 / RK3576 / RK3588, подключённом к ПК. Если при init_runtime параметр perf_debug равен False, аппаратная информация о производительности содержит только полное время выполнения модели. При perf_debug = True подробно измеряется и время каждого слоя.
Параметр is_print: Выводить ли информацию о производительности. По умолчанию True.
Параметр fix_freq: Фиксировать ли аппаратную частоту. По умолчанию True.
Возвращаемое значение perf_result: Информация о производительности (строки).

Пример кода:

# Evaluate model performance
perf_detail = rknn.eval_perf()

8.3 Оценка использования памяти

API eval_memory
Описание Получить потребление памяти при выполнении модели на аппаратной платформе.
Модель должна выполняться на подключённом к ПК RV1103 / RV1103B / RV1106 / RV1106B / RV1126B / RK3562 / RK3566 / RK3568 / RK3576 / RK3588.
Параметр is_print: Выводить ли результаты оценки памяти в стандартном формате. По умолчанию True.
Возвращаемое значение memory_detail: Подробные сведения об использовании памяти в формате словаря.
Пример данных:
{
‘weight_memory’: 3698688,
‘internal_memory’: 1756160,
‘other_memory’: 484352,
‘total_memory’: 5939200,
}
- ‘weight_memory’ — объём памяти весов модели.
- ‘internal_memory’ — память внутренних тензоров модели.
- ‘other_memory’ — память других тензоров модели.
- ‘total_memory’ — общий объём памяти модели, сумма памяти весов, внутренних тензоров и прочей памяти.

Пример кода:

# eval memory usage
memory_detail = rknn.eval_memory()

Для примера examples/caffe/mobilenet_v2 ниже показан исходный вывод использования памяти на RK3588. Это данные оригинала, не измерения ArmSoM.

======================================================
           Memory Profile Info Dump
======================================================
NPU model memory detail(bytes):
    Weight Memory: 3.53 MiB
    Internal Tensor Memory: 1.67 MiB
    Other Memory: 473.00 KiB
    Total Memory: 5.66 MiB

INFO: When evaluating memory usage, we need consider
the size of model, current model size is: 4.09 MiB
======================================================

8.4 Список устройств

API list_devices
Описание Перечислить подключённые RV1103 / RV1103B / RV1106 / RV1106B / RV1126B / RK3562 / RK3566 / RK3568 / RK3576 / RK3588.
Примечание: поддерживаются два режима подключения устройств — ADB и NTB. При подключении нескольких устройств их режимы должны совпадать.
Параметр None.
Возвращаемое значение Возвращает списки adb_devices и ntb_devices. Если к ПК не подключено ни одного устройства, возвращает два пустых списка.

Пример кода:

rknn.list_devices()

Пример списка устройств:

*************************
all device(s) with adb mode:
VD46C3KM6N
*************************

9 API запроса версии SDK

API get_sdk_version
Описание Получить версии API и драйвера используемого SDK.
Примечание: перед вызовом необходимо загрузить модель и инициализировать среду выполнения. API применяется только на RV1103 / RV1103B / RV1106 / RV1106B / RV1126B / RK3562 / RK3566 / RK3568 / RK3576 / RK3588.
Параметр None.
Возвращаемое значение sdk_version: Версии API и драйвера. Тип данных — строка.

Пример кода:

# Get SDK version
sdk_version = rknn.get_sdk_version()
print(sdk_version)

Пример вывода версии SDK:

==============================================
RKNN VERSION:
    API: 1.5.2 (8babfea build@2023-08-25T02:31:12)
    DRV: rknn_server: 1.5.2 (8babfea build@2023-08-25T10:30:12)
    DRV: rknnrt: 1.5.3b13 (42cbca6f5@2023-10-27T10:13:21)
==============================================

Источник и редакционные примечания

Технические главы разделены по назначению. Код, идентификаторы и параметры сохранены. Китайская версия следует китайскому оригиналу; английская, русская и немецкая — английскому. В главы без иллюстраций вымышленные изображения не добавлены.

Примечания: журналы с SDK 1.5.2 сохранены как исторические примеры, а не измерения V2.5.0. Ячейка Python для Ubuntu20.04 различается: китайский текст 3.8/3.9, английский 3.8/3.8; аналогично для Debian11; в разделе ARM64 Debian всё ещё помечен x64. Значения сохранены; проверяйте фактический установочный пакет. V2.5.0 добавляет главу C++ codegen и уточняет квантование и стратегии памяти; параметры старой версии не подменяют новый источник.

RKNN-Toolkit2 · ArmSoM documentation

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