🇬🇧 English
The AI HAT+ 2 came out in January 2026. It carries a Hailo-10H chip and 8 GB of its own memory.
That memory is the important part. The model sits on the HAT, not in the Pi. Your Pi keeps its own RAM for everything else.
It does 40 TOPS. That is enough for small language models and for vision work.
🇹🇭 ไทย
AI HAT+ 2 ออกมาเมื่อมกราคม 2026 มันมีชิป Hailo-10H และแรมของตัวเอง 8 GB
แรมนั้นคือส่วนสำคัญ โมเดลอยู่บน HAT ไม่ใช่ในพาย พายจึงเก็บแรมของตัวเองไว้ทำอย่างอื่นได้
มันทำได้ 40 TOPS พอสำหรับโมเดลภาษาเล็ก ๆ และงานด้านภาพ
🇨🇳 中文
AI HAT+ 2 在 2026 年 1 月出。它带一颗 Hailo-10H 芯片,还有自己的 8 GB 内存。
那块内存才是重点。模型住在 HAT 上,不在树莓派里。树莓派自己的内存留着干别的。
它有 40 TOPS,够跑小的语言模型,也够做视觉的活。
| Without the HATไม่มี HAT没有 HAT | With the AI HAT+ 2มี AI HAT+ 2有 AI HAT+ 2 | |
|---|---|---|
| Where the model livesโมเดลอยู่ที่ไหน模型住在哪 | in the Pi's own RAMในแรมของพายเอง在树莓派自己的内存里 | on the HAT, in its own 8 GBบน HAT ในแรม 8 GB ของมันเอง在 HAT 上,用它自己的 8 GB |
| What the Pi is doingพายกำลังทำอะไร树莓派在干嘛 | all of it, slowlyทำทั้งหมด และช้า全都它干,而且慢 | free for your own programว่างไว้ให้โปรแกรมของคุณ空着给你自己的程序 |
| Which modelsโมเดลไหนได้บ้าง哪些模型 | anything Ollama hasอะไรก็ได้ที่ Ollama มีOllama 有的都行 | only ones built for Hailoเฉพาะที่สร้างมาเพื่อ Hailo只有为 Hailo 编译过的 |
| Which OSระบบปฏิบัติการไหน哪个系统 | almost anyแทบทุกตัว几乎都行 | one, really. See step 1.จริง ๆ แล้วมีตัวเดียว ดูขั้นที่ 1说白了就一个。看第 1 步。 |
💿 Tutorial 1 — Choose the OS before you flash · บทที่ 1 — เลือกระบบปฏิบัติการก่อนแฟลช · 教程 1 —— 烧录之前先选系统
🇬🇧 English
This is the one decision that is hard to undo. Get it right and the rest is two commands.
Get it wrong and you are compiling kernel drivers on a Sunday.
🇹🇭 ไทย
นี่คือการตัดสินใจเดียวที่ย้อนกลับยาก ถ้าเลือกถูก ที่เหลือคือสองคำสั่ง
ถ้าเลือกผิด คุณจะได้นั่งคอมไพล์ไดรเวอร์เคอร์เนลในวันอาทิตย์
🇨🇳 中文
这是唯一一个难以反悔的决定。选对了,剩下的就是两条命令。
选错了,你的周日就用来编译内核驱动了。
1 Why Trixie, and why nothing else · ทำไมต้อง Trixie และทำไมไม่ใช่อย่างอื่น · 为什么是 Trixie,为什么别的都不行
🇬🇧 English
Raspberry Pi say it plainly. Running AI models needs a Pi 5. It needs 64-bit Raspberry Pi OS, Trixie.
Trixie is Debian 13. The kernel must be 6.12 or newer. 64-bit is not optional here.
The driver arrives as one apt package. On anything else you build it from source.
🇹🇭 ไทย
Raspberry Pi บอกไว้ตรง ๆ การรันโมเดล AI ต้องใช้พาย 5 กับ Raspberry Pi OS 64 บิต รุ่น Trixie
Trixie คือ Debian 13 เคอร์เนลต้องเป็น 6.12 ขึ้นไป ตรงนี้ 64 บิตไม่ใช่ตัวเลือก
ไดรเวอร์มาเป็นแพ็กเกจ apt อันเดียว ถ้าใช้ตัวอื่นคุณต้องคอมไพล์เอง
🇨🇳 中文
Raspberry Pi 说得很直白:跑 AI 模型需要树莓派 5 配 64 位的 Raspberry Pi OS,Trixie 版。
Trixie 就是 Debian 13。内核要 6.12 或更新。这里 64 位不是可选项。
驱动是一个 apt 包。换别的系统,你就得自己从源码编。
| Choiceตัวเลือก选择 | Driverไดรเวอร์驱动 | Verdictคำตัดสิน结论 |
|---|---|---|
| Pi OS Trixie, 64-bitPi OS Trixie 64 บิตPi OS Trixie 64 位 | apt install hailo-h10-all | Use this oneใช้ตัวนี้就用这个 |
| Ubuntu 24.04Ubuntu 24.04Ubuntu 24.04 | build from sourceคอมไพล์เอง从源码编 | Only if you mustต่อเมื่อจำเป็นจริง非用不可才用 |
| Arch ARM, NixOSArch ARM, NixOSArch ARM、NixOS | build from sourceคอมไพล์เอง从源码编 | You own that build foreverคุณต้องดูแลการคอมไพล์นั้นตลอดไป这份编译你得养一辈子 |
| Pi OS BookwormPi OS BookwormPi OS Bookworm | too oldเก่าเกินไป太旧 | Reflash. No upgrade path.แฟลชใหม่ ไม่มีทางอัปเกรด重烧。没有升级路径。 |
| Any 32-bit imageอิมเมจ 32 บิตใด ๆ任何 32 位镜像 | noneไม่มี没有 | Will not work at allใช้ไม่ได้เลย根本不行 |
2 Flash the card · แฟลชการ์ด · 把卡烧好
🇬🇧 English
Use Raspberry Pi Imager. It runs on Windows, macOS and Linux. It is the supported way.
Pick the 64-bit image by name. The Imager offers 32-bit too, and the names look almost the same.
🇹🇭 ไทย
ใช้ Raspberry Pi Imager มันใช้ได้ทั้ง Windows, macOS และ Linux และเป็นวิธีที่รองรับ
เลือกอิมเมจ 64 บิตจากชื่อให้ดี ตัว Imager มี 32 บิตด้วย และชื่อดูเกือบเหมือนกัน
🇨🇳 中文
用 Raspberry Pi Imager。Windows、macOS、Linux 上都能跑,而且这是官方支持的方式。
按名字挑 64 位那个。Imager 里也有 32 位的,名字看起来差不多。
📘 FROM THE DOCS · quoted, not run here
# Find the Pi once it is up. The name is what you set in the Imager.
ssh pi@raspberrypi.local
# Bring everything up to date before you add the HAT software.
sudo apt update
sudo apt full-upgrade -y
# The bootloader lives in its own chip and updates separately.
sudo rpi-eeprom-update -a
sudo reboot
- Flash the card. Set wifi and ssh in the gear menu.
- Boot with the HAT not yet fitted. One change at a time.
- Run the four commands above. Let it reboot.
- Check
uname -msaysaarch64before going on.
- แฟลชการ์ด ตั้งไวไฟกับ ssh ในเมนูรูปเฟือง
- บูตโดยที่ยังไม่ใส่ HAT เปลี่ยนทีละอย่าง
- รันสี่คำสั่งข้างบน แล้วปล่อยให้มันรีบูต
- ตรวจว่า
uname -mขึ้นaarch64ก่อนไปต่อ
- 烧卡。在齿轮菜单里设好 wifi 和 ssh。
- 先不要装 HAT 就开机。一次只改一样。
- 把上面四条命令跑完,让它重启。
- 继续之前先确认
uname -m显示aarch64。
🔌 Tutorial 2 — Wake the HAT up · บทที่ 2 — ปลุก HAT ให้ตื่น · 教程 2 —— 把 HAT 叫醒
🇬🇧 English
Power the Pi off fully before you fit the HAT. Not a reboot. Off, and unplugged.
Then one package, one reboot, and three checks.
🇹🇭 ไทย
ปิดพายให้สนิทก่อนใส่ HAT ไม่ใช่รีบูต แต่ปิดและถอดปลั๊ก
จากนั้นแพ็กเกจเดียว รีบูตหนึ่งครั้ง และตรวจสามอย่าง
🇨🇳 中文
装 HAT 之前把树莓派彻底断电。不是重启,是关机并拔掉电源。
然后一个包、一次重启、三项检查。
3 Firmware first, then one package · เฟิร์มแวร์ก่อน แล้วค่อยแพ็กเกจเดียว · 先固件,再一个包
🇬🇧 English
The package name is the thing to get right. There are two, and they cannot live together.
hailo-h10-all is for this HAT. hailo-all is for the older one. Almost every guide online says the older one.
🇹🇭 ไทย
ชื่อแพ็กเกจคือสิ่งที่ต้องไม่พลาด มีสองตัว และมันอยู่ด้วยกันไม่ได้
hailo-h10-all สำหรับ HAT ตัวนี้ ส่วน hailo-all สำหรับรุ่นเก่ากว่า บทความออนไลน์เกือบทั้งหมดบอกตัวเก่า
🇨🇳 中文
包名是最不能弄错的东西。有两个,而且不能共存。
hailo-h10-all 是给这块 HAT 的。hailo-all 是给老款的。网上几乎所有指南写的都是老的那个。
📘 FROM THE DOCS · quoted, not run here
# dkms rebuilds the kernel module whenever the kernel updates. Install it first.
sudo apt install dkms
# The one that matters. h10 means Hailo-10H, which is the AI HAT+ 2.
# hailo-all is the Hailo-8 package. The two cannot be installed together.
sudo apt install hailo-h10-all
sudo reboot
hailo-all? Remove it before you go on. sudo apt remove --purge hailo-all and then reboot. The check script in step 5 looks for this. It is the easiest mistake to make. It is also the hardest to spot.
Raspberry Pi บอกไว้ตรง ๆ ว่าสองแพ็กเกจนี้อยู่ร่วมกันไม่ได้ ถ้าคุณติดตั้ง hailo-all ไปแล้วจากบทความเก่า ให้เอาออกก่อนไปต่อ ใช้ sudo apt remove --purge hailo-all แล้วรีบูต สคริปต์ตรวจในขั้นที่ 5 มองหาเรื่องนี้ เพราะมันพลาดง่ายที่สุดและสังเกตยากที่สุด
Raspberry Pi 说得很明白:这两个包不能共存。如果你照着旧教程已经装了 hailo-all,先把它卸掉再往下走:sudo apt remove --purge hailo-all,然后重启。第 5 步的检查脚本会查这件事,因为它最容易犯,也最不容易发现。
dtparam=pciex1_gen=3 to /boot/firmware/config.txt. Raspberry Pi say you can skip that here. On both AI HAT+ boards the setting is applied for you. It was only ever needed for the AI Kit. That is out of production. Do not edit config.txt when you need not. That is a good way to break the boot.
บทความเก่าบอกให้เพิ่ม dtparam=pciex1_gen=3 ลงใน /boot/firmware/config.txt Raspberry Pi บอกว่าข้ามได้สำหรับ AI HAT+ และ AI HAT+ 2 เพราะค่านั้นถูกตั้งให้อยู่แล้ว มันจำเป็นเฉพาะกับ AI Kit ซึ่งเลิกผลิตไปแล้ว การแก้ config.txt ทั้งที่ไม่จำเป็นเป็นวิธีที่ดีในการทำให้พายบูตไม่ขึ้น
旧教程会让你往 /boot/firmware/config.txt 里加 dtparam=pciex1_gen=3。Raspberry Pi 说 AI HAT+ 和 AI HAT+ 2 可以跳过,因为这个设置已经自动应用了。它只对已停产的 AI Kit 才需要。没必要还去改 config.txt,是把树莓派弄到开不了机的好办法。
4 Prove the chip is really there · พิสูจน์ว่าชิปอยู่ตรงนั้นจริง · 证明芯片真的在
🇬🇧 English
Three checks, from the outside in. The bus, then the kernel, then the runtime.
Do all three. Each one fails for a different reason. Knowing which failed tells you what to fix.
🇹🇭 ไทย
ตรวจสามอย่าง จากนอกเข้าใน บัสก่อน แล้วเคอร์เนล แล้วรันไทม์
ทำให้ครบทั้งสาม แต่ละอย่างพังด้วยเหตุผลต่างกัน และการรู้ว่าอันไหนพังจะบอกคุณว่าต้องแก้อะไร
🇨🇳 中文
三项检查,从外往里:先总线,再内核,最后运行时。
三个都做。它们失败的原因各不相同,知道是哪一个挂了,就知道该修什么。
📘 FROM THE DOCS · quoted, not run here
# 1. Is it on the PCIe bus at all? If this is empty, it is a hardware problem.
lspci | grep -i hailo
# 2. Did the kernel pick it up? Look for the driver loading, and for errors.
dmesg | grep -i hailo
# 3. Can the runtime talk to the firmware? This is the real test.
hailortcli fw-control identify
| Check | If it is empty or fails · ถ้าว่างหรือพัง · 如果是空的或失败了 |
|---|---|
| lspci | grep -i hailo | The Pi cannot see the board. Power off, reseat the ribbon, check which way round it goes.พายมองไม่เห็นบอร์ด ปิดเครื่อง เสียบสายแพใหม่ ดูว่าหันด้านถูกไหม树莓派看不到这块板。关机,重插排线,看方向对不对。 |
| dmesg | grep -i hailo | Seen but not driven. The module did not build or load. Check dkms.เห็นแต่ขับไม่ได้ โมดูลสร้างไม่ผ่านหรือโหลดไม่ขึ้น ไปดู dkms看得见但驱动不了。模块没编好或没加载。去查 dkms。 |
| hailortcli fw-control identify | Driven but not talking. Usually the wrong package for the board.ขับได้แต่คุยไม่ได้ ส่วนใหญ่คือใช้แพ็กเกจผิดรุ่น驱动了但说不上话。通常是包和板子不匹配。 |
5 A script that checks before you install · สคริปต์ที่ตรวจให้ก่อนติดตั้ง · 一个装之前先帮你检查的脚本
🇬🇧 English
This script reads. It never writes. It checks eleven things and tells you which ones are wrong.
Run it before the model zoo. It catches the two mistakes that waste an afternoon. The wrong driver package. And port 8000 already in use.
🇹🇭 ไทย
สคริปต์นี้อ่านอย่างเดียว ไม่เขียนอะไรเลย มันตรวจสิบเอ็ดอย่างและบอกว่าอันไหนผิด
รันมันก่อนติดตั้งสวนสัตว์โมเดล มันจับสองความผิดพลาดที่กินเวลาทั้งบ่าย คือแพ็กเกจไดรเวอร์ผิดตัว และพอร์ต 8000 ถูกใช้อยู่แล้ว
🇨🇳 中文
这个脚本只读,从不写。它检查十一项,告诉你哪些不对。
在装模型园之前跑它。它能抓住两个浪费一下午的错误:驱动包装错了,以及端口 8000 已经被占了。
📄 NEW FILE · hailo_preflight.sh
#!/usr/bin/env bash
# hailo_preflight.sh - read-only checks before installing the Gen AI model zoo.
# Changes nothing. Run it on the Pi 5, fix every FAIL, then install by hand.
#
# scp hailo_preflight.sh pi@raspberrypi.local:~
# ssh pi@raspberrypi.local 'bash hailo_preflight.sh'
pass=0; fail=0
ok() { printf ' \033[32mOK \033[0m %s\n' "$1"; pass=$((pass+1)); }
bad() { printf ' \033[31mFAIL\033[0m %s\n' "$1"; fail=$((fail+1)); }
note() { printf ' %s\n' "$1"; }
head_() { printf '\n== %s ==\n' "$1"; }
head_ "1. Board"
# Guard the read. "< file 2>/dev/null" does not silence a missing file: the
# shell fails to open it before tr ever runs, and prints its own error.
model=""
[ -r /proc/device-tree/model ] && model=$(tr -d '\0' < /proc/device-tree/model)
case "$model" in
*"Raspberry Pi 5"*) ok "$model" ;;
*) bad "need a Raspberry Pi 5, found: ${model:-unknown}" ;;
esac
head_ "2. Architecture - 64-bit is mandatory"
arch=$(uname -m)
[ "$arch" = "aarch64" ] && ok "arch $arch" || bad "arch $arch, need aarch64"
head_ "3. OS - must be Trixie / Debian 13"
codename=$(. /etc/os-release 2>/dev/null; echo "$VERSION_CODENAME")
pretty=$(. /etc/os-release 2>/dev/null; echo "$PRETTY_NAME")
if [ "$codename" = "trixie" ]; then
ok "$pretty"
else
bad "$pretty - hailo-h10-all needs Trixie"
note "Pi OS major upgrades are not supported in place. Plan a clean flash."
fi
head_ "4. Kernel - 6.12 or newer"
kver=$(uname -r)
kmaj=$(echo "$kver" | cut -d. -f1); kmin=$(echo "$kver" | cut -d. -f2)
if [ "$kmaj" -gt 6 ] 2>/dev/null || { [ "$kmaj" -eq 6 ] && [ "$kmin" -ge 12 ]; } 2>/dev/null; then
ok "kernel $kver"
else
bad "kernel $kver, need 6.12+"
fi
head_ "5. Is the HAT on the PCIe bus?"
if command -v lspci > /dev/null 2>&1; then
hailo_pci=$(lspci 2>/dev/null | grep -i hailo)
if [ -n "$hailo_pci" ]; then
ok "$hailo_pci"
case "$hailo_pci" in
*"Hailo-10"*|*1888:0010*) note "Hailo-10H - the AI HAT+ 2, use hailo-h10-all" ;;
*) note "NOT a Hailo-10H. hailo-h10-all is the wrong package." ;;
esac
else
bad "no Hailo device on the PCIe bus"
note "Power off fully, reseat the ribbon cable, check its orientation."
fi
else
bad "lspci missing - sudo apt install pciutils"
fi
head_ "6. Conflicting driver package"
# hailo-all (Hailo-8/8L) and hailo-h10-all (Hailo-10H) cannot coexist.
if dpkg -l 2>/dev/null | grep -q '^ii hailo-all'; then
bad "hailo-all is installed - it conflicts with hailo-h10-all"
note "sudo apt remove --purge hailo-all (then reboot)"
else
ok "hailo-all not installed"
fi
head_ "7. Driver stack"
if dpkg -l 2>/dev/null | grep -q '^ii hailo-h10-all'; then
ok "hailo-h10-all installed"
else
bad "hailo-h10-all not installed yet"
fi
if lsmod 2>/dev/null | grep -q hailo; then
ok "kernel module loaded"
else
bad "no hailo kernel module loaded"
fi
head_ "8. Runtime talks to the chip"
if command -v hailortcli > /dev/null 2>&1; then
if hailortcli fw-control identify > /tmp/hailo_id.txt 2>&1; then
ok "hailortcli reached the device"
sed 's/^/ /' /tmp/hailo_id.txt | head -8
else
bad "hailortcli could not reach the device"
fi
else
bad "hailortcli not found (comes with hailo-h10-all)"
fi
head_ "9. Room for the model zoo"
avail=$(df -BG --output=avail / 2>/dev/null | tail -1 | tr -d ' G')
if [ -n "$avail" ] && [ "$avail" -ge 16 ] 2>/dev/null; then
ok "${avail}G free on /"
else
bad "only ${avail:-?}G free on / - want 16G+"
fi
head_ "10. Is port 8000 already taken?"
if command -v ss > /dev/null 2>&1 && ss -ltn 2>/dev/null | grep -q ':8000 '; then
bad "something is already listening on :8000"
note "hailo-ollama binds 8000. Stop the other service or move it."
else
ok "port 8000 free"
fi
printf '\n== %d passed, %d failed ==\n' "$pass" "$fail"
[ "$fail" -eq 0 ] && printf 'Ready for the model zoo.\n' \
|| printf 'Fix the FAILs above first.\n'
exit 0
✅ ACTUALLY RUN · the script above, on aarch64 Linux with no Pi and no HAT, 27 September 2026
== 1. Board ==
FAIL need a Raspberry Pi 5, found: unknown
== 2. Architecture - 64-bit is mandatory ==
OK arch aarch64
== 3. OS - must be Trixie / Debian 13 ==
FAIL Ubuntu 24.04.4 LTS - hailo-h10-all needs Trixie
Pi OS major upgrades are not supported in place. Plan a clean flash.
== 4. Kernel - 6.12 or newer ==
OK kernel 6.17.0-1018-nvidia
== 5. Is the HAT on the PCIe bus? ==
FAIL no Hailo device on the PCIe bus
Power off fully, reseat the ribbon cable, check its orientation.
== 6. Conflicting driver package ==
OK hailo-all not installed
== 7. Driver stack ==
FAIL hailo-h10-all not installed yet
FAIL no hailo kernel module loaded
== 8. Runtime talks to the chip ==
FAIL hailortcli not found (comes with hailo-h10-all)
== 9. Room for the model zoo ==
OK 3269G free on /
== 10. Is port 8000 already taken? ==
OK port 8000 free
== 5 passed, 6 failed ==
Fix the FAILs above first.
tr -d '\0' < /proc/device-tree/model 2>/dev/null. On a machine without that file, it printed a shell error. Right above the tidy output. The 2>/dev/null belongs to tr. But the shell fails first. It cannot open the file for redirection. Testing [ -r ... ] first is the fix, and it is in the version above.
เวอร์ชันแรกอ่านชื่อบอร์ดด้วย tr -d '\0' < /proc/device-tree/model 2>/dev/null บนเครื่องที่ไม่มีไฟล์นั้น มันยังพิมพ์ข้อผิดพลาดดิบ ๆ ของเชลล์ขึ้นมาเหนือผลลัพธ์ที่จัดไว้สวยงาม เพราะ 2>/dev/null เป็นของ tr แต่เชลล์ต่างหากที่พังก่อน ตอนที่มันเปิดไฟล์เพื่อเปลี่ยนทิศทางไม่ได้ วิธีแก้คือตรวจ [ -r ... ] ก่อน และมันอยู่ในเวอร์ชันข้างบนแล้ว
第一版用 tr -d '\0' < /proc/device-tree/model 2>/dev/null 读板子名。在没有这个文件的机器上,它仍然会在整齐的输出上方打出一行原始的 shell 报错。2>/dev/null 是给 tr 的,但先失败的是 shell —— 它打不开那个文件来做重定向。先用 [ -r ... ] 测一下就是解法,上面那版已经改好了。
- Download it with the button above. Copy it to the Pi.
bash hailo_preflight.sh. Read every FAIL.- Fix them in order. Check 1 first, check 10 last.
- Run it again until it says 11 passed, 0 failed.
- ดาวน์โหลดด้วยปุ่มข้างบน แล้วคัดลอกไปที่พาย
bash hailo_preflight.shแล้วอ่านทุกบรรทัดที่ FAIL- แก้ไปตามลำดับ ข้อ 1 ก่อน ข้อ 10 ทีหลังสุด
- รันซ้ำจนกว่ามันจะบอกว่าผ่าน 11 ไม่ผ่าน 0
- 用上面的按钮下载,拷到树莓派上。
bash hailo_preflight.sh,每一条 FAIL 都读。- 按顺序修。先修第 1 项,第 10 项放最后。
- 反复跑,直到它说 11 通过、0 失败。
🧠 Tutorial 3 — A model on the HAT · บทที่ 3 — โมเดลบน HAT · 教程 3 —— 让模型跑在 HAT 上
🇬🇧 English
The driver makes the chip usable. The model zoo gives it something to run.
What you get is a small server on port 8000. It speaks the same language as Ollama.
🇹🇭 ไทย
ไดรเวอร์ทำให้ชิปใช้งานได้ สวนสัตว์โมเดลให้ของมันรัน
สิ่งที่คุณจะได้คือเซิร์ฟเวอร์เล็ก ๆ บนพอร์ต 8000 ที่พูดภาษาเดียวกับ Ollama
🇨🇳 中文
驱动让芯片可用,模型园给它东西可跑。
你得到的是端口 8000 上一个小服务,说的是和 Ollama 一样的话。
6 The model zoo package · แพ็กเกจสวนสัตว์โมเดล · 模型园那个包
🇬🇧 English
This one does not come from apt. You download a .deb file straight from Hailo and install it by hand.
That means it will never update by itself. Write the version down.
🇹🇭 ไทย
อันนี้ไม่ได้มาจาก apt คุณต้องดาวน์โหลดไฟล์ .deb จาก Hailo โดยตรงแล้วติดตั้งเอง
แปลว่ามันจะไม่อัปเดตเองเลย จดเวอร์ชันไว้
🇨🇳 中文
这个不是从 apt 来的。你要直接从 Hailo 下一个 .deb,手动安装。
也就是说它永远不会自己更新。把版本号记下来。
📘 FROM THE DOCS · quoted, not run here
# A direct download, not an apt repository. Nothing will update this for you.
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
# dpkg does not fetch dependencies. If it complained, this finishes the job.
sudo apt -f install
dpkg -i unpacks one file and stops. It does not go and fetch anything the package needs. It may print an error about dependencies. The package is then half installed, not broken. sudo apt -f install finishes it. This surprises people who only ever use apt.
dpkg -i แตกไฟล์เดียวแล้วจบ มันไม่ไปดึงสิ่งที่แพ็กเกจต้องใช้มาให้ ถ้ามันขึ้นข้อผิดพลาดเรื่องสิ่งที่ต้องพึ่งพา แปลว่าแพ็กเกจติดตั้งไปครึ่งเดียว ไม่ใช่พัง ใช้ sudo apt -f install เพื่อทำให้จบ คนที่ใช้แต่ apt มักประหลาดใจกับเรื่องนี้
dpkg -i 解开一个文件就停。它不会去取这个包需要的其他东西。如果它报了依赖错误,说明包装了一半,不是坏了。sudo apt -f install 把它补完。只用过 apt 的人常被这个绊住。
7 List, pull, ask · ดูรายการ ดึงมา แล้วถาม · 列出、拉取、提问
🇬🇧 English
Start the server, then use it from a second terminal. Three calls: list, pull, chat.
The server holds the terminal while it runs. Step 8 fixes that.
🇹🇭 ไทย
เปิดเซิร์ฟเวอร์ แล้วใช้มันจากเทอร์มินัลที่สอง สามคำสั่ง คือดูรายการ ดึงมา และคุย
เซิร์ฟเวอร์จะยึดเทอร์มินัลไว้ตอนทำงาน ขั้นที่ 8 แก้เรื่องนั้น
🇨🇳 中文
先把服务起起来,然后在第二个终端里用它。三个调用:列出、拉取、对话。
服务跑着的时候会占住这个终端。第 8 步解决这件事。
📘 FROM THE DOCS · quoted, not run here
# Starts in the foreground and binds port 8000. It holds this terminal.
hailo-ollama
# --- everything below goes in a SECOND terminal ---
# Which models will actually run on this chip. Trust this over any web page.
curl --silent http://localhost:8000/hailo/v1/list
# Fetch one. stream:true prints progress instead of waiting in silence.
curl --silent http://localhost:8000/api/pull \
-H 'Content-Type: application/json' \
-d '{ "model": "qwen2:1.5b", "stream": true }'
# Ask it something. Same shape as the Ollama chat API.
curl --silent http://localhost:8000/api/chat \
-H 'Content-Type: application/json' \
-d '{"model": "qwen2:1.5b", "messages": [{"role": "user", "content": "Hello"}]}'
qwen2:1.5b, qwen2.5:1.5b, qwen2.5-coder:1.5b, deepseek_r1_distill_qwen:1.5b and a llama3.2 of one size or another. The tags do not match across sources. This page cannot test any of them. Your own box prints a list from /hailo/v1/list. That one is the only true one.
รายการที่เผยแพร่กันว่ารันบน Hailo-10H ได้ ขัดแย้งกันเอง รวมกันแล้วมีชื่อ qwen2:1.5b, qwen2.5:1.5b, qwen2.5-coder:1.5b, deepseek_r1_distill_qwen:1.5b และ llama3.2 ขนาดใดขนาดหนึ่ง แท็กไม่ตรงกันระหว่างแหล่งข้อมูล และหน้านี้ทดสอบอะไรไม่ได้เลย รายการที่เครื่องของคุณเองพิมพ์ออกมาจาก /hailo/v1/list คืออันเดียวที่จริง
各处公布的 Hailo-10H 可跑模型清单互相打架。合起来提到 qwen2:1.5b、qwen2.5:1.5b、qwen2.5-coder:1.5b、deepseek_r1_distill_qwen:1.5b,还有某个尺寸的 llama3.2。各来源的标签对不上,而这一页一个都测不了。只有你自己机器从 /hailo/v1/list 打出来的那份是真的。
gemma3 or llama3.3, and expect it to work. It will not. A model has to be compiled for the Hailo-10H first. The list endpoint is not a search of the internet. It is a short menu of what Hailo has built. This is the single biggest surprise on the whole board.
API หน้าตาเหมือน Ollama คนจึงลอง gemma3 หรือ llama3.3 แล้วคาดว่าจะใช้ได้ มันไม่ได้ โมเดลต้องถูกคอมไพล์สำหรับ Hailo-10H ก่อน จุดที่ดูรายการไม่ใช่การค้นหาทั้งอินเทอร์เน็ต มันคือเมนูสั้น ๆ ของสิ่งที่ Hailo สร้างไว้แล้ว นี่คือเรื่องที่คนประหลาดใจที่สุดของบอร์ดนี้
这个 API 长得像 Ollama,于是人们去试 gemma3 或 llama3.3,以为能用。不能。模型必须先为 Hailo-10H 编译过。那个列表接口不是在搜整个互联网,它是 Hailo 已经编好的一份短菜单。这是整块板子上最大的意外。
8 Keep it running after you log out · ให้มันทำงานต่อหลังคุณออกจากระบบ · 你退出登录后让它继续跑
🇬🇧 English
hailo-ollama runs in front of you and stops when you close the terminal. No service file comes with it.
So write one. Then it starts at boot and comes back if it crashes.
🇹🇭 ไทย
hailo-ollama ทำงานอยู่ข้างหน้าคุณ และหยุดเมื่อคุณปิดเทอร์มินัล มันไม่มีไฟล์เซอร์วิสมาให้
งั้นก็เขียนเอง แล้วมันจะเริ่มตอนบูต และกลับมาเองถ้าพัง
🇨🇳 中文
hailo-ollama 跑在你面前,你一关终端它就停。它没带服务文件。
那就自己写一个。这样开机它就起来,崩了还会自己回来。
🛠️ NOT FROM THE DOCS · the ordinary systemd pattern, adjust User=
# /etc/systemd/system/hailo-ollama.service
[Unit]
Description=Hailo Ollama server
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/bin/hailo-ollama
User=pi
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
🛠️ NOT FROM THE DOCS · turning it on
# daemon-reload tells systemd to read the new file. It will not find it alone.
sudo systemctl daemon-reload
# enable means start at boot. --now also starts it this second.
sudo systemctl enable --now hailo-ollama
systemctl status hailo-ollama
journalctl -u hailo-ollama -f
/usr/bin/hailo-ollama. That is the usual place for a .deb. But check yours with command -v hailo-ollama. Use whatever it prints. A unit with the wrong path fails. The message does not obviously say "wrong path".
ไฟล์ยูนิตข้างบนเขียนว่า /usr/bin/hailo-ollama นั่นเป็นที่ปกติของ .deb แต่ให้ตรวจของคุณด้วย command -v hailo-ollama แล้วใช้ตามที่มันพิมพ์ออกมา ยูนิต systemd ที่พาธผิดจะล้มเหลวพร้อมข้อความที่ไม่ได้บอกชัด ๆ ว่า "พาธผิด"
上面的 unit 写的是 /usr/bin/hailo-ollama。这是 .deb 的常见位置,但你还是用 command -v hailo-ollama 查一下,按它打出来的写。路径写错的 systemd unit 会失败,而报错并不会明说"路径错了"。
🚧 Tutorial 4 — Four things that will bite · บทที่ 4 — สี่เรื่องที่จะกัดคุณ · 教程 4 —— 会咬人的四件事
9 Read these before you buy · อ่านพวกนี้ก่อนจ่ายเงิน · 掏钱之前先读这些
| What bitesอะไรกัด什么咬人 | Whyเพราะอะไร为什么 | What to doทำยังไง怎么办 |
|---|---|---|
| Only Hailo modelsเฉพาะโมเดลของ Hailo只能用 Hailo 的模型 | Each one is compiled for the chipแต่ละตัวถูกคอมไพล์มาเพื่อชิปนี้每个都是为这颗芯片编译的 | Check the list before you plan anythingดูรายการก่อนวางแผนอะไรทั้งนั้น做任何计划之前先看清单 |
| Port 8000, not 11434พอร์ต 8000 ไม่ใช่ 11434端口是 8000,不是 11434 | Ollama tools assume 11434เครื่องมือของ Ollama เดาว่าเป็น 11434Ollama 的工具默认 11434 | Change the base URL, not the codeเปลี่ยน base URL ไม่ใช่เปลี่ยนโค้ด改 base URL,不用改代码 |
| Everything is about 1.5Bทุกตัวประมาณ 1.5B全都是 1.5B 上下 | 8 GB holds the model and its working space8 GB เก็บทั้งโมเดลและพื้นที่ทำงาน8 GB 要装模型和它的工作空间 | Expect a small model, done fastคาดหวังโมเดลเล็กที่เร็ว预期是一个小模型,但很快 |
| No automatic updatesไม่มีการอัปเดตอัตโนมัติ没有自动更新 | The zoo is a downloaded fileสวนสัตว์เป็นไฟล์ที่ดาวน์โหลดมา模型园是个下载来的文件 | Write the version down. Check by hand.จดเวอร์ชันไว้ แล้วตรวจเอง把版本记下来,自己去查 |
🏆 Tutorial 5 — Four challenges · บทที่ 5 — โจทย์สี่ข้อ · 教程 5 —— 四道题
🇬🇧 English
These need the hardware. Try each one before opening the answer.
The answers come from the manuals, like the rest of this page. Check them against your own box.
🇹🇭 ไทย
ข้อพวกนี้ต้องมีฮาร์ดแวร์ ลองเองก่อนเปิดเฉลยทุกข้อ
เฉลยเขียนจากคู่มือ เหมือนส่วนอื่นของหน้านี้ ให้ตรวจกับเครื่องของคุณเอง
🇨🇳 中文
这些题需要硬件。每一题都先自己试,再打开答案。
答案和这一页其余部分一样,是照手册写的。请拿你自己的机器核对。
10 Try first. The answers are folded away. · ลองเองก่อน เฉลยพับซ่อนไว้ · 先自己试。答案折起来放着。
1Ask it a question from another computer · ถามมันจากคอมพิวเตอร์เครื่องอื่น · 从另一台电脑问它
🇬🇧 English
By default the server answers only the Pi itself. Reach it from your laptop instead.
Do it without changing any code on the Pi.
🇹🇭 ไทย
ปกติเซิร์ฟเวอร์ตอบเฉพาะตัวพายเอง ลองเข้าถึงมันจากแล็ปท็อปของคุณแทน
ทำโดยไม่แก้โค้ดบนพายเลย
🇨🇳 中文
默认情况下这个服务只回答树莓派自己。改成从你的笔记本去够它。
而且不要改树莓派上的任何代码。
Show the answerดูเฉลย看答案
🛠️ NOT FROM THE DOCS · ordinary ssh tunnelling
# An ssh tunnel. -L means: port 8000 on my laptop becomes port 8000 on the Pi.
# Nothing on the Pi changes, and nothing new is exposed to the network.
ssh -N -L 8000:localhost:8000 pi@raspberrypi.local
# Then on the laptop, in another terminal, it looks local:
curl --silent http://localhost:8000/hailo/v1/list
2Point an Ollama tool at it · ชี้เครื่องมือของ Ollama มาที่มัน · 把 Ollama 的工具指过来
🇬🇧 English
You have a script that talks to Ollama on port 11434. Make it talk to the HAT instead.
Change as little as you can.
🇹🇭 ไทย
คุณมีสคริปต์ที่คุยกับ Ollama บนพอร์ต 11434 ทำให้มันคุยกับ HAT แทน
เปลี่ยนให้น้อยที่สุดเท่าที่ทำได้
🇨🇳 中文
你有个脚本在和端口 11434 上的 Ollama 说话。让它改去和 HAT 说话。
改动越少越好。
Show the answerดูเฉลย看答案
📘 THE docker run LINE IS FROM THE DOCS · the env var above it is not
# The API shape matches, so only the address changes. Two ports differ:
# ollama on a normal box : 11434
# hailo-ollama on the Pi : 8000
# Most tools read one of these. Set it and nothing else.
export OLLAMA_HOST=http://raspberrypi.local:8000
# Open WebUI in Docker takes it as an environment variable too.
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
3Find out how hot it gets · ดูว่ามันร้อนแค่ไหน · 看看它有多烫
🇬🇧 English
A Pi 5 slows itself down when it gets hot. Watch the temperature while the model answers.
Then decide whether you need a fan.
🇹🇭 ไทย
พาย 5 จะหรี่ความเร็วตัวเองเมื่อร้อน ดูอุณหภูมิระหว่างที่โมเดลกำลังตอบ
แล้วค่อยตัดสินใจว่าต้องมีพัดลมไหม
🇨🇳 中文
树莓派 5 一热就会自己降速。在模型回答的时候盯着温度看。
然后再决定要不要风扇。
Show the answerดูเฉลย看答案
🛠️ NOT FROM THE DOCS · ordinary Raspberry Pi commands
# watch -n 2 repeats a command every two seconds and redraws the screen.
# throttled=0x0 means nothing has been slowed down. Anything else is a warning.
watch -n 2 'vcgencmd measure_temp; vcgencmd get_throttled'
# Leave that running, then send a long prompt from another terminal and watch.
0x0 means the Pi has never slowed itself down since boot. Any other value means it did. The bits say whether it was heat or power. The HAT draws real current. So the power bits matter as much as the heat ones. That is why the 27 W supply is on the shopping list.
ค่านี้เป็นชุดของแฟล็ก ไม่ใช่ตัวเลขให้อ่านตรง ๆ 0x0 แปลว่าพายไม่เคยหรี่ตัวเองเลยตั้งแต่บูต ค่าอื่นแปลว่ามันเคยหรี่ และบิตต่าง ๆ บอกว่าเป็นเพราะความร้อนหรือเพราะไฟ HAT ที่กินกระแสจริงจังทำให้บิตเรื่องไฟสำคัญพอ ๆ กับบิตเรื่องความร้อน นั่นคือเหตุผลที่อะแดปเตอร์ 27 วัตต์อยู่ในรายการของที่ต้องซื้อ
这个值是一组标志位,不是拿来直接读的数字。0x0 表示开机以来树莓派从没给自己降过速。别的值表示降过,而那些位会说是因为热还是因为供电。一块真吃电的 HAT 会让供电那几位和温度那几位一样要紧——这就是购物清单上要 27 瓦电源的原因。
4Make the preflight script check one more thing · ให้สคริปต์ตรวจเพิ่มอีกอย่าง · 让检查脚本多查一项
🇬🇧 English
Add an eleventh section: is the model zoo already installed?
Use the same ok and bad helpers the script already has.
🇹🇭 ไทย
เพิ่มการตรวจข้อที่สิบสอง คือสวนสัตว์โมเดลติดตั้งไว้แล้วหรือยัง
ใช้ตัวช่วย ok กับ bad ที่สคริปต์มีอยู่แล้ว
🇨🇳 中文
加第十二项检查:模型园是不是已经装好了?
用脚本里已经有的 ok 和 bad 两个帮手。
Show the answerดูเฉลย看答案
🛠️ NOT FROM THE DOCS · extends the script in step 5
# Add this before the final printf in hailo_preflight.sh.
head_ "11. Gen AI model zoo"
if command -v hailo-ollama > /dev/null 2>&1; then
ok "hailo-ollama found at $(command -v hailo-ollama)"
note "use that path in the systemd unit"
else
bad "hailo-ollama not installed"
note "that is expected before you install the model zoo"
fi
🇬🇧 English
Note what the answer prints. It gives you the real path. Step 8 needs that for the service file.
A check that hands you the next answer is the best kind. Better than one saying only yes or no.
🇹🇭 ไทย
สังเกตสิ่งที่เฉลยพิมพ์ออกมา มันให้พาธจริงกับคุณ ซึ่งขั้นที่ 8 ต้องใช้ในไฟล์เซอร์วิส
การตรวจที่ยื่นคำตอบข้อถัดไปให้คุณ มีค่ามากกว่าการตรวจที่บอกแค่ใช่หรือไม่ใช่
🇨🇳 中文
注意答案打出了什么。它给你真实路径,而第 8 步写服务文件正需要它。
一个顺手把下一个答案递给你的检查,比只会答"是"或"否"的检查有用得多。
🇬🇧 English
One card, one package, one file, one server. That is the whole road.
The hard parts are not the commands. They are choosing Trixie before you flash. And knowing the model list is short.
Get those two right and the rest is an afternoon.
🇹🇭 ไทย
การ์ดหนึ่งใบ แพ็กเกจหนึ่งตัว ไฟล์หนึ่งไฟล์ เซิร์ฟเวอร์หนึ่งตัว นั่นคือเส้นทางทั้งหมด
ส่วนที่ยากไม่ใช่คำสั่ง แต่คือการเลือก Trixie ก่อนแฟลช และการรู้ว่ารายการโมเดลนั้นสั้น
ทำสองอย่างนั้นให้ถูก ที่เหลือใช้เวลาแค่บ่ายเดียว
🇨🇳 中文
一张卡、一个包、一个文件、一个服务。整条路就这些。
难的不是命令。难的是烧录之前就选对 Trixie,以及知道模型清单很短。
这两件做对,剩下的就是一个下午。
| You wantคุณอยากได้你想要 | Look upไปหาคำว่า去查 |
|---|---|
| Cameras and object findingกล้องและการหาวัตถุ摄像头和找物体 | rpicam-apps, picamera2 |
| A browser front endหน้าเว็บไว้คุย一个浏览器界面 | open-webui |
| To see what the chip is doingดูว่าชิปกำลังทำอะไร看芯片在干什么 | hailortcli monitor |
| Models built for the chipโมเดลที่สร้างมาเพื่อชิปนี้为这颗芯片编的模型 | hailo_model_zoo_genai |
| Boot from a fast diskบูตจากดิสก์เร็ว从快盘启动 | rpi-clone, NVMe HAT |
🇬🇧 English
Next: the Linux command line, sed, awk and curl, or a model that scores instead of writing.
🇹🇭 ไทย
ต่อไป: บรรทัดคำสั่งของลินุกซ์, sed, awk และ curl หรือ โมเดลที่ให้คะแนนแทนการเขียน
🇨🇳 中文
接下来:Linux 命令行、sed、awk 和 curl,或者一个只打分不写字的模型。