Skip to main content
AI Hardware

Hailo-8L on Raspberry Pi 5: the install I keep notes on

· · 4 min read

I picked up a Hailo-8L last month because my Frigate NVR was choking on object detection across four cameras. CPU inference on a Pi 5 keeps hitting 85% utilization, which means dropped frames and missed detections. The accelerator promised 13 TOPS and a way to actually use that M.2 slot. Spoiler: it works, but the path from unboxing to ‘running inference’ isn’t as obvious as it should be.

Hailo-8L screenshot
Hailo-8L u2014 from the official site

Why you might want this

The Hailo-8L sits in the Pi 5’s M.2 HAT slot and offloads AI inference entirely to dedicated hardware. That’s different from GPU acceleration on other boards. You’re not competing with system load for compute. Frigate can delegate object detection, pose estimation, and other vision tasks. Home Assistant can run local models for automations without slowing down the main instance. If you’re already running container-based home automation at scale, this fills a real gap.

It’s not cheap at around $120, and it only works on Pi 5. But if you’re past the tinkering phase and actually want reliable AI on modest hardware, the math works.

What you need before you start

  • Raspberry Pi 5 (8GB minimum, though 4GB works)
  • Latest Raspberry Pi OS (bookworm). Bullseye will not cooperate.
  • The M.2 HAT and Hailo-8L module itself
  • A USB cable and maybe 30 minutes
  • Internet connection for downloading models and SDK packages

Make sure your Pi is fully updated before touching anything else. I skipped this step once and spent an hour debugging kernel module mismatches.

sudo apt update
sudo apt upgrade -y
sudo reboot

Physical install and drivers

The M.2 HAT clips onto the Pi’s expansion connector. The Hailo module slots into the M.2 connector on the HAT. Both of these are press-fit — you don’t need screws, though the HAT does come with standoffs if you want them. Let it sit flush. Power the Pi and check that the board is recognized.

lspci

You should see something like:

0000:01:00.0 Co-processor: Hailo Technologies Ltd. Hailo-8

If you get nothing, power off, reseat both connections, and try again. No sane error messages; it either shows up or it doesn’t.

Next, grab the Hailo runtime and dev packages from Hailo’s repository. This is where the instructions get scattered across different docs, and I always end up cross-referencing three pages.

curl https://hailo-public-repo.s3.eu-west-1.amazonaws.com/common/hailo-rpi5-setup.sh | bash

This script adds Hailo’s package repo and installs the runtime, dev tools, and PCIe drivers. It’s reasonably well-behaved — no random sudo calls during install, just sets up the repo and pulls dependencies. Takes about five minutes.

After it finishes:

sudo reboot

Your first inference

Hailo ships with a basic test suite and pre-compiled models. Verify the install by running a quick inference check:

hailortcli fw-info

You’ll see firmware version and device info. If this works, the driver stack is solid.

Now run a real example. Hailo includes a Python demo that does object detection on a webcam or image file:

pip3 install hailo-sdk-common

The SDK includes pre-built models for common tasks. Download one and test it:

python3 -m hailo_sdk_common.examples.detection --input image.jpg

If you don’t have an image handy, grab one from somewhere or use /dev/video0 if you have a camera attached. The output will show detected objects, confidence scores, and execution time. That’s your proof the accelerator is doing actual work.

Integrating with Frigate (or whatever else you’re running)

Most people want this for Frigate NVR. The integration is built-in. You need to mount the Hailo device into your container and tell Frigate which detector to use.

If you’re running Frigate in Docker, your compose file needs device access:

services:
  frigate:
    image: ghcr.io/blakeblackshear/frigate:0.13.2
    devices:
      - /dev/hailo0:/dev/hailo0
    volumes:
      - ./config/frigate.yml:/config/config.yml
    environment:
      - LIBVA_DRIVER_NAME=hailo

And in your Frigate config, specify the detector:

detectors:
  hailo:
    type: hailo
    device_id: 0

Then assign it to your cameras:

cameras:
  front_door:
    detector:
      - hailo

Restart the container. Frigate will load the model and start detecting. Watch the logs — it takes a moment to initialize the first time.

The thing that bites you

There’s a permissions gotcha. The Hailo device sometimes comes up with restrictive permissions, and your container can’t access it. You’ll get a vague error about device not found. The fix is to create a udev rule:

echo 'SUBSYSTEMS=="pci", ATTRS{vendor}=="1e60", MODE="0666"' | sudo tee /etc/udev/rules.d/99-hailo.rules

Then reload:

sudo udevadm control --reload-rules
sudo udevadm trigger

After that, /dev/hailo0 should be readable by any user in the video group. I didn’t do this initially and spent twenty minutes convinced the module wasn’t loading properly.

What to do next

Once inference is working reliably, experiment with different models. Hailo’s model zoo has pre-compiled versions for various tasks. If you want custom models, you’ll need to run them through Hailo’s compiler, which requires their cloud service (no local compilation option yet). That’s a limitation worth knowing about upfront if you’re building anything proprietary.

The accelerator is genuinely stable once it’s up. I’ve had it running continuously for three weeks without crashes or thermal issues. CPU load dropped from 80% to roughly 10% on my Frigate instance, which freed capacity for other services on the same Pi.

If you’re considering this mainly for Frigate or Home Assistant automations, it’ll work. Just budget time for the driver install and expect to look up the permissions thing at least once.

Explore Hailo-8L in our AI Homelab Toolkit.

Share this article