🐃

c5gEpL">

  1. 🍤

      🏊💘
      🦆
    • 👵
    • 🍯🌄
      🔧
      🌸
      🥘
    • 💈

      智能家居大脑:树莓派+Ollama

      发布时间:2026-03-20 19:59  浏览量:1

      在本地运行大语言模型曾经意味着需要一台功耗很高的桌面 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,重启后无需手动启动步骤,并且尽可能减少活动部件。

      最初的计划很简单:在 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 版本在官方仓库中本来也找不到。

      第一步是获取内核级别的组件,以便 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.gpgecho "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-pinPackage: *Pin: origin archive.raspberrypi.comPin-Priority: 1Package: h10-hailort-pcie-driver hailort hailort-* libhailort* hailo*Pin: origin archive.raspberrypi.comPin-Priority: 1001

      设置完成后,安装内核驱动和匹配的内核头文件:

      sudo apt updatesudo 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 存在,说明内核层面的设置状态良好。

      驱动加载并暴露设备后,下一层是 Hailo 运行时本身。这使得用户空间应用程序能够正确与加速器通信。安装 Hailo-10H 运行时:

      sudo apt install h10-hailort

      然后验证运行时能否与硬件通信:

      hailortcli fw-control identify

      输出应包含类似以下内容:

      Firmware Version: 5.1.1Device Architecture: HAILO10H

      这是一个重要的检查点。在此阶段,硬件不仅被 Linux 检测到——它还通过运行时栈正确响应。

      底层组件工作后,下一步是推理层。在这个设置中,该角色由 hailo-ollama 处理,它提供了一个 Ollama 兼容的 API 服务器。安装模型库包:

      wget https://dev-public.hailo.ai/2025_12/Hailo10/hailo_gen_ai_model_zoo_5.1.1_arm64.debsudo dpkg -i hailo_gen_ai_model_zoo_*.debcurl http://localhost:8000/hailo/v1/list{"models":[...]}

      对于前端,我想要一个简单的 Web 界面而不引入容器,所以 OpenWebUI 被直接安装到它自己的 Python 虚拟环境中。

      首先,创建一个专用的服务用户:

      sudo useradd -r -m -d /opt/openwebui -s /usr/sbin/nologin openwebui

      然后切换到该用户并在虚拟环境中安装 OpenWebUI:

      sudo -u openwebui bashcd /opt/openwebuipython3 -m venv venvsource venv/bin/activatepip install open-webuiexit

      将 OpenWebUI 放在自己的系统用户下使设置更整洁,也更容易管理。

      nano /opt/openwebui/envOLLAMA_BASE_URL=http://localhost:8000WEBUI_AUTH=False

      这里重要的是 OLLAMA_BASE_URL=http://localhost:8000,它将 OpenWebUI 指向本地的 hailo-ollama 服务。

      推理服务也需要自动启动,因此创建一个 systemd 单元:

      nano /etc/systemd/system/hailo-ollama.service[Unit]Description=Hailo Ollama ServiceAfter=network.target[Service]Type=simpleExecStart=/usr/bin/hailo-ollama serveRestart=always[Install]WantedBy=multi-user.target

      启用并启动它:

      sudo systemctl daemon-reloadsudo systemctl enable hailo-ollamasudo systemctl start hailo-ollama

      要使 Web 界面在重启后保持持久化,创建一个 systemd 服务:

      nano /etc/systemd/system/openwebui.service[Unit]Description=OpenWebUI ServiceAfter=network.target hailo-ollama.serviceWants=hailo-ollama.service[Service]Type=simpleWorkingDirectory=/opt/openwebuiEnvironmentFile=/opt/openwebui/envExecStart=/opt/openwebui/venv/bin/open-webui serve --host 0.0.0.0 --port 8080Restart=alwaysRestartSec=3[Install]WantedBy=multi-user.target

      然后重新加载 systemd,启用服务并启动它:

      sudo systemctl daemon-reloadsudo systemctl enable openwebuisudo systemctl start openwebui

      启用两个服务后,系统在重启后能干净地恢复,并自动还原完整的本地 LLM 技术栈。

      最后,当两个服务都运行时,打开浏览器并连接到:

      如果后端可访问,模型会自动出现在 OpenWebUI 中,系统就可以使用了。

      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 平台的人来说,它可能还没到那个程度。

      🧥🍊

      🤹🌜

      🤳🐨

      98JdkZYOsdhfr">

      🤗🏈
      🚋
        🌎😵
        1. 🏂🌿

      1. 💠🎏
      2. 🐻