Обратная разработка добавляет поддержку NPU RK3576 в открытый драйвер Rocket для основной ветки Linux

В 2024 году было отмечено, что открытый драйвер для NPU RK3588 от Tomeu Vizoso обеспечивал достойную производительность для обнаружения объектов. С тех пор был достигнут хороший прогресс, и теперь он известен как драйвер Rocket в основной ветке Linux .

Однако SoC Rockchip RK3576 пока не поддерживается драйвером Rocket в основной ветке, несмотря на схожий NPU. Хорошая новость в том, что Ga Hing Woo работает над поддержкой NPU Rockchip RK3576 в основной ветке Linux, используя стек драйвера Rocket, и протестировал обновления на Radxa ROCK 4D под управлением Linux 7.1-rc5. Это потребовало серьёзной работы по обратной разработке из-за скрытых регистров, не описанных в TRM.

Rockchip RK3576 open source NPU driver

Ga Hing Woo (также известный как Jiaxing Hu) прислал письмо с объяснением некоторых сложностей:

Одиночное int8 свертка теперь дает точное побайтовое совпадение с эталоном на CPU в открытом стеке. Чтобы этого достичь, потребовалось обратное проектирование вычислительных регистров, которые TRM полностью опускает (поиск «CNA», «CMAC» или «convolution» не дает ни одного результата во всех 4381 страницах).

Цепочные слои все еще зависают, и было потрачено время на выяснение причины, а не на догадки. Бит 16 исполнителя CNA/CORE/DPU никогда не включается для цепочечных задач, что сводится к состоянию под-MMIO секвенсора, невидимому для драйвера. Таким образом, это чистый отрицательный результат, а не заявляемое исправление.

Другой разработчик, MidG971, независимо столкнулся с той же проблемой на RK3568, подойдя к ней с другого чипа. Именно это подтолкнуло к написанию статьи вместо того, чтобы оставить это при себе.

Рассматриваемая работа — это высокотехническая научная статья под названием «Bringing Up the RK3576 NPU on Mainline Linux: A Byte-Exact Single-Task Path and a Falsification-First Negative Result on Chained-Task Compute». Каждое число в статье измерено, а не спроектировано. Вероятно, она будет понятна только тем, кто уже работал с NPU такого типа.

Исходный код и инструкции по запуску NPU RK3576 в основном ядре Linux на Radxa ROCK 4D можно найти на GitHub . Также была упакована среда выполнения RKNPU/RKLLM для запуска локальных LLM и vision на основном ядре ( Kiln ), чтобы показать, что патчи ядра успешно активируют драйвер вендора, даже если открытый драйвер Rocket еще не полностью готов для RK3576. Результаты на SBC ROCK 4D: Llama-3.2-1B около 13 ток/с, Qwen2.5-1.5B около 9 ток/с, MobileNet около 169 fps.

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

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

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

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

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