Обзор AI-бокса Radxa Fogwise Airbox – Часть 2: Llama3, Stable Diffusion, imgSearch, Python SDK, YOLOv8

После изучения оборудования Radxa Fogwise Airbox в первой части обзора в прошлом месяце, теперь представилась возможность протестировать AI-бокс на базе SOPHGO SG2300x с предустановленным образом Ubuntu 20.04 Server, содержащим CasaOS, а также контейнеры Stable Diffusion и Llama3.

Вторую часть обзора начнём с проверки предустановленного генератора изображений Stable Diffusion и ИИ-чата Llama3, затем вручную установим в веб-интерфейсе CasaOS поисковую систему imgSearch на базе ИИ, протестируем Python SDK через командную строку и запустим модели компьютерного зрения Resnet50 и YOLOv8.

Radxa Airbox Fogwise review

Установка ОС на Radxa Fogwise Airbox

В прошлом месяце Radxa предоставляла только базовый образ Ubuntu Server 20.04. Сейчас компания улучшила документацию и подготовила два образа для Radxa Fogwise Airbox:

  • Базовый образ (1.2 ГБ) – На основе Ubuntu Server 20.04; содержит только Sophon base SDK и backend.
  • Полный образ (9.5 ГБ) – Дополнен фронтендом Radxa LLM, CasaOS и демо для распространённых LLM.

Новичкам рекомендуется выбрать второй вариант, несмотря на большее время загрузки, так как он позволяет сразу тестировать систему без дополнительных настроек. Именно этот образ использовался (Radxa Airbox B5 0606), а для записи на карту microSD объёмом 32 ГБ применялся USBImager . После установки карты в Fogwise Airbox процесс контролировался через последовательный консольный интерфейс, как в первой части обзора.

По завершении установки открывается TCP-порт 81 airbox.local, позволяющий получить доступ к панели CasaOS с использованием radxa и radxa в качестве учётных данных.

Fogwise Airbox CasaOS

Использование Radxa Fogwise Airbox с CasaOS

CasaOS Stable Diffusion Llama3

Интерфейс отображает системную информацию (дополнительно подключён USB-накопитель), но ключевым является наличие предустановленных Stable Diffusion и Llama3. Стоит рассмотреть смену имени пользователя и пароля CasaOS, а также доступ к Linux-терминалу через SSH (логин linaro, пароль linaro) для изменения учётных данных…

CasaOS change username password

Дополнительная системная информация из inxi:

Доступно лишь 2.99 ГБ ОЗУ, несмотря на 16 ГБ в системе. Это обусловлено разделением памяти между NPU (нейропроцессор), VPU (видеопроцессор) и VPP (блок графического ускорения). Настройки проверяются утилитой memory_edit:

Конфигурация оставляет 4096 МБ для системы через device tree. При необходимости параметры изменяются скриптом:

Текущая конфигурация памяти не менялась, так как она оптимальна для используемых ИИ-моделей.

Тестирование Stable Diffusion

При нажатии на иконку Stable Diffusion в CasaOS требуется время на запуск контейнера (1-2 минуты). Первоначальные попытки подключения через Firefox могут завершаться ошибкой до завершения инициализации.

Gradio Stable Diffusion Select Model Controlnet

Веб-интерфейс Stable Diffusion построен на Gradio , что объясняет название окна. На первом этапе выбираются Model и Controlnet с последующим нажатием Load Model , хотя варианты выбора ограничены одним пунктом в каждом меню. После загрузки модели (около 1 минуты) можно использовать текстовый генератор изображений. Тестирование начато с примеров, указанных в нижней части интерфейса, включающих prompt:

1girl, хвостик, белые волосы, фиолетовые глаза, средняя грудь, ключица, цветы и лепестки, пейзаж, фон, роза, абстракция

и негативный промпт:

уродливый, плохая детализация, нарушенная анатомия

плюс различные параметры, включая силу шумоподавления и шкалу CFG (классификаторно-свободного управления) .

Radxa Fogwise Airbox Stable Diffusion example

Создание изображения заняло около 7 секунд. Затем был опробован собственный текстовый промпт для генерации изображения пингвина, занимающегося серфингом на пляже с пальмами.

Local Stable Diffusion Surfing Pengium

Генерация также заняла от 5 до 7 секунд. Добавление входного изображения может быть интересным и позволяет лучше понять параметры силы шумоподавления и шкалы CFG. Вся обработка выполняется локально, нет необходимости беспокоиться о размещении личных фотографий в сети. Для теста было использовано стоковое фото с пожилыми людьми.

Stable Diffusion Image Test

Сила шумоподавления установлена на минимум для сохранения большей части исходного изображения, а шкала CFG — на 0 для обеспечения гибкости. Результирующее изображение очень близко к оригиналу.

Stable Diffusion Increase Denoising Strength

При увеличении силы шумоподавления и настройке шкалы CFG для достижения приемлемого результата… Stable Diffusion по-прежнему использует входные данные как ориентир, но получает большую свободу при создании фото.

Замечено, что когда люди занимают малую площадь на фото, результаты выглядят неидеально. Попробуем другое изображение.

Make people younger stable diffusion

Так лучше. Увеличение силы шумоподавления создает изображения, всё сильнее отличающиеся от оригинала. Шкала GFC может порождать “монстров” с забавными пальцами и физическими аномалиями. Все тесты завершались за 5–10 секунд.

Llama3 на Fogwise Airbox

Пришло время остановить контейнер Stable Diffusion и запустить Llama3. Интерфейс предоставляет текстовое поле и кнопку отправки внизу страницы. Был задан вопрос, известно ли Llama3 что-либо о CNX Software.

Radxa Fogwise Airbox Llama3 Ответ в основном верно описывает деятельность CNX Software, хотя начальный год указан ошибочно. Как сообщали (в X), не следует ожидать от Llama3 точной информации. Видимо, это своего рода арт-проект 🙂

Веб-интерфейс не отображает метрики производительности, поэтому для демонстрации скорости рендеринга была сделана запись экрана в Ubuntu.

Затем Llama3 попросили перевести относительно короткий текст на английский, но генерация прервалась с предупреждением “достигнута максимальная длина, Llama3 очистит всю историю”.

Llama3 warning reach the maximal length

После остановки контейнера ограничения памяти были изменены с 256 до 2048, и Llama3 перезапущена.

CasaOS Llama3 change memory limit

Однако проблема повторилась. В Radxa пояснили возможность корректировки:

Текущая реализация Llama3 имеет фиксированную длину ввода из-за архитектуры TPU (512 токенов). Если общий ввод + вывод > 512, модель очищает историю. Для увеличения длины можно скомпилировать версию на 1024+ токена по инструкции: https://github.com/sophgo/LLM-TPU/tree/main/models/Llama3 (на китайском), но это увеличит время вывода. Альтернативно — отключить историю через флаг –enable_history=False.

Данная настройка недоступна в CasaOS, поэтому позже будет опробована через командную строку.

Установка и запуск imgSearch в CasaOS

До сих пор использовались только предустановленные приложения. Но есть возможность установить дополнительные приложения вручную , включая “Radxa whisper”, “Radxa ImageSearch” и “Radxa chatdoc”. Выбрана реализация поиска изображений imgSearch.

Сначала нажимаем иконку “+” и выбираем “Install a customized app”.

CasaOS Install Customized App Затем указываем параметры Docker-образа:

  • Docker Image – radxazifeng278/radxa_imgsearch_app:0.1.0
  • Название – Image_Search
  • Порт веб-интерфейса – 9007 (можно выбрать любой свободный TCP-порт)
  • Порт хоста – 9007
  • Порт контейнера – 8501
  • Устройства хоста – /dev
  • Устройства контейнера – /dev
  • Ресурсы CPU – Средние

Radxa Fogwise Airbox Image Search

Radxa Fogwise Airbox Image Search installation Нажимаем “Install” для запуска установки, которая занимает несколько секунд.

CasaOS Install App

Появилось новое приложение “Image_Search”.

CasaOS New App Installed

Мы можем запустить приложение, нажав на него, однако при первой попытке оно зациклилось, бесконечно отображая статус «Running».

Airbox ImgSearch fails

Проверив журнал в Ubuntu 20.04, видны ошибки нехватки памяти:

В журнале CasaOS также видно, что процесс постоянно завершается и перезапускается.

CasaOS log

Решение заключается в изменении ограничения памяти в настройках приложения. Я установил значение 2048.

CasaOS app Increase memory limit После сохранения параметров Docker-контейнер переустанавливается, и на этот раз приложение запускается корректно:

Radxa Fogwise Airbox imgSearch running

Изначально планировалось выбрать директорию на жестком диске Radxa Fogwise Airbox AI Box, но реализация требует ручной загрузки списка файлов. Как пояснили, фреймворк Steamlit в этой демонстрации не поддерживает виджет загрузки из директории. Тем не менее, создана галерея «Test 1» с тремя тестовыми фото, которые обработались за несколько секунд.

imgSearch Process Files

Однако выполнение теста прервалось ошибкой: «could not open ./results/EN/Test 1/index.faiss for reading: No such file or directory».

imgSearch with Airbox file missing

Проверка директории results/EN в терминале контейнера показала, что папка «Test 1» пуста.

imgSearch No Folder

Предположив влияние пробела в названии галереи, имя изменено на «test2». После загрузки нескольких изображений процесс завершился успешно.

imgSearch Airbox success

При создании галереи «CNXSoftware» с 4000 изображений 2023 года процесс завис. Ограничившись сотней файлов, удалось найти по запросу «block diagram» релевантные результаты.

imgSearch Airbox block diagram

Тестирование Python Virtual Environment на Fogwise Airbox

Остановив все контейнеры CasaOS, переходим к более гибкой Python Virtual Environment для продолжения работы с Llama3.

Изначальная попытка в корневом разделе (/) вызвала нехватку места.

Переключение на 25-гигабайтный раздел «data» решило проблему. Для комфортной работы с большими ИИ-моделями рекомендуется установить в Fogwise Airbox SSD M.2 2230 NVMe, чтобы избежать постоянного перемещения файлов.

Загружаем демо Llama3 для Python:

Модель Llama3 8B скачивается командой:

Настраиваем окружение и устанавливаем зависимости:

Запускаем демо Llama3 в терминале (примечание: появление приглашения займет некоторое время):

Задаем аналогичный предыдущему тесту вопрос:

Скорость генерации AI Box составляет 9.566 токенов/с. Для воспроизведения демо Gradio из CasaOS используем скрипт web_demo.py:

Python Environment Llama3 Gradio demo

Работает. Ограничение в 512 байт сохраняется при обоих методах:

Увеличение лимита ответов Llama3

Проверим возможность повышения лимита до 1024 и его влияние на производительность. Изначально инструкции выполнялись на ноутбуке Ubuntu 22.04 (Intel Core i5-13500H, 16 ГБ ОЗУ, 26 ГБ свободного места). Однако в заключении указано:

Генерация bmodel занимает 2+ часа. Требуется 64 ГБ ОЗУ и 200+ ГБ дискового пространства во избежание ошибок OOM или нехватки места.

Данные условия невыполнимы. Но требуемая система найдена — встраиваемый компьютер Cincoze DS-1402 с Intel Core i9-12900E, 64 ГБ DDR5 и 300-гигабайтным разделом Ubuntu. Дальнейшие действия выполняются на этой x86-машине.

Устанавливаем компилятор:

Запрашиваем доступ к модели Llama3, заполнив форму на https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct/tree/main (ручная модерация занимает ~1 день). Предварительно ставим git-lfs:

Генерируем токен с разрешением «Read access to contents of all public gated repos you can access» и выполняем:

Вводим логин и токен для загрузки. Операция выполнена в корневой директории пользователя.

Попытка использовать Python 3.12 (предустановлен в Ubuntu 24.04) провалилась из-за несовместимости с требуемым Torch-1.12.0. Установлен Python 3.10 через miniconda3:

После перезагрузки в приглашении отображается (base), подтверждая использование Python 3.10:

Следуя инструкциям Radxa, создаем виртуальное окружение в LLM-TPU/models/Llama3:

Теперь скопируйте modeling_llama.py в библиотеку transformers внутри venv2 и установите несколько дополнительных зависимостей (видимо пропущенных в requirements.txt):

Нам потребуется отредактировать compile/files/Meta-Llama-3-8B-Instruct/config.json с выбранной длиной контекста:

и скопировать файл в директорию Llama3 от Huggingface:

Теперь сгенерируйте onnx-файл, используя загруженную Llama3 и длину 1024 байта:

Этот этап занял чуть более 6 минут:

Следующим шагом будет выход из виртуального окружения Python.

Теперь можно начать компиляцию. После выхода из Docker и перезагрузки Cincoze DS-1402, компиляция должна выполняться в Docker. Необходимо повторно подключиться, загрузить настройки окружения и запустить компиляцию:

Появятся предупреждения о проверке onnx-модели, но их можно проигнорировать:

На моей системе этот этап завершился менее чем за 40 минут:

Скопируем новую модель на Fogwise Airbox:

После завершения задач на Cincoze DS-1402 продолжим работу на Fogwise Airbox. Сначала протестируем модель:

Результаты выглядят приемлемо, но можно запустить демо в терминале:

Функционирует корректно:

Однако заметно снижение скорости до ~7.2 токенов в секунду. При переводе параграфов на тайском достигается новый предел в 1024 байта, но прогресс есть:

Radxa Model Zoo – Resnet50 и YOLOV8

Для финального теста следуя инструкциям установил Radxa Model Zoo и запустил 8-битную целочисленную модель Resnet50 (INT8) (также доступны INT16 и FP32). Возвращаемся в терминал Fogwise Airbox:

Grace Hopper
Grace Hopper

Снова настраиваем виртуальное окружение Python и устанавливаем зависимости:

Предоставлены два примера: с использованием OpenCV и SAIL API , а также с SAIL и обработкой “BMVC”. Запустим демо с OpenCV:

Вывод:

Время вывода составило 4.23 мс (236 кадр/с), общее время – 75.44 мс. Результаты в JSON-файле:

Функционирует, но вывод не читаем для человека… Попробуем сегментацию объектов Yolov8 в том же окружении:

Также доступны два примера, продолжим с OpenCV:

Вывод:

Время вывода – 16.18 мс (61.8 кадр/с), общее время – 246.72 мс.

JSON-файл остаётся нечитаемым, но демо генерирует изображение (или несколько) с описаниями и контурами объектов.

Radxa Airbox Fogwise Yolo8 segmentation demo

Добавил большее тестовое изображение (1920×1080) с увеличенным числом объектов:

Вывод остаётся быстрым, но постобработка требует времени. Результирующее изображение достаточно качественное.

YOLOV8 seg demo car pedestrian bicyle street

Попробуем пример с BMCV для сравнения скорости:

Предобработка через BMCV значительно быстрее OpenCV. Пример декодирует через SAIL, сохраняя сопоставимую с OpenCV скорость. Поскольку в обоих случаях вывод обрабатывается SAIL, различия вероятно вызваны вариативностью тестов.

Потребление энергии и шум вентилятора Radxa Fogwise Airbox

При первоначальном тестировании Aibox Fogwise со 100-ваттным GaN-адаптером потребление в режиме простоя составляло ~30 Вт. После получения адаптера от Radxa этот показатель снизился до ~28 Вт. Значение всё ещё высокое. При ответах Llama3 потребление возрастает до 39 Вт, а при генерации изображений Stable Diffusion достигает ~49 Вт. Потребление варьируется в зависимости от сложности изображения.

Вентилятор работает постоянно с заметным шумом. Для пользовательского мини-ПК это было бы проблемой, но поскольку система автономная, её можно разместить в отдельном помещении с вентиляцией и Ethernet-подключением.

Заключение

Radxa Fogwise Airbox представляет собой отличный компактный headless-бокс для офлайн/локальной обработки ИИ, совместимый с генеративными ИИ-системами, включая LLM и генераторы текст-в-изображение, а также моделями компьютерного зрения, такими как Resnet50 или YOLOv8. Благодаря предустановленному образу Ubuntu + CasaOS с контейнерами Stable Diffusion и Llama3, обеспечивающими plug-and-play функциональность, начать работу предельно просто. Также доступен Python SDK для кастомизации моделей или создания собственных.

Документация достаточно качественная, хотя часто требовалось выполнять дополнительные команды для успешной работы; в одном случае (перекомпиляция Llama3) процесс не увенчался успехом с первого раза, и для решения задачи потребовалось активное взаимодействие со специалистами Radxa. Тем не менее, Radxa Fogwise Airbox остается интересным решением для экспериментов с on-device генеративным ИИ и компьютерным зрением, а также для интеграции в проекты. Потребление энергии может вызывать вопросы, но 32 TOPS ИИ-бокс следует сравнивать с аналогами, например, модулями NVIDIA Jetson.

Благодарим Radxa за предоставленный для обзора ИИ-бокс Fogwise Airbox. Тестируемая модель с 16 ГБ RAM и 64 ГБ флэш-памяти eMMC, но без SSD и Wi-Fi может быть приобретён на Aliexpress за $331 плюс доставка Исходный текст отсутствует. Готов выполнить перевод технического контента по электронике и embedded-системам с соблюдением всех указанных требований.

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

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

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

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

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