RISC-V — перспективная открытая архитектура, не требующая royalty от производителей железа на её основе. Нужно отметить, что интерес к архитектуре RISC-V растёт намного быстрее, чем закрепляется её спецификация и идёт процесс принятия новых фич комитетом, а также дальнейшая реализация в железе и софте. Например, сейчас сложно найти предложение по CPU и совместимое с ним Linux ядро с поддержкой векторизации, хотя RVV 0.7.1 уже существует, и RVV 1.0 вот-вот его заменит. В нашем эксперименте трудоемкие вычисления перекладываются на внешнее устройство, поэтому сгодится и самый простой центральный процессор. В этой статье вы найдете подробные инструкции по использованию библиотек OpenVINO и OpenCV на RISC-V для запуска нейронных сетей с использованием акселератора. Цель материала — продемонстрировать гибкость решений на примере использования RISC-V CPU в качестве хоста для работы с нейросетевым ускорителем Intel Movidius Neural Compute Stick 2 (NCS2). Большая часть статьи состоит из инструкций по сборке под RISC-V. Конечно, это не самый творческий процесс, но мы верим, что со временем все они спрячутся под процессами CI/CD, как когда-то было с ARM-экосистемой. В данной статье поделимся двумя вариантами запуска готового приложения — через эмулятор QEMU и на плате MangoPi MQ-Pro. На QEMU запустим официальный образ Ubuntu 20.04 для RISC-V, а на плате MangoPi — совместимую Ubuntu 22.04 для AllWinner Nezha (ссылка). Нужно отметить, что MangoPi не богата на способы взаимодействия: WiFi-антенна, пришедшая в комплекте, не хочет помещаться в соответствующий разъем, официально рекомендуемая Tina Linux не бутится, а ядро Ubuntu для AllWinner Nezha не поддерживает WiFi/Bluetooth. Дополнительно потребуется USB хаб или адаптер с Type-C на USB, чтобы подключить Movidius стик. Сам NCS2 это со-процессор Myriad-X в форм-факторе USB флешки. Архитектура предлагает набор аппаратных реализаций наиболее вычислительно трудоемких операций для исполнения слоев нейронных сетей (например, сверточных). OpenVINO — проект от Intel, объединяющий оптимизированные примитивы для запуска нейронных сетей. Кроме Intel Architecture (CPU, GPU, VPU) проект с недавнего времени развивает плагины для ARM и NVIDIA. Потребуется дополнительный CMake файл, который пока не находится в главном репозитории. Сохраните его с названием riscv64.toolchain.cmake. Внутри ничего особенного, кроме поиска компилятора и настроек, необходимых для кросс-компиляции.  Клонирование проекта OpenVINO: Установка кросс-компилятора: При использовании этих инструкций на Ubuntu 22.04 потребуется поставить несколько дополнительных пакетов: libusb под RISC-V, которая используется OpenVINO для обмена данными с Movidius стиком,  а также зависимостей, необходимых для Python оберток. Их можно скачать с помощью apt-get, но перед этим добавить новую архитектуру: Затем почему-то возникает ошибка при вызове update, которая решается корректировкой определенного файла. Такая команда дублирует каждую строку для amd64 и riscv64 архитектур: Установка пакетов: Сборка с помощью CMake с указанием расположения библиотеки libusb: OpenCV не является обязательной зависимостью OpenVINO, а потребуется нам в приложении для работы над данными. Так же собираем вместе с Python обертками.  Если вы пока ждёте свою RISC-V борду, но уже заинтересованы в экспериментах, попробуйте вариант с эмулятором QEMU.  Установите QEMU и необходимые зависимости: Скачайте официальный образ Ubuntu: Установите udev правила на хостовой машине, чтобы можно было работать с NCS. Данный шаг придется повторить и внутри QEMU: Запуск системы. Важным является добавление двух productId, чтобы пробросить USB-устройство внутрь эмулятора: 2485, соответствующий Movidius стику в режиме ожидания и f63b, который присваивается занятому вычислениями стику в процессе работы приложения. Повторите установку udev правил на USB стик, но уже внутри QEMU. Возможно, потребуется перезапуск. Эмулятор готов, и на нём можно использовать приложение, описанное ниже. Необходимо переместить собранные OpenVINO и OpenCV на плату MangoPi MQ-Pro с помощью SSH (или скопировать на SD карту). Затем, уже на девайсе, доустановить зависимости. В качестве end2end примера можно сделать Telegram бота для стилизации фотографий. Готовые файлы модели можно скачать по ссылкам: the_scream_style_transfer.xml и the_scream_style_transfer.bin. Остается выставить переменные окружения и запустить Python скрипт с использованием токена созданного бота (инструкцию можно легко найти).  Мы посчитали важным опубликовать эту достаточно подробную инструкцию, чтобы продемонстрировать одну из возможностей платформы на данный момент. Ну а если тема окажется востребованной, продолжим делиться другими материалами по работе с RISC-V.   Нейросетевой хирург