☰
树莓派4B本地部署AI大模型:从Ollama到7x24小时运行实战
2026/9/25 5:04:38 网站建设 项目流程

把标题念了三遍,越念越觉得这描述贴切。一块吃灰的树莓派4B,刷上系统、接上散热片、塞进弱电箱,就这么吭哧吭哧变成了一台7x24小时不打烊的AI打工人。我折腾完那个周末之后,最大的感受就是:这事真不难,但坑是真不少。这篇就纯当一份实战记录,把我怎么从零把它盘活、选模型、挂服务、堵漏洞的完整过程都交代清楚。如果你手头也有一块树莓派4B(哪怕只是4GB版),正好想让它干点AI的活,这篇应该能让你少走不少弯路。

先说结论:树莓派4B跑AI,跑不了那种云端满血大模型,但在本地跑量化过的7B、8B小模型完全可行,速度虽然谈不上快,但用在个人知识库问答、日志摘要、语音转文字这种异步场景里,体验是够用的。整个平台功耗也就5到8瓦,一年电费够买两杯奶茶,换来一个完全私有的AI服务,怎么看都划算。

1. 为什么非要用树莓派4B跑AI:选型与硬件取舍

1.1 树莓派4B到底能干什么,不能干什么

树莓派4B搭载的BCM2711是一颗四核Cortex-A72处理器,最高主频1.8GHz,内存有2GB、4GB、8GB三个版本。单看算力,它和一台入门级云服务器的CPU半斤八两,但显卡不存在,GPU计算全靠VideoCore VI,而这个GPU基本不参与通用计算。所以说白了,它能跑的AI模型必须是CPU推理。

CPU推理意味着什么?就是量化和剪枝过的小模型还能勉强跑,参数量大到一定程度的模型基本没戏。以我实测为准:7B参数、4-bit量化的模型,在4B上推理速度大概2到3 token每秒,干点摘要生成、问答回复这种活,几十秒等一个回答是常态。13B模型就不用想了,除非你愿意等一顿饭的时间。1.5B到3B的模型体验好很多,速度能到8到12 token每秒,勉强有对话的感觉。

这决定了整个折腾路线的基调:别追求大模型,别追求复杂多轮对话,把它定位成“夜间批处理工人+轻量查询接口”才是正解。

1.2 4GB还是8GB?先盘一下内存预算

如果你还没买树莓派,我的建议直接上8GB版。原因很简单:本地跑大模型最缺的就是内存。7B模型4-bit量化后权重文件大约4GB左右,4GB版本加载时已经贴到内存极限了,再算上系统占用和推理时的KV Cache,动不动就触发OOM。8GB版本就没这烦恼,权重占完4GB还剩一半空间做缓存和临时任务。

手头只有4GB版也不用气馁。选1.5B或者3B模型,配合3GB左右的swap,还是能用的,只是并发能力和响应速度差一些。我这套折腾全程用的就是4GB版,后来实在嫌憋屈才换成8GB,前后对比非常明显。

1.3 为什么不用旧电脑或云服务器

同价位的旧笔记本性能会比树莓派强出一截,但劣势也明显:功耗高、噪音大、体积大、24小时开机心疼电费。云服务器倒是省心,但长期租一台2核4G的轻量云,一年下来成本也不低,而且数据和Prompt全在别人服务器上,隐私这块总归不太踏实。

树莓派4B的优势恰恰是它的劣势换来的:功耗低到可以忽略,被动散热或一个小风扇就能压住,整机体积比手机还小,随便找个角落塞进去就忘掉它了。只要不跑大模型,它就是个永不关机的微服务器,这种存在感极低的特性反而是长时间运行的最终解。

2. 系统环境与基础加固:先让它能7x24活着

2.1 系统镜像怎么选:Raspberry Pi OS还是Ubuntu

我一开始直接用树莓派官方镜像工具刷了Raspberry Pi OS Lite(64位),因为它的驱动兼容性最好、社区资料最多。但后来跑Docker和Ollama的时候发现一个问题:官方系统基于Debian,部分打包的AI工具链在Bookworm上会有奇怪的依赖冲突,尤其是带CUDA后端的不会影响树莓派,但一些Python库编译时容易卡在缺失头文件上。

于是我又刷了Ubuntu Server 22.04.5 LTS for Raspberry Pi。这个版本是Canonical官方维护的,对树莓派4B的Wi-Fi、蓝牙、USB引导支持到位,而且LTS的生命周期覆盖到2027年,省心。实测下来,跑Ollama、llama-cpp-python这些工具比在Raspberry Pi OS上顺滑不少。

需要注意的一点:安装Ubuntu Server时默认用户是ubuntu,而且SSH是默认开启的。安装完成后第一件事就是改密码、建普通用户、把SSH密钥登录配上,别图省事留着密码登录。机器一旦接入家庭局域网,它就是整个内网的入口,登录策略太随便早晚出事。

2.2 供电和散热:90%的“随机重启”都出在这

树莓派4B官方推荐5V 3A电源,但很多人随手拿手机充电器顶上,这就埋了大雷。插上USB外设、再接个风扇,瞬时电流一高,电压跌落直接导致CPU降频甚至重启。我用过一个标称5V 2A的充电头,实测跑AI任务满载时内核日志里全是电压警告,后来换成官方电源适配器才消停。

散热也是必须处理的。满负载跑模型时,A72四核全开,温度轻松破80度。树莓派虽然不会烧毁自己,但温度墙一到就降频,推理速度肉眼可见地往下掉。我直接上了那种带散热片的铝壳,再加一个5V的小风扇对着吹,整天满载也就稳定在55度左右。实测满载状态下,裸板和铝壳散热的性能差异能到15%,这个差距在你等AI回话的时候会被无限放大。

2.3 SD卡寿命焦虑:日志和模型文件别都堆在系统盘

树莓派从SD卡启动,而SD卡的写入寿命和稳定性一直是老大难。AI模型文件动辄几个GB,如果每轮推理都读一遍模型文件,SD卡很快就会吃不消。我的处理方式是一套组合拳:

  • 系统、Docker、模型放SD卡,但模型加载进内存之后就不重复读了;
  • 日志目录挂到tmpfs,重启即丢,避免高频写SD;
  • 大文件缓存、临时目录放到外接USB固态盘上;
  • 仔细调低日志轮转保留数量,限制单文件大小,别让日志把卡写满。

实测下来,这样调整之后SD卡的写入量降低了九成,至少用一年没出现烂卡问题。如果你预算充足,直接换USB固态盘系统盘体验更好,但引导配置会稍微麻烦一点,需要改EEPROM的启动顺序。

3. 选模型与部署框架:从零搭起一个本地AI服务

3.1 推理框架选Ollama还是llama.cpp

树莓派上跑LLM,主流方案基本就两个:llama.cpp和Ollama。llama.cpp是底层引擎,性能和控制力最好,但你要自己处理模型文件、API封装、进程守护,整个工程量会大很多。Ollama则是在llama.cpp基础上封了一层管理工具,模型下载、部署、交互一条命令搞定,还内置了OpenAI兼容的API服务,对普通人友好得多。

我选择Ollama还有一个现实原因:它把Q4_K_M、Q5_K_M这些量化方案都自动帮你处理了,你只需要指定模型名称,它自动下载量化好的版本,跑起来之后调用方式又和OpenAI的chat/completions接口一样。这意味着我后续做的所有客户端工具都可以直接用OpenAI的SDK去对接,以后想换后端服务器,代码几乎不用改。

3.2 适合树莓派的模型清单和量化选择

我实测下来比较合适的几个模型整理如下,按体验从好到差排列:

模型参数量量化方式内存占用实测速度适合场景
qwen2.5:3b3Bq4_K_M2.2GB9-12 tok/s日常问答、摘要、日志分析
phi3:mini3.8Bq4_K_M2.7GB7-9 tok/s推理题、代码生成
llama3.2:3b3Bq4_K_M2.3GB8-10 tok/s通用对话、RAG知识库
qwen2.5:7b7Bq4_K_M4.6GB2-3 tok/s离线批处理、深度分析
llama3.1:8b8Bq4_K_M5.2GB1.5-2 tok/s几乎不可用,不推荐

从结果看,3B这个档位的模型在树莓派上是性价比最高的平衡点。我日常用的最多的是qwen2.5:3b,它的中文理解能力在这个级别里属于第一梯队。7B模型并不是完全不能用,但你要有耐心,适合放在夜里批量处理任务,不适合交互场景。

选量化时默认用Q4_K_M就够了,别为了省空间选Q2或Q3,那会明显影响回答质量,而省出的那点内存对整体体验帮助不大。

3.3 Ollama的部署和API暴露

Ollama的安装非常简单,一条脚本命令就行。装好后默认只会监听127.0.0.1,这個设计很安全,但如果我要从其他设备调用,就必须改配置让它监听局域网地址。改法是在systemd服务文件里加上Environment="OLLAMA_HOST=0.0.0.0:11434",注意这个操作的本质是把服务暴露到内网,如果你所在网络环境里有不信任的设备,建议加上访问控制,而不是直接裸奔。

我更推荐的做法是继续让它只监听本机,然后用nginx或Caddy做一层反向代理,在代理层加Token认证和路径限制。这样即便内网有其他设备,也需要带正确的Header才能访问。对我个人使用来说,家里网络设备都是自己可控的,所以Ollama直接监听局域网加防火墙限制来源IP就够了。

下面是我实际用的systemd override配置片段,供参考:

[Service] Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="OLLAMA_KEEP_ALIVE=30m" Environment="OLLAMA_MAX_LOADED_MODELS=1" Environment="OLLAMA_NUM_PARALLEL=1"

OLLAMA_KEEP_ALIVE=30m的意思是模型加载进内存后闲置30分钟再卸载。树莓派加载一个3B模型需要半分钟左右,如果不做保活,每次请求都要重新加载,体验完全没法用。OLLAMA_MAX_LOADED_MODELS=1限制同时只保留一个模型在内存里,避免多个模型抢占那可怜的几个GB内存。

3.4 实测推理速度:到底能不能用

在我的8GB版本树莓派4B上,qwen2.5:3b模型的单轮问答速度大概在每秒10个token上下。一个200字的回答,约莫20到25秒能生成完。这个速度拿来当在线chatbot确实有点着急,但你想想它一天24小时都醒着,你睡觉的时候它可以慢慢处理积压的任务,早晨起来看结果就完全不觉得慢了。

我给它设计的典型用法是异步任务模式:白天收到请求先入队,晚上统一处理,第二天输出结果。这种“白天收集需求,晚上赶工”的方式完美匹配了树莓派慢但稳的特点。

4. 实际应用场景:我这台“AI牛马”到底在干哪些活

4.1 本地知识库助手

我在树莓派上跑了一个简单的RAG(检索增强生成)管道,把平时收藏的技术文章、笔记、PDF文档全部转成向量存进本地向量库,然后用qwen2.5:3b做回答生成。搜索和向量化能力不需要多强的模型,关键在文档切分和调好的Prompt模板。

这事的核心价值在于把“本地私有数据”和“AI问答”接上了。文档不上云,查询不出网,全程在内网完成。对于一个知识管理需求强的人,这比用云端知识库踏实多了。网上有不少开源方案,配置起来一两小时能搞定,但别指望它达到ChatGPT那种检索质量,小模型的检索答案有效性取决于你的文档质量,文档越结构化回答越准。

4.2 日志与数据处理工人

树莓派经常跑一些杂七杂八的服务,日志一多根本没人看。我写了个cron任务,每小时把最近一小时的服务日志抽取异常片段,丢给本地模型做摘要和分类,然后把结果发到我的消息队列里。这样我早上扫一眼就能知道夜里哪个服务出过问题、报错集中在什么类型。

这个场景对速度完全不敏感,因为它本来就是异步处理。模型理解能力也不需要太强,能识别error、timeout、connection refused这些关键词并整理出上下文就够了。实测qwen2.5:3b做日志摘要效果相当不错,归类很准确,偶尔还能发现我没注意到的配置秒数异常。

4.3 离线语音转文字入口

树莓派接了一个USB麦克风阵列,用whisper.cpp跑语音识别,把本地语音转成文字后再交给LLM做后续处理。这是树莓派AI比较亮眼的应用之一。whisper的tiny和base模型在树莓派上能跑,tiny版本本机实时率大约0.5倍速,就是1秒音频需要2秒处理,还能用;base模型要慢不少,适合离线批量转写录音文件。

做成这样一个小语音助手的好处是什么呢?比起对着手机喊语音助手,它真正的价值是录音文件批量转写。我开会录音一录一小时,丢给它慢慢转,醒来就拿到文字稿。隐私完全不出本地。这套方案比云端语音识别慢得多,但胜在完全离线、免费、可定制。

4.4 群聊机器人

我把这台树莓派接入了一个家庭群和个人群,通过自建的Bot服务响应特定前缀的消息。比如在群里发“/摘要+URL”,它会抓取网页内容生成摘要发回;发“/记录 内容”,它会把消息存进待办列表;到点了还会主动提醒第二天的日程。

这里必须强调,个人娱乐向的自动回复机器人完全没问题,但凡是面向公众的信息发布都是另一套监管逻辑,别把两者混为一谈。我自己的使用范围仅限于家庭朋友的私域小群,不涉及公开传播。

群聊机器人对延迟要求极高,所以我特意把qwen2.5:3b做了并发限制,一个人用的时候响应速度还行,一旦多人同时发消息,后来的请求就要排队,这也是树莓派的多用户短板。如果你真要给一个活跃社群用,等队列时间超过1分钟就得考虑换更强的设备了。

5. 把服务挂成7x24背后的工程活

5.1 systemd守护进程:进程死了自动拉起来

树莓派跑AI服务,最大的敌人不是性能,而是进程静默退出。Ollama本身有守护能力,但系统重启它不会主动拉起,所以我给它写了个systemd单位。启动顺序上依赖网络就绪,失败自动重启,重启间隔10秒。

[Unit] Description=Ollama LLM Server After=network-online.target Wants=network-online.target [Service] Type=simple User=ollama Group=ollama ExecStart=/usr/local/bin/ollama serve Restart=on-failure RestartSec=10 Environment="OLLAMA_HOST=0.0.0.0:11434" Environment="OLLAMA_KEEP_ALIVE=30m" Environment="OLLAMA_MAX_LOADED_MODELS=1" Environment="OLLAMA_NUM_PARALLEL=1" [Install] WantedBy=multi-user.target

这文件看起来简单,实际踩了不少坑。比如必须指定User=ollama,默认用root启动会导致模型目录和数据文件的属主不一致,后续更新模型时会报权限错误。还有After=network-online.target不光是形式,没有它,启动时网络栈还没就绪,Ollama绑定的端口会失败,然后自启循环也会一直失败。

5.2 定时任务与看门狗:别让坏状态一直卡着

树莓派长时间跑,难免遇到进程僵死、内存耗尽、模型加载卡住的情况。我加了一层“健康检查+定时重启”机制,用一个shell脚本每小时检查一次:

#!/bin/bash if ! curl -s http://127.0.0.1:11434/api/tags >/dev/null 2>&1; then systemctl restart ollama fi

这个脚本通过curl检查Ollama的API能否正常响应,失败就重启服务。定时任务写到/etc/cron.d/ollama-healthcheck,每小时跑一次。另外我还配了一条每天凌晨4点的重启任务,让树莓派清空内存碎片和堆积的临时文件,实测下来对长期稳定性帮助很大。

有些人可能觉得每天重启太粗暴,但你要清楚树莓派不是数据中心服务器,它的内存管理、驱动稳定性、SD卡IO水平也就那样,定时重启反而是最省心的维护手段。

5.3 内存管理和OOM防护

树莓派的内存只有8GB,日常跑Ollama加几个应用,空闲内存经常只有几百MB。当内存耗尽,内核OOM Killer会把占用最大的进程杀掉,而且有时它杀的是你认为不重要的应用。我调整了一下策略:

  • 给关键进程设置OOMScoreAdjust=-500,降低被杀优先级;
  • 把vm.swappiness调到10,尽量减少swap交换,因为swap落在SD卡上就是灾难;
  • 给系统设置vm.overcommit_memory=0,避免内核过度分配内存导致更隐蔽的故障。

实测这些调整后,Ollama很少再被OOM杀掉,系统整体卡顿的次数也明显减少。如果你是4GB版,swap可以配置2GB在USB固态盘上,但千万别放在SD卡上,原因前面说过,写入寿命和IO速度都扛不住。

5.4 温度与功耗的长期监控

长时间运行的设备最怕的就是“慢慢热死”。我加了一套很简单的温度监控:vcgencmd measure_temp拿到核心温度,写到日志文件,超过75度就通过Bot推送一条警告消息。功耗方面我用了一个USB功率计实测大概数据:

状态功耗
空闲(Wi-Fi开启)2.8W
轻度负载(SSH+少量服务)4.1W
满载推理(Ollama + qwen2.5:3b)7.6W
满载推理 + USB外设9.2W

整机一天满载跑24小时,也就0.23度电不到。长期开着电费几乎可以忽略。这让我更坚定用电蚊香的热度换一台24h在线的AI工人,很划算。

6. 踩坑实录:这些雷我替你踩过了

6.1 USB外设导致的电压崩溃

我一开始在树莓派上挂了USB固态盘、USB麦克风和USB风扇三件套,然后发现推理过程中随机重启。查内核日志发现满屏电压不足警报。最终解决方式是换官方5V 3A电源,并且给风扇单独接了USB Hub供电,把固态盘用带独立供电的硬盘盒接上。从此再没出现过无故重启。

这类问题排查起来很阴间,因为它在负载小的时候稳定,一满载就出问题,让人误以为是软件bug,查了大半天才想到供电。

6.2 SD卡上的swap噩梦

迁移之前我把swap配在SD卡上,跑AI任务时内存吃满,系统开始疯狂换页,SQLite查询都变得慢如蜗牛。看IO状态发现每秒写入量爆表。这种状态下哪怕只是加载一个1.5B模型,都得等上几分钟。

解决办法很直接:加一块USB固态盘,系统、模型、swap全挪过去,SD卡只保留引导分区。如果你不想加外设,那至少要限制模型大小和并发请求数,别让内存触顶。

6.3 Docker容器在树莓派上的性能损耗

Docker本身在树莓派上跑没问题,但如果你想在容器里跑大模型推理,性能损耗就有点扎心了。实测同样模型,容器内跑和裸机跑性能差10%到15%。原因主要是容器化带来的IO和网络栈开销,在慢CPU上被放大了。

我的选择是:Ollama直接裸机跑,周边应用(Bot、向量库、代理)才跑Docker。这样既享受Docker管理应用的便利,又不牺牲模型推理性能。

6.4 AI幻觉在本地模型上更严重

树莓派这种小模型,幻觉问题比云端大模型严重得多。它会一本正经地编造不存在的API接口、错误的命令参数,甚至虚构文件内容。我第一次用本地模型做日志摘要,它居然给我总结出了日志里根本不存在的一条错误,我差点因为这个误判了一个服务故障。

对策就一个:所有生成结果都要标注“AI生成,请人工核实”,涉及数据统计、配置命令的关键场景必须做二次人工确认。别迷信AI输出,尤其在树莓派这种小模型环境。

7. 还需要知道的一些边界

树莓派跑AI绝不是万能的。我折腾完最大的收获不只是多了一台AI服务,而是对“端侧AI”到底能做到什么程度有了清晰的认知。现在市面上大家都在聊大模型、最近很火的AI Agent概念,但真正把这些部署在端侧设备上,你会发现资源约束带来的工程决策远远超出模型本身。

如果你也想搞一台,我的建议是先明确你的场景对延迟是否敏感。不敏感的异步任务,比如文档摘要、录音转写、定时分析,树莓派4B完全可以胜任。但如果你想要一个像云端聊天助手那样秒回的AI,趁早打消这个念头,那不是派和模型的问题,是物理规律的问题。

另外,AI领域更新极快,今天好用的模型明天可能就过时了,但这台24小时在线的小机器完全不慌。它跑的是标准API格式的本地服务,以后有更好的小模型发布,一条ollama pull命令就完成升级了。

我个人在实际操作中的体会是,折腾树莓派AI最有意思的部分其实不是AI,而是那种“让旧设备重新活过来”的成就感。一块当初买来吃灰的开发板,配上开源模型,就成了家里持续运转的AI工人,这种细水长流的满足感,比跑分带来的快感持久得多。

最后分享一个小技巧:给树莓派设一个固定的内网IP,然后把Ollama的API地址存成环境变量,你所有写过的脚本、bot、自动化任务都引用这个变量,以后就算你换主机、换IP、换系统,改一行配置就全部迁移完毕。

内容讲到这里,剩下的就是动手折腾了。祝你的树莓派也能早日上岗,当一个任劳任怨的AI牛马。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询