智能家居大脑:树莓派+Ollama
本文的目标不是与数据中心 GPU 竞争。而是构建一个实用的、私有的、始终在线的 AI 节点——你可以将其集成到家庭自动化、开发工作流或离线实验中,而无需依赖外部基础设施。
微信 ezpoda免费咨询:AI编程 | AI模型微调| AI私有化部署
AI工具导航 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo
在本地运行大语言模型曾经意味着需要一台功耗很高的桌面 GPU,以及相当的耐心。借助 Raspberry Pi 5 和 Raspberry Pi AI HAT+ 2(Hailo-10H),这个门槛大大降低了。你可以构建一个紧凑、低功耗的系统,在你的桌面上——或者就我而言,在电视柜上——完全运行 LLM 推理。
本指南将介绍如何使用 Ubuntu Server 24.04、Raspberry Pi AI HAT+ 2、Hailo 的 Ollama 兼容运行时和 OpenWebUI,在 Raspberry Pi 5 上搭建一个完全本地的 LLM 环境。完成后,你将拥有一个开机自动启动的持久化系统服务,并提供一个完全由本地硬件驱动的基于浏览器的聊天界面。
目标不是与数据中心 GPU 竞争。而是构建一个实用的、私有的、始终在线的 AI 节点——你可以将其集成到家庭自动化、开发工作流或离线实验中,而无需依赖外部基础设施。
在最终的设置中,架构如下:
浏览器
↓
OpenWebUI(systemd 服务,端口 8080)
↓
hailo-ollama(systemd 服务,端口 8000)
↓
/dev/hailo0
↓
Hailo-10H 硬件加速器
核心思路是保持技术栈原生化和持久化:不使用 Docker,重启后无需手动启动步骤,并且尽可能减少活动部件。
1、从"从零构建"到"让它稳定"
最初的计划很简单:在 Raspberry Pi 5 上使用 Ubuntu 和 AI HAT+ 2 运行完全本地的 LLM,只使用原生 Linux 组件。
所以我按照很多人会做的方式开始:手动构建所有东西。这意味着针对当前内核编译 Hailo 内核驱动、构建运行时库,并逐个组件地将技术栈组装在一起。理论上,这提供了最大程度的控制。但实际上,这变成了一个维护循环。内核模块构建对微小的变化很敏感——编译器版本、头文件不匹配、内核小版本更新。修复一个问题,又遇到下一个。即使设备正确显示为 /dev/hailo0,用户空间运行时也必须与硬件代次完全匹配。有些版本能检测到设备但无法正确通信,有些则根本还没有 Ubuntu 的打包版本。
在那个阶段,问题已经不是"这能工作吗?"——显然可以。
问题是"这能持续工作吗?"
与其继续手动重新构建一切,我转而使用 Raspberry Pi 仓库来获取 Hailo 驱动和运行时包。起初这感觉像是妥协,因为基础系统是 Ubuntu。但通过严格限制只使用 Hailo 组件,兼容性问题从未出现。差异立竿见影:
- 内核模块干净加载
- 运行时与硬件匹配
- 模型直接初始化
- 推理服务器在重启后保持稳定
从源代码构建提供控制,但使用厂商维护的包提供稳定性。对于这个项目,稳定性胜出了——正是这一点使它从一个实验变成了可靠的、始终在线的本地 AI 节点。
接下来,让我们一步步介绍安装步骤。
注意! 在撰写本文时,Raspberry Pi 官方针对 AI HAT+ 2 的 LLM 设置指南引用的是 Hailo GenAI Model Zoo 包的 5.1.1 版本。我在此使用了相同版本以与厂商文档保持一致。除此之外,5.2.0 版本在官方仓库中本来也找不到。
2、安装 Hailo 内核驱动
第一步是获取内核级别的组件,以便 Ubuntu 能正确与加速器通信。由于所需的 Hailo 包可以通过 Raspberry Pi 包仓库获取,我添加了该仓库并设置了固定优先级,使只有 Hailo 相关的包会从那里拉取:
curl -fsSL https://archive.raspberrypi.com/debian/raspberrypi.gpg.key \
| sudo gpg --dearmor -o /usr/share/keyrings/raspberrypi-archive-keyring.gpg
echo "deb [arch=arm64 signed-by=/usr/share/keyrings/raspberrypi-archive-keyring.gpg] \
http://archive.raspberrypi.com/debian trixie main" \
| sudo tee /etc/apt/sources.list.d/raspberrypi.list
然后创建一个 APT 固定文件,防止 Ubuntu 对无关组件优先使用 Raspberry Pi 包:
nano /etc/apt/preferences.d/raspberrypi-pin
Package: *
Pin: origin archive.raspberrypi.com
Pin-Priority: 1
Package: h10-hailort-pcie-driver hailort hailort-* libhailort* hailo*
Pin: origin archive.raspberrypi.com
Pin-Priority: 1001
设置完成后,安装内核驱动和匹配的内核头文件:
sudo apt update
sudo apt install h10-hailort-pcie-driver linux-headers-$(uname -r)
要验证系统能看到设备,检查 Hailo 设备节点:
ls -l /dev/hailo*
crw-rw-rw- 1 root root 234, 0 Feb 24 23:00 /dev/hailo0
如果 /dev/hailo0 存在,说明内核层面的设置状态良好。
3、安装 Hailo 运行时
驱动加载并暴露设备后,下一层是 Hailo 运行时本身。这使得用户空间应用程序能够正确与加速器通信。安装 Hailo-10H 运行时:
sudo apt install h10-hailort
然后验证运行时能否与硬件通信:
hailortcli fw-control identify
输出应包含类似以下内容:
Firmware Version: 5.1.1
Device Architecture: HAILO10H
这是一个重要的检查点。在此阶段,硬件不仅被 Linux 检测到——它还通过运行时栈正确响应。
4、安装 Hailo Ollama 运行时
底层组件工作后,下一步是推理层。在这个设置中,该角色由 hailo-ollama 处理,它提供了一个 Ollama 兼容的 API 服务器。安装模型库包:
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_*.deb
安装后,验证 API 是否响应:
curl http://localhost:8000/hailo/v1/list
如果一切正常,你应该得到一个列出可用模型的 JSON 响应:
{"models":[...]}
至此,后端推理服务已启动并准备就绪。
5、安装和配置 OpenWebUI
对于前端,我想要一个简单的 Web 界面而不引入容器,所以 OpenWebUI 被直接安装到它自己的 Python 虚拟环境中。
首先,创建一个专用的服务用户:
sudo useradd -r -m -d /opt/openwebui -s /usr/sbin/nologin openwebui
然后切换到该用户并在虚拟环境中安装 OpenWebUI:
sudo -u openwebui bash
cd /opt/openwebui
python3 -m venv venv
source venv/bin/activate
pip install open-webui
exit
将 OpenWebUI 放在自己的系统用户下使设置更整洁,也更容易管理。
接下来,为 OpenWebUI 创建一个小型环境文件:
nano /opt/openwebui/env
OLLAMA_BASE_URL=http://localhost:8000
WEBUI_AUTH=False
这里重要的是 OLLAMA_BASE_URL=http://localhost:8000,它将 OpenWebUI 指向本地的 hailo-ollama 服务。
6、为 Hailo Ollama 创建 systemd 服务
推理服务也需要自动启动,因此创建一个 systemd 单元:
nano /etc/systemd/system/hailo-ollama.service
[Unit]
Description=Hailo Ollama Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/hailo-ollama serve
Restart=always
[Install]
WantedBy=multi-user.target
启用并启动它:
sudo systemctl daemon-reload
sudo systemctl enable hailo-ollama
sudo systemctl start hailo-ollama
7、为 OpenWebUI 创建 systemd 服务
要使 Web 界面在重启后保持持久化,创建一个 systemd 服务:
nano /etc/systemd/system/openwebui.service
[Unit]
Description=OpenWebUI Service
After=network.target hailo-ollama.service
Wants=hailo-ollama.service
[Service]
Type=simple
WorkingDirectory=/opt/openwebui
EnvironmentFile=/opt/openwebui/env
ExecStart=/opt/openwebui/venv/bin/open-webui serve --host 0.0.0.0 --port 8080
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
然后重新加载 systemd,启用服务并启动它:
sudo systemctl daemon-reload
sudo systemctl enable openwebui
sudo systemctl start openwebui
启用两个服务后,系统在重启后能干净地恢复,并自动还原完整的本地 LLM 技术栈。
8、访问 Web UI
最后,当两个服务都运行时,打开浏览器并连接到:
http://<raspberry-pi-ip>:8080
如果后端可访问,模型会自动出现在 OpenWebUI 中,系统就可以使用了。

9、结束语
Raspberry Pi 5 和 AI HAT+ 2 确实可以变成一个完全本地的 LLM 设备,这本身就令人印象深刻。但实现这一点仍然更关乎精心的集成,而不是开箱即用的简单。一旦技术栈稳定,它是整洁、安静和自包含的——但性能仍然有限,生成速度相对较慢,可用的模型范围也较窄。所以,暂时别指望它能成为你的"ChatGPT 替代品"。
更大的问题是软件支持——尤其是在 Raspberry Pi OS 之外。Raspberry Pi 在 2026 年 1 月推出了 AI HAT+ 2,但其官方文档仍然引用 GenAI 包 5.1.1 版本,而 Hailo 自己的生态系统已经指向 Hailo-10H 的 5.2.0 版本支持。对于一款旨在在 Pi 上实现本地 AI 的产品来说,这种滞后很难忽视。特别是结合某些模型已被替换的事实——最值得注意的是 Llama-3.2-3B-Instruct 模型。这本身不会破坏项目,但它确实让平台显得不够成熟——这也让购买决策更难合理化,除非你特别享受处理粗糙边缘的过程。对于喜欢实验的爱好者来说,这很有趣。对于任何期待一个精致的开箱即用本地 LLM 平台的人来说,它可能还没到那个程度。
原文链接: Running Local LLMs on Raspberry Pi 5 and Hailo AI HAT+ 2
汇智网翻译整理,转载请标明出处