Обзор Raspberry Pi AI HAT+ 2 – 40 TOPS ИИ-ускоритель, протестированный с рабочими нагрузками Computer Vision, LLM и VLM

Raspberry Pi предоставила образец их генеративного ИИ-ускорителя AI HAT+ 2 на базе Hailo-10H для обзора. 40 TOPS ИИ-ускоритель рекламируется как подходящий для LLM (больших языковых моделей) и VLM (визуально-языковых моделей), обеспечивая при этом примерно такую же производительность, как и у первого поколения AI HAT+ (Hailo-8) для моделей компьютерного зрения.

После распаковки плата AI HAT+ 2 собирается с Raspberry Pi 5 с 2 ГБ ОЗУ, оснащенным Raspberry Pi Camera Module 3, затем следует быстрая проверка работы моделей компьютерного зрения и более подробное тестирование примеров LLM и VLM.

Распаковка Raspberry Pi AI HAT+ 2

Образец проделал долгий и непростой путь из Великобритании в Таиланд, и упаковка выглядела не лучшим образом при доставке DHL.

Raspberry Pi AI HAT+ 2 package DHL

К счастью, ничего не было повреждено, и в комплект AI HAT+ 2 входили радиатор, 40-пиновый GPIO-удлинитель, пластиковые стойки и винты, а также инструкция по установке радиатора.

Raspberry Pi AI HAT+ 2 unboxing

На Raspberry Pi AI HAT+ 2 установлены две основные микросхемы: ИИ-ускоритель Hailo-10H и чип памяти на 8 ГБ, что должно позволить запускать LLM и VLM на Raspberry Pi 5 с ограниченным объемом памяти. Это отличается от AI HAT+ на базе Hailo-8, который использует память Raspberry Pi 5 и подходит только для приложений компьютерного зрения.

Hailo 10H HAT

На нижней стороне, кроме пассивных компонентов и плоского PCIe-кабеля, ничего нет.

Raspberry Pi AI HAT+ 2 bottom

Сборка Raspberry Pi AI HAT+ 2 с Raspberry Pi 5

Сборка довольно проста. Сначала радиатор закрепляется поверх HAT после удаления защитной пленки и нажатия на две пружинные защелки. На Raspberry Pi 5 также устанавливаются четыре пластиковые стойки и вставляется GPIO-удлинитель.

Raspberry Pi AI HAT+ 2 installation

Затем плоский PCIe-кабель вставляется в 16-пиновый PCIe FFC-коннектор Pi 5, после чего AI HAT+ 2 размещается сверху и фиксируется четырьмя оставшимися винтами.

Raspberry Pi 5 Raspberry Pi AI HAT+ 2

Если планируется использовать еще один HAT+ сверху, необходимо убедиться, что GPIO-удлинитель не вставлен до конца, иначе контакты GPIO будут недоступны.

Raspberry Pi AI HAT+ 2 installation PCIe cable

Стоит отметить, что использовать NVMe SSD с AI HAT+ 2 невозможно, если не добавить другой HAT с PCIe-коммутатором, например HatBRICK! Commander .

Установка Raspberry Pi OS Trixie 64-bit и пакета Hailo

На плате была установлена Raspberry Pi OS Bookworm на базе Debian 12, но для AI HAT+ 2 требуется последняя Raspberry Pi OS Trixie 64-bit . Поэтому microSD-карта на 32 ГБ была извлечена для записи последней ОС. Если система уже установлена, следует убедиться, что она обновлена:

sudo apt update
sudo apt full-upgrade -y
sudo rpi-eeprom-update -a
sudo reboot

Теперь можно установить пакет, необходимый для ускорителя Hailo-10H, и перезагрузить систему:

sudo apt install dkms hailo-h10-all
sudo reboot

Можно убедиться, что ускоритель HAILO10H корректно определяется:

pi@raspberrypi:~ $ hailortcli fw-control identify
Executing on device: 0001:01:00.0
Identifying board
Control Protocol Version: 2
Firmware Version: 5.1.1 (release,app)
Logger Version: 0
Device Architecture: HAILO10H

Примеры Computer Vision с rpicam-apps

Насколько известно, Hailo-10H не имеет преимуществ перед Hailo-8 в обработке компьютерного зрения, но важно, чтобы эти функции работали. Поэтому был установлен rpicam-apps, чтобы повторить как минимум один из тестов, проведенных с Raspberry Pi AI HAT+ .

sudo apt install rpicam-apps

Как упоминалось во введении, к одноплатному компьютеру также был подключен Raspberry Pi Camera Module 3 , чтобы можно было запустить модель YoloV8 на HAT Hailo-10H:

pi@raspberrypi:~ $ DISPLAY=:0 rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolov8_inference.json --lores-width 640 --lores-height 640 --rotation 180
[0:04:21.660771575] [1685]  INFO Camera camera_manager.cpp:340 libcamera v0.6.0+rpt20251202
[0:04:21.674084325] [1688]  INFO RPI pisp.cpp:720 libpisp version 1.3.0
[0:04:21.678205885] [1688]  INFO IPAProxy ipa_proxy.cpp:180 Using tuning file /usr/share/libcamera/ipa/rpi/pisp/imx708.json
[0:04:21.689349513] [1688]  INFO Camera camera_manager.cpp:223 Adding camera '/base/axi/pcie@1000120000/rp1/i2c@88000/imx708@1a' for pipeline handler rpi/pisp
[0:04:21.689382901] [1688]  INFO RPI pisp.cpp:1181 Registered camera /base/axi/pcie@1000120000/rp1/i2c@88000/imx708@1a to CFE device /dev/media0 and ISP device /dev/media1 using PiSP variant BCM2712_D0
Made X/EGL preview window
Postprocessing requested lores: 640x640 BGR888
Reading post processing stage "hailo_yolo_inference"
Reading post processing stage "object_detect_draw_cv"
Mode selection for 2304:1296:12:P
    SRGGB10_CSI2P,1536x864/0 - Score: 3400
    SRGGB10_CSI2P,2304x1296/0 - Score: 1000
    SRGGB10_CSI2P,4608x2592/0 - Score: 1900
Stream configuration adjusted
[0:04:21.813844172] [1685]  INFO Camera camera.cpp:1215 configuring streams: (0) 2304x1296-YUV420/sYCC (1) 640x640-BGR888/sRGB (2) 2304x1296-RGGB_PISP_COMP1/RAW
[0:04:21.813939227] [1688]  INFO RPI pisp.cpp:1485 Sensor: /base/axi/pcie@1000120000/rp1/i2c@88000/imx708@1a - Selected sensor format: 2304x1296-SRGGB10_1X10/RAW - Selected CFE format: 2304x1296-PC1R/RAW
Hailo device: HAILO10H

Raspberry Pi AI HAT+ 2 Hailo-10H Computer Vision Review

Устройство HAILO10 определяется, и все работает так же плавно, как и с Hailo-8, и с более высоким FPS, чем при использовании только Raspberry Pi 5. Другие примеры CV тестироваться не будут, вместо этого в оставшейся части обзора основное внимание уделяется LLM и VLM.

Тестирование LLM на Raspberry Pi AI HAT+ 2

Запуск LLM в командной строке с сервером Hailo Ollama

В основном следуются инструкции, размещенные на сайте Raspberry Pi . Первый шаг — установка сервера Hailo Ollama (версия 5.1.1):

wget https://dev-public.hailo.ai/2025_12/Hailo10/hailo_gen_ai_model_zoo_5.1.1_arm64.deb
sudo dpkg -i hailo_gen_ai_model_zoo_5.1.1_arm64.deb

Сервер запускается в одном окне терминала:

pi@raspberrypi:~ $ hailo-ollama 
 I |2026-01-17 14:27:48 1768634868341366| MyApp:Server running on port 8000

Он работает на порту 8000 и предоставляет REST API для вывода моделей. Теперь можно открыть другое окно терминала, чтобы вывести список доступных моделей:

pi@raspberrypi:~ $ curl --silent http://localhost:8000/hailo/v1/list
{"models":["deepseek_r1_distill_qwen:1.5b","llama3.2:3b","qwen2.5-coder:1.5b","qwen2.5-instruct:1.5b","qwen2:1.5b"]}

Всего пять моделей. Начнем с загрузки модели DeepSeek:

pi@raspberrypi:~ $ curl --silent http://localhost:8000/api/pullcurl --silent http://localhost:8000/api/pull \
     -H 'Content-Type: application/json' \
     -d '{ "model": "deepseek_r1_distill_qwen:1.5b", "stream" : true }'

Можно отправить запрос на перевод текста с английского на французский:

pi@raspberrypi:~ $ curl --silent http://localhost:8000/api/chat \
     -H 'Content-Type: application/json' \
     -d '{"model": "deepseek_r1_distill_qwen:1.5b", "messages": [{"role": "user", "content": "Translate to French: The cat is on the table."}]}'

После небольшого ожидания начнется вывод данных:

{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:19.710187637Z","message":{"role":"assistant","content":"Alright"},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:19.857711571Z","message":{"role":"assistant","content":","},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:20.001829975Z","message":{"role":"assistant","content":" let"},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:20.146264490Z","message":{"role":"assistant","content":" me"},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:20.291402397Z","message":{"role":"assistant","content":" figure"},"done":false}
...

{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:45.133824310Z","message":{"role":"assistant","content":"<\/think>"},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:45.277909447Z","message":{"role":"assistant","content":"\n\n"},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:45.422546419Z","message":{"role":"assistant","content":"\""},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:45.566536907Z","message":{"role":"assistant","content":"Le"},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:45.710771008Z","message":{"role":"assistant","content":" chat"},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:45.855492221Z","message":{"role":"assistant","content":" est"},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:45.999638229Z","message":{"role":"assistant","content":" sur"},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:46.143869366Z","message":{"role":"assistant","content":" le"},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:46.288438597Z","message":{"role":"assistant","content":" tableau"},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:46.432704846Z","message":{"role":"assistant","content":".\""},"done":false}
{"model":"deepseek_r1_distill_qwen:1.5b","created_at":"2026-01-17T07:35:46.585714626Z","message":{"role":"assistant","content":""},"done":true,"done_reason":"stop","total_duration":28366846153,"eval_count":186}

Работает, хотя перевод не совсем точный… Сгенерировано 186 токенов за 28,6 секунды, что составляет около 6,5 токенов/с. Можно загрузить и протестировать другие модели в команде, но подробно на каждой здесь останавливаться не будут. Эти довольно небольшие модели с 1,5–3 миллиардами параметров подходят для тестирования, но большинство пользователей, вероятно, будут создавать собственные модели, оптимизированные для их приложения.

Запуск моделей в веб-браузере с Open WebUI

Вместо этого будет показано, как запускать модели в веб-браузере. Как уже упоминалось в обзоре UP Squared Pro TWL AI Dev Kit с ИИ-ускорителем Hailo-8 , Hailo SDK очень требователен к версии Python. Поскольку версия Python в Raspberry Pi OS Trixie несовместима, будет использоваться Docker.

Сначала можно удалить старые пакеты Docker (пропустить, если система только что установлена):

sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-doc podman-docker containerd runc | cut -f1)

Теперь добавляется PGP-ключ Docker:

sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Файл /etc/apt/sources.list.d/docker.sources создается с правами суперпользователя командой:

Types: deb
URIs: https://download.docker.com/linux/debian
Suites: trixie
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc

Docker устанавливается и запускается:

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker

Текущий пользователь добавляется в группу docker:

sudo usermod -aG docker $USER

Терминал закрывается, и после повторного входа в систему Docker тестируется:

pi@raspberrypi:~ $ docker run hello-world

Вывод:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
198f93fd5094: Pull complete 
95ce02e4a4f1: Download complete 
Digest: sha256:05813aedc15fb7b4d732e1be879d3252c1c9c25d885824f6295cab4538cb85cd
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Все в порядке. Теперь можно установить и использовать Open WebUI, пока сервер hailo-ollama работает в другом окне терминала:

docker pull ghcr.io/open-webui/open-webui:main
docker run -d -e OLLAMA_BASE_URL=http://127.0.0.1:8000 -v open-webui:/app/backend/data --name open-webui --network=host --restart always ghcr.io/open-webui/open-webui:main

Запуск займет некоторое время, после чего доступ к Open WebUI можно получить по адресу http://localhost:8080 на Raspberry Pi или http://:8080 с любого компьютера в локальной сети. Для доступа к веб-интерфейсу использовался ноутбук.

Open WebUI Raspberry Pi 5

Нажатие на Get Started открывает интерфейс для создания учетной записи администратора. Был введен действительный адрес электронной почты, но он даже не потребовался, так как письмо не пришло.

Open WebUI registration После этого открывается панель управления Open WebUI, где можно выбрать одну из моделей и общаться с ней.

Open WebUI Raspberry Pi deepseek r1

Использовался тот же запрос, что и в командной строке: «Translate to French: The cat is on the table.»

Open WebUI DeepSeek R1 Distill Qwen Raspberry Pi 5 AI Hat+ 2

Данных тестирования нет. Была попытка установить функции Time Token Tracker и Chat Metrics для получения значения токенов/с, но ни одна из них не сработала.

Тестирование производительности LLM AI HAT+ 2

Один из способов получить данные о производительности — навести курсор на значок информации.

Open WebUI tokens duration

Здесь можно получить значения «total_tokens» и «total_duration» для расчета производительности, но это не идеально. Поэтому вместо этого это было сделано в командной строке с помощью утилиты jq.

Результаты запросов на перевод с английского на французский

DeepSeek R1 1.5B:

pi@raspberrypi:~ $ sudo apt install jq
pi@raspberrypi:~ $ curl --silent http://localhost:8000/api/chat -H 'Content-Type: application/json' -d '{"model": "deepseek_r1_distill_qwen:1.5b", "messages": [{"role": "user", "content": "Translate to French: The cat is on the table."}], "stream": false }' | jq -r '"\(.eval_count) tokens in \(.total_duration/1e9) seconds = \(.eval_count/(.total_duration/1e9)) tokens/s"'
380 tokens in 56.508142192 seconds = 6.724694623809408 tokens/s

Qwen2 1.5B:

pi@raspberrypi:~ $ curl --silent http://localhost:8000/api/chat -H 'Content-Type: application/json' -d '{"model": "qwen2:1.5b", "messages": [{"role": "user", "content": "Translate to French: The cat is on the table."}], "stream": false }' | jq -r '"\(.eval_count) tokens in \(.total_duration/1e9) seconds = \(.eval_count/(.total_duration/1e9)) tokens/s"'
7 tokens in 1.187233065 seconds = 5.89606220241179 tokens/s

Llama3.2 3B:

pi@raspberrypi:~ $ curl --silent http://localhost:8000/api/chat -H 'Content-Type: application/json' -d '{"model": "llama3.2:3b", "messages": [{"role": "user", "content": "Translate to French: The cat is on the table."}], "stream": false }' | jq -r '"\(.eval_count) tokens in \(.total_duration/1e9) seconds = \(.eval_count/(.total_duration/1e9)) tokens/s"'
180 tokens in 69.092325239 seconds = 2.6052097592222414 tokens/s

Qwen 2.5 instruct 1.5B:

pi@raspberrypi:~ $ curl --silent http://localhost:8000/api/chat -H 'Content-Type: application/json' -d '{"model": "qwen2.5-instruct:1.5b", "messages": [{"role": "user", "content": "Translate to French: The cat is on the table."}], "stream": false }' | jq -r '"\(.eval_count) tokens in \(.total_duration/1e9) seconds = \(.eval_count/(.total_duration/1e9)) tokens/s"'
102 tokens in 15.127930596 seconds = 6.742495237714138 tokens/s

Также было протестировано Qwen 2.5 Coder 1.5B с запросом написать функцию на Python:

pi@raspberrypi:~ $ curl --silent http://localhost:8000/api/chat -H 'Content-Type: application/json' -d '{"model": "qwen2.5-coder:1.5b", "messages": [{"role": "user", "content": "Write an FFT function in Python"}], "stream": false }' | jq -r '"\(.eval_count) tokens in \(.total_duration/1e9) seconds = \(.eval_count/(.total_duration/1e9)) tokens/s"'
666 tokens in 82.620543785 seconds = 8.060949123417828 tokens/s

Некоторые ответы занимают более минуты, и можно ускорить ответ, ограничив количество токенов:

"options": {"num_predict": 64}

Стоит отметить, что все эти небольшие тесты занимают место:

pi@raspberrypi:/usr/local $ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            962M     0  962M   0% /dev
tmpfs           402M   24M  378M   6% /run
/dev/mmcblk0p2   29G   26G  1.4G  96% /
tmpfs          1004M  544K 1003M   1% /dev/shm
tmpfs           5.0M   48K  5.0M   1% /run/lock
tmpfs           1.0M     0  1.0M   0% /run/credentials/systemd-journald.service
tmpfs          1004M   16K 1004M   1% /tmp
/dev/mmcblk0p1  510M   78M  433M  16% /boot/firmware
tmpfs           201M  256K  201M   1% /run/user/1000
tmpfs           1.0M     0  1.0M   0% /run/credentials/getty@tty1.service
tmpfs           1.0M     0  1.0M   0% /run/credentials/serial-getty@ttyAMA10.service

Использовалась microSD-карта на 32 ГБ, но карта на 64 ГБ даст больше свободного места. Если нужно удалить модели для экономии места, они находятся в /usr/share/hailo-ollama/models/blob/:

pi@raspberrypi:~ $ ls -lh /usr/share/hailo-ollama/models/blob/
total 11G
-rw-rw-r-- 1 pi pi 3.2G Jan 17 22:04 sha256_1129f5f8384e4e45c5890104dc4ec1aee77e800ce1484ddc3aa942399aada425
-rw-rw-r-- 1 pi pi 2.2G Jan 18 17:35 sha256_5310176848638505fbc28add04ba60c97abe345cdb0ec7e3b8ffaa4b0a8c65dd
-rw-rw-r-- 1 pi pi 1.7G Jan 17 21:24 sha256_88aa7633ebe3385452430ae19f2b459b5a00791cab035576a3262a41ec1350f5
-rw-rw-r-- 1 pi pi 2.3G Jan 17 14:32 sha256_9c4506dda44d0a1730d939d4049a3cbf72d5179a88762ca551363db087adb38f
-rw-rw-r-- 1 pi pi 1.6G Jan 17 21:20 sha256_ab056548c60945cdf4fb30ca43fc7aeed2b9ffc751ad8d4c201dc4c4ab31e86a

На этом этапе сложилось убеждение, что используется Raspberry Pi 5 8 ГБ. Планировалось установить ollama для запуска вышеуказанных моделей на ЦП, но из-за нехватки места и осознания того, что используется Pi всего с 2 ГБ ОЗУ, пришлось найти другой Raspberry Pi 5. Оказалось, что используемая сейчас плата — единственная, а другие модели больше не используются. Поэтому те же тесты были запущены на комплекте для разработки Raspberry Pi для CM5 с использованием ядер ЦП Broadcom BCM2712, 4 ГБ ОЗУ и 32 ГБ флэш-памяти eMMC.

Первый шаг — установка ollama и проверка ее корректной работы.

curl -fsSL https://ollama.com/install.sh | sh
pi@raspberrypi:~ $ ollama --version
ollama version is 0.14.2

Теперь можно запустить ollama с моделью deepseek-r1:1.5b и параметром verbose для включения метрик:

pi@raspberrypi:~ $ ollama run deepseek-r1:1.5b --verbose
>>> Translate to French: The cat is on the table.
Thinking...
Alright, so I've got this translation task here: "The cat is on the 
table." I need to translate it into French. Hmm, where do I start?

First off, the main subject here is a cat. In French, I think 'cat' 
translates to 'chien.' That seems straightforward enough.

Next, the object is "on the table." In everyday language, that's clear, 
but in a formal or academic context, maybe I should consider if there's an 
alternate term? I'm not sure, so probably stick with "par le tablier."

Putting it together, the sentence would be "La chat est sur le tablier." 
Let me check that. "Chat" is indeed French for cat, and "tablier" means 
table in French.

Wait, does "tablier" always mean 'on the table'? In some contexts, people 
use "arracher" instead of "par." But I think for just saying something's 
on a surface or a place like a table, "par le tablier" is correct. Maybe 
it varies based on the situation.

I should also consider if there are any other nuances. Sometimes, when 
talking about animals in a formal setting, they might use different terms, 
but since this seems pretty straightforward, I think "par le tablier" is 
spot on.

Is there a chance I'm missing something? Perhaps the grammatical structure 
or the phrasing. Let me see: "La chat" is definite singular, and "sur" 
means 'on.' So yeah, that makes sense together.

I could also consider if "tablier" has any regional variations in French. 
Sometimes, especially in European countries, "table" might be referred to 
as "le tablais" or something similar. But again, in everyday language, 
just saying "par le tablier" is sufficient.

Another thought: Is there a more precise word than "par"? Maybe using "à 
la table." Would that work? "La chat à la table." Yes, but the direct 
translation would be "la chat par le tablier," which sounds more natural 
and concise.

I think I've covered all bases here. The key points are correctly 
translating both the noun and the verb, ensuring clarity in context, and 
sticking to the most common phrases.
...done thinking.

La chat est sur le tablier.

total duration:       53.656290673s
load duration:        235.07706ms
prompt eval count:    14 token(s)
prompt eval duration: 105.627889ms
prompt eval rate:     132.54 tokens/s
eval count:           476 token(s)
eval duration:        52.666363919s
eval rate:            9.04 tokens/s

Скорость eval в 9,04 токена/с значительно выше, чем 6,7 токенов/с, зарегистрированных при использовании ускорителя Hailo-10H. Это разочаровывает. Тем не менее, все тесты были повторены следующим образом:

Qwen2:1.5b:

pi@raspberrypi:~ $ ollama run qwen2:1.5b --verbose
>>> Translate to French: The cat is on the table.
Le chat est sur la table.

total duration:       1.89893998s
load duration:        208.040356ms
prompt eval count:    19 token(s)
prompt eval duration: 969.034931ms
prompt eval rate:     19.61 tokens/s
eval count:           8 token(s)
eval duration:        708.57683ms
eval rate:            11.29 tokens/s

llama 3.2:3b:

pi@raspberrypi:~ $ ollama run llama3.2:3b --verbose
success 
>>> Translate to French: The cat is on the table.
La chatte est sur la table.

(Note: "chatte" is a more common and informal way of saying "chat" in 
French, especially when referring to a female cat.)

total duration:       14.694186151s
load duration:        265.720196ms
prompt eval count:    36 token(s)
prompt eval duration: 6.648299231s
prompt eval rate:     5.41 tokens/s
eval count:           37 token(s)
eval duration:        7.734155392s
eval rate:            4.78 tokens/s

qwen2.5:1.5b-instruct:

pi@raspberrypi:~ $ ollama run qwen2.5:1.5b-instruct --verbose
>>> Translate to French: The cat is on the table.
Le chat est sur la table.

total duration:       4.02122163s
load duration:        1.450590735s
prompt eval count:    40 token(s)
prompt eval duration: 1.869869038s
prompt eval rate:     21.39 tokens/s
eval count:           8 token(s)
eval duration:        681.880437ms
eval rate:            11.73 tokens/s

qwen2.5-coder:1.5b:

pi@raspberrypi:~ $ ollama run qwen2.5-coder:1.5b --verbose
>>> Write an FFT function in Python
Certainly! Below is an example of how to implement the Fast Fourier 
Transform (FFT) in Python using NumPy:

...
You can adjust the input array as needed to test different sequences.

total duration:       44.247390636s
load duration:        230.700317ms
prompt eval count:    35 token(s)
prompt eval duration: 1.635518696s
prompt eval rate:     21.40 tokens/s
eval count:           429 token(s)
eval duration:        41.82226033s
eval rate:            10.26 tokens/s

Следует отметить, что результаты на Hailo-10H могут включать время обработки промпта (обычно довольно быстрое по сравнению с генерацией) в дополнение к времени ответа, поэтому фактическое количество токенов/с может быть немного выше заявленного. Тем не менее, приведенная ниже таблица дает представление о производительности LLM Raspberry Pi AI HAT+ 2 по сравнению с ЦП Raspberry Pi 5/CM5.

Raspberry Pi 5/CM5 CPU Raspberry Pi 5 + AI HAT+ 2
Deepseek R1 1.5B 9.04 tokens/s 6.72 tokens/s
Qwen2 1.5B 11.29 tokens/s 5.89 tokens/s
Llama3.2 3B 4.78 tokens/s 2.60 tokens/s
Qwen 2.5 instruct 1.5B 11.73 tokens/s 6.74 tokens/s
Qwen 2.5 Coder 1.5B 10.26 tokens/s 8.06 tokens/s

Глядя на эту таблицу, Raspberry Pi AI HAT+ 2 кажется скорее ИИ-деселератором, чем ускорителем! Ожидалось, что Raspberry Pi AI HAT+ 2 и ИИ-ускоритель Hailo-10H будут конкурировать с ИИ-ускорителями Rockchip RK1820/RK1828 , но они находятся в другой лиге, как показано в таблице ниже (и их цена, вероятно, составит несколько сотен долларов).

RK1820 RK1828 LLM benchmarks
Тесты LLM и VLM RK1820/RK1828

Однако использование платы Hailo-10H для LLM все же имеет некоторые преимущества. Во-первых, хост-устройству не требуется много ОЗУ, и все модели можно было запустить на Raspberry Pi 5 с 2 ГБ ОЗУ, поскольку модели загружаются в чип памяти на 8 ГБ на HAT.

Помимо использования ОЗУ, ЦП не выполняет никаких задач, как показано на скриншоте htop ниже при выполнении запроса DeepSeek R1 1.5B.

HTOP Raspberry Pi 5 AI HAT+ 2 Похоже, что это могло бы работать даже на одной из новых плат Raspberry Pi 5 с 1 ГБ ОЗУ . Теперь сравним это с выполнением той же задачи с помощью ollama на комплекте для разработки Raspberry Pi для CM5.

HTOP Raspberry Pi 5 CPU ollama deepseek r1

Наблюдается высокое использование ЦП, и используемая память намного выше, поскольку модель загружается в ОЗУ Pi, и эти ресурсы можно было бы использовать для других задач на Raspberry Pi 5. Теоретически можно также вынести LLM на другой одноплатный компьютер Raspberry Pi 5 с 8 ГБ ОЗУ, что обеспечит лучшую производительность и более низкую цену, чем AI HAT+ 2. Однако такое решение будет больше/тяжелее и потребует больше энергии, что может быть важно для роботов с батарейным питанием.

  • DeepSeek-R1 1.5B Ollama на комплекте для разработки Raspberry Pi CM5: 10,2–10,6 Вт.
  • DeepSeek-R1 1.5B Hailo-ollama на Raspberry Pi 5 2 ГБ с AI HAT+ 2: 7,2–7,6 Вт.

Была также получена обратная связь от Эбена Аптона по результатам. Он объяснил, что неудивительно, что показатель токенов в секунду схож, так как он ограничен пропускной способностью памяти, а Raspberry Pi 5 и Hailo-10 имеют похожие подсистемы памяти (LPDDR4X-4267). Он также отметил, что ключевыми целями продукта AI HAT+ 2 были:

  • Обеспечить значительно улучшенное время до первого токена.
  • Разгрузить ЦП (и память) хост-устройства Raspberry Pi для выполнения других задач.

Очевидных данных/параметров в инструментах Hailo для проверки времени до первого токена (TTFT) не обнаружено, поэтому это не тестировалось. Тем не менее, стоит ожидать результатов тестирования TTFT от Raspberry Pi в ближайшем будущем, а также более крупных моделей для AI HAT+ 2.

Тестирование VLM (Vision Language Model) с Raspberry Pi AI HAT+ 2

Работа еще не завершена, так как не протестированы VLM (визуально-языковые модели), которые, возможно, являются оптимальными рабочими нагрузками для Hailo-10H, поскольку они используют как возможности компьютерного зрения, так и больших языковых моделей. Это можно проверить с помощью приложений Hailo:

pi@raspberrypi:~ $ git clone https://github.com/hailo-ai/hailo-apps
pi@raspberrypi:~ $ cd hailo-apps
pi@raspberrypi:~/hailo-apps $ sudo ./install.sh

Это займет некоторое время, и в случае успешного завершения должно появиться сообщение:

════════════════════════════════════════════════════════════════
  Installation Summary
════════════════════════════════════════════════════════════════

  ✅ User Detection            User: pi, Group: pi
  ✅ Prerequisites Check       All required components found
  ✅ System Packages           Packages installed
  ✅ Resources Setup           Resources at /usr/local/hailo/resources
  ✅ Virtual Environment       venv: /home/pi/hailo-apps/venv_hailo_apps
  ✅ Python Packages           Packages installed
  ✅ Post-Installation         Post-install done

✅ Installation completed successfully!

Virtual environment: /home/pi/hailo-apps/venv_hailo_apps
To activate:         source /home/pi/hailo-apps/setup_env.sh

Log file: /home/pi/hailo-apps/logs/install_20260119_212642.log

Пришлось запустить установку дважды, так как microSD-карта была заполнена, и для завершения установки были удалены LLM, чтобы освободить место.

Запускается демо VLM-чата, которое использует модуль камеры Raspberry Pi для захвата изображения и ИИ-ускоритель для его описания.

pi@raspberrypi:~/hailo-apps $ source /home/pi/hailo-apps/setup_env.sh
(venv_hailo_apps) pi@raspberrypi:~/hailo-apps $ cd hailo_apps/python/gen_ai_apps/vlm_chat/
(venv_hailo_apps) pi@raspberrypi:~/hailo-apps/hailo_apps/python/gen_ai_apps/vlm_chat $ python vlm_chat.py --input rpi

⚠️  WARNING: Default model 'Qwen2-VL-2B-Instruct' is not downloaded.
   Downloading model for vlm_chat/hailo10h...
   This may take a while depending on your internet connection.

Downloading model: Qwen2-VL-2B-Instruct for hailo10h...
...
[0:16:29.905550842] [2683]  INFO Camera camera_manager.cpp:340 libcamera v0.6.0+rpt20251202
[0:16:29.918273881] [2686]  INFO RPI pisp.cpp:720 libpisp version 1.3.0
[0:16:29.931851942] [2686]  INFO IPAProxy ipa_proxy.cpp:180 Using tuning file /usr/share/libcamera/ipa/rpi/pisp/imx708.json
[0:16:29.941043094] [2686]  INFO Camera camera_manager.cpp:223 Adding camera '/base/axi/pcie@1000120000/rp1/i2c@88000/imx708@1a' for pipeline handler rpi/pisp
[0:16:29.941081631] [2686]  INFO RPI pisp.cpp:1181 Registered camera /base/axi/pcie@1000120000/rp1/i2c@88000/imx708@1a to CFE device /dev/media0 and ISP device /dev/media1 using PiSP variant BCM2712_D0
[0:16:29.944612573] [2683]  INFO Camera camera.cpp:1215 configuring streams: (0) 640x480-RGB888/sRGB (1) 1536x864-BGGR_PISP_COMP1/RAW
[0:16:29.944770055] [2686]  INFO RPI pisp.cpp:1485 Sensor: /base/axi/pcie@1000120000/rp1/i2c@88000/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10/RAW - Selected CFE format: 1536x864-PC1B/RAW

================================================================================
  🎥  LIVE VIDEO  |  Press Enter to CAPTURE image ('q' to quit)
========================================================================

Через некоторое время появится окно с выводом камеры, и можно нажать Enter, чтобы захватить изображение, а затем задать вопрос о нем или снова нажать Enter для использования промпта по умолчанию («Describe the image»).

Raspberry Pi AI HAT+ 2 review VLM chat test

Один из полученных результатов:

================================================================================
  📷  IMAGE CAPTURED  |  Type question (Enter='Describe the image', 'q' to Cancel)
================================================================================
Question: 
Using default prompt: 'Describe the image'

================================================================================
  ⏳  PROCESSING...  |  Please wait
================================================================================
The image depicts a toy that resembles a small, anthropomorphic creature. The toy has a round head with a small, smiling face, and it is wearing a hat that has a pattern resembling a forest or woodland scene. The toy has a blue and white pattern on its body, and it appears to be made of a soft, plush material. The toy has a small, button-like nose and a small, button-like mouth, giving it a friendly and cheerful appearance. The toy has a small, button-like hand and a small, button-like foot, which are also attached to the toy. The toy has a small, button-like ear on its head, which is a characteristic feature of the toy. The toy is sitting upright, and the background appears to be a light-colored surface, possibly a table or a wall.
================================================================================
  ✅  RESULT READY  |  Press Enter to continue
=================================================================

Цвета камеры неверны, и параметров для исправления этого, кажется, нет:

chat $ python vlm_chat.py --help
usage: vlm_chat.py [-h] [--log-level {critical,error,warning,info,debug}]
                   [--debug] [--log-file LOG_FILE] [--input INPUT]
                   [--hef-path HEF_PATH] [--list-models]
                   [--batch-size BATCH_SIZE] [--width WIDTH] [--height HEIGHT]
                   [--arch {hailo8,hailo8l,hailo10h}] [--show-fps]
                   [--frame-rate FRAME_RATE] [--labels LABELS] [--track]
                   [--list-inputs] [--list-nets] [--resolution {sd,hd,fhd}]
                   [--output-dir OUTPUT_DIR] [--save-output]

Hailo Standalone Processing Application

options:
  -h, --help            show this help message and exit
  --input, -i INPUT     Input source for processing. Can be a file path (image
                        or video), camera index (integer), folder path
                        containing images, or RTSP URL. For USB cameras, use
                        'usb' to auto-detect or '/dev/video<X>' for a specific
                        device. For Raspberry Pi camera, use 'rpi'. If not
                        specified, defaults to application-specific source.
  --hef-path, -n HEF_PATH
                        Path or name of Hailo Executable Format (HEF) model
                        file. Can be: (1) full path to .hef file, (2) model
                        name (will search in resources), or (3) model name
                        from available models (will auto-download if not
                        found). If not specified, uses the default model for
                        this application.
  --list-models         List all available models for this application and
                        exit. Shows default and extra models that can be used
                        with --hef-path.
  --batch-size, -b BATCH_SIZE
                        Number of frames or images to process in parallel
                        during inference. Higher batch sizes can improve
                        throughput but require more memory. Default is 1
                        (sequential processing).
  --width, -W WIDTH     Custom output width in pixels for video or image
                        output. If specified, the output will be resized to
                        this width while maintaining aspect ratio. If not
                        specified, uses the input resolution or model default.
  --height, -H HEIGHT   Custom output height in pixels for video or image
                        output. If specified, the output will be resized to
                        this height while maintaining aspect ratio. If not
                        specified, uses the input resolution or model default.
  --arch, -a {hailo8,hailo8l,hailo10h}
                        Target Hailo architecture for model execution.
                        Options: 'hailo8' (Hailo-8 processor), 'hailo8l'
                        (Hailo-8L processor), 'hailo10h' (Hailo-10H
                        processor). If not specified, the architecture will be
                        auto-detected from the connected device.
  --show-fps            Enable FPS (frames per second) counter display. When
                        enabled, the application will display real-time
                        performance metrics showing the current processing
                        rate. Useful for performance monitoring and
                        optimization.
  --frame-rate, -f FRAME_RATE
                        Target frame rate for video processing in frames per
                        second. Controls the playback speed and processing
                        rate for video sources. Default is 30 FPS. Lower
                        values reduce processing load, higher values increase
                        throughput.
  --labels, -l LABELS   Path to a text file containing class labels, one per
                        line. Used for mapping model output indices to human-
                        readable class names. If not specified, default labels
                        for the model will be used (e.g., COCO labels for
                        detection models).
  --track               Enable object tracking for detections. When enabled,
                        detected objects will be tracked across frames using a
                        tracking algorithm (e.g., ByteTrack). This assigns
                        consistent IDs to objects over time, enabling temporal
                        analysis, trajectory visualization, and multi-frame
                        association. Useful for video processing applications.
  --list-inputs         List available demo inputs for this application and
                        exit. This uses the shared resources catalog
                        (images/videos) defined in resources_config.yaml.
  --list-nets           List available models for this application and exit.
                        Alias for --list-models to align with legacy app
                        flags.
  --resolution, -r {sd,hd,fhd}
                        Predefined resolution for camera input sources.
                        Options: 'sd' (640x480, Standard Definition), 'hd'
                        (1280x720, High Definition), 'fhd' (1920x1080, Full
                        High Definition). Default is 'sd'. This flag is only
                        applicable when using camera input sources.
  --output-dir, -o OUTPUT_DIR
                        Directory where output files will be saved. When
                        --save-output is enabled, processed images, videos, or
                        result files will be written to this directory. If not
                        specified, outputs are saved to a default location or
                        the current working directory. The directory will be
                        created if it does not exist.
  --save-output, -s     Enable output file saving. When enabled, processed
                        images or videos will be saved to disk. The output
                        location is determined by the --output-dir flag.
                        Without this flag, output is only displayed (if
                        applicable).

Была попытка использовать опцию show-fps, но ничего не отображалось.

hailo-10h vlm chat demo Raspberry Pi Camera Module 3

Заключение

Raspberry Pi AI HAT+ 2 не совсем оправдал ожидания как ускоритель LLM, поскольку ошибочно предполагалось, что он увеличит производительность с точки зрения токенов/с. Вместо этого он обеспечивает производительность компьютерного зрения, аналогичную выпущенному пару лет назад Raspberry Pi AI HAT+ на базе Hailo-8, и добавляет поддержку LLM и VLM.

Производительность больших языковых моделей фактически несколько ниже, чем при их запуске на ЦП Broadcom BCM2712, установленном в Raspberry Pi 5, и основными преимуществами AI HAT+ 2 здесь являются разгрузка обработки с использованием очень небольшого объема ОЗУ и ЦП самого одноплатника, а также меньшее энергопотребление, что может быть важно для приложений с батарейным питанием. Он использовался с Raspberry Pi 5 с 2 ГБ ОЗУ, но также должен работать с Raspberry Pi 5 с 1 ГБ ОЗУ благодаря встроенной памяти на 8 ГБ на самом HAT. Время до первого токена (TTFT) также должно быть намного быстрее, но не было найдено способа протестировать это с помощью предоставленных инструментов. Наилучшим вариантом использования AI HAT+2, вероятно, являются визуально-языковые модели, поскольку они позволяют использовать возможности компьютерного зрения и больших моделей ИИ-ускорителя Hailo-10H.

Raspberry Pi AI HAT+ 2 стоит 130 долларов по сравнению с 110 долларами за Raspberry Pi AI HAT+ первого поколения. Поскольку оба имеют примерно одинаковую производительность в области ИИ-видения, а основными преимуществами AI HAT+ 2 по сравнению с запуском LLM непосредственно на Pi 5 являются разгрузка (поскольку производительность Hailo-10H и ЦП примерно одинакова) и более низкое энергопотребление, новая HAT+ на базе Hailo-10H, вероятно, лучше всего подходит для систем видеонаблюдения, таких как Frigate, или для роботов, оснащенных камерами, которым необходимо понимать окружающую среду с помощью VLM.

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

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

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

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

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