Continuing my adventures with hailo-10H and raspberry pi, this is what I needed to do to get hailo-ollama working. One note: I’m not using the default port of 8000 as I’m using it for another service. So, you can probably skip those steps.
Setup:
HailoRT 5.3.0
Hailo-10H adapter
hailo-ollama running as a systemd service under a non-root user
Service configured with Environment=OLLAMA_HOST=0.0.0.0:11000
Symptoms:
The server started and responded to /api/version and /api/tags
/api/generate and /api/chat both failed with:
“LLM not loaded”
Failed to create VDevice
Failed to open device file /dev/h1x-0 with error 13 (Permission denied)
Root Cause:
The Hailo device node (/dev/h1x-0) was created with root:root permissions (mode 600). No hailo group existed, so the non-root user running hailo-ollama could not access the device.
Continuing my adventures getting hailo-10 working with ollama, and running as the frontend for a hermes agent. Please note that the previously documented steps for 99-hailo.rules is incorrect. Below is better steps and configuration.
Troubleshooting hailo-ollama on Raspberry Pi 5 + Hailo-10H
Date: July 2026 Hardware: Raspberry Pi 5 (8GB) + Raspberry Pi AI HAT+ 2 (Hailo-10H) Goal: Run a fast, always-on local LLM frontend using hailo-ollama with systemd
Introduction
The hailo-ollama project is a custom C++ port/fork of Ollama optimized for Hailo accelerators. While it provides excellent performance on the Hailo-10H, it has several important behavioral differences from the official Go-based Ollama. These differences can cause confusing failures when following standard Ollama documentation or assumptions.
This guide documents the issues encountered while setting up hailo-ollama as a systemd service with a dedicated model directory and persistent model loading (keep_alive).
During configuration, I moved hailo-ollama from running as the typical user, and moved it to a new hailo-ollama user. Most of these troubleshooting steps were failures with am llm trying to configure hailo-ollama correctly and required manual intervention.
The biggest problem of course is that LLMs will try to treat hailo-ollama as ollama.
Troubleshooting Ledger
Step
Problem
Root Cause
Solution
1
Changes to environment variables (e.g. model path) did not take effect after systemctl daemon-reload
daemon-reload only updates systemd’s configuration. It does not restart the running process or apply new environment variables to it.
Run sudo systemctl restart hailo-ollama to fully stop and restart the service with the new environment.
2
systemd reported “Unknown key” for rate-limiting settings
StartLimitIntervalSec and StartLimitBurst must be placed in the [Unit] section in modern versions of systemd.
Moved both directives into the [Unit] section.
3
JSON parse error / HAILO_INTERNAL_FAILURE(8) after configuration changes
The running service was still using old/broken model manifests and templates from the previous directory.
Restarted the service to clear stale state, then performed a clean model pull.
4
HTTP 500 error when using curl -X POST … -d ‘{…}’
curl -d defaults to application/x-www-form-urlencoded. The oatpp web framework used by hailo-ollama expects raw JSON.
Added the header: -H “Content-Type: application/json”
5
“Model not found” even though model files existed on disk
Moving or copying model files manually broke the cryptographic manifests and symlinks that Ollama-style systems rely on.
Triggered a fresh /api/pull so the daemon could rebuild proper metadata and symlinks.
6
hailo-ollama CLI crashed with port conflict when trying to pull a model
Unlike upstream Ollama, the hailo-ollama CLI attempts to start its own web server during pull operations. It conflicts with an already-running daemon on the same port.
Bypassed the CLI entirely and triggered model downloads by sending a JSON payload directly to the running daemon’s /api/pull endpoint via curl.
Key Lessons & Gotchas
Forks have different behavior: Do not assume hailo-ollama behaves exactly like official Ollama. The CLI in particular has different behavior around server startup and manifest handling.
systemd environment changes require a restart: systemctl daemon-reload is not enough when changing Environment= variables. You must restart the service.
Rate limiting directives belong in [Unit]: Modern systemd is strict about this. Placing them in [Service] causes them to be ignored.
Manifests and symlinks are fragile: Manually moving model directories often breaks internal linkages. Let the daemon rebuild them via /api/pull.
Use the API when the daemon is running: When hailo-ollama is already running as a service, prefer sending requests to /api/pull and /api/generate rather than using the CLI.
OLLAMA_KEEP_ALIVE=-1 → Model stays loaded for fast responses
Dedicated hailo-ollama system user + /var/lib/hailo-ollama directory
Rate limiting correctly placed in [Unit]
Additional Recommendations
Create a dedicated system user (hailo-ollama) rather than running as your personal user.
Use proper udev rules so the non-root user can access the Hailo device (/dev/h1x-*).
When the service is running, manage models via the HTTP API instead of the CLI to avoid port conflicts.
Monitor logs with: journalctl -u hailo-ollama -f
Conclusion
While hailo-ollama delivers strong performance on the Hailo-10H, it requires more careful systemd integration and a different operational approach than standard Ollama. The combination of proper service configuration, forced restarts after environment changes, and using the HTTP API for model management results in a stable, low-latency local inference setup suitable for always-on agentic frontends.
Thanks for posting this. I did a few tiny tweaks to the git clone:
git clone http s://github.com/hailo-ai/hailort/ (stupid system here keeps expanding URLs)
and a sudo make install_dkms
But other than that up and running. Ollama is annoying, I’d really rather run a real version than Hailo’s with their dippy little models. The 10h should be able to run Gemma4 e4b or something at least with tools support.
I’m glad I came across this post. Doing the exact project, wanted the hat to run Ollama with a Hermes agent frontend. I got 5.3.0 firmware going, but have a heck of a time setting up the service daemon and then Hermes.
I’ve started over a few times, still not done. Now 5.4.0 is out…