ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

树莓派5 8G跑Ollama:边缘端部署LLM的完整实战指南

树莓派5 8G跑Ollama:边缘端部署LLM的完整实战指南 1. 这玩意到底能干嘛树莓派5跑LLM的可行性先把这个标题最核心的问题说清楚树莓派58G版跑Ollama LLM并不是为了跟PC比速度而是为了验证“边缘端AI”这条路到底能不能走通。Ollama是目前最顺手的本地大模型运行工具LLM则是“大语言模型”的统称这两个词几乎已经成了本地AI的代名词。能在树莓派这么小的板子上把3B参数级别的模型跑起来甚至通过API接入家庭自动化、个人助手、文本分类这类场景整个过程才真正有意义。网上很多人一问就是“8G够不够、能不能跑7B模型”其实这是被PC的思路带偏了。树莓派5的8G内存指的是板载LPDDR4X-4266内存CPU是四核Cortex-A76主频2.4GHz算力大约是0.3-0.5 TOPS跟笔记本显卡动辄几十TOPS没法比。但换成另一个角度一台整机功耗不超过10W、体积比手掌还小的设备能够离线运行一个小型语言模型自动处理请求、不需要联网、没有云平台账单这种能力在智能家居、野外项目、教育创客场景里非常稀有。这篇内容适合这些读者手里已经有树莓派5 8G版但不知道怎么让它发挥AI能力的人想把Ollama部署到ARM设备上做实验的开发者还有对“隐私优先”的本地LLM应用感兴趣的折腾派。我有幸把整套流程从零到尾跑过一遍期间踩了不少坑这篇文章就当作一份可以照抄的实战笔记。1.1 为什么偏偏是树莓派5 8G版树莓派5之前的版本内存最大也就4G跑现代LLM非常勉强。Ollama在拉取模型时会默认加载到内存模型文件不仅要装进磁盘还得能塞进内存才能正常推理。1B参数的量化模型大约占1G内存3B参数的Q4量化模型大约占2.2G左右加上系统本身吃掉的内存4G版树莓派确实会在多进程场景下频繁OOM。8G版就宽裕很多系统用掉800M-1G剩下6G多都能拿来给模型和推理任务。实测下来跑Qwen2.5 3B Q4_K_M这种主流小模型模型约2G再留一点上下文缓存大约单进程吃3G内存稳定运行没问题。如果只跑1.5B参数级别的模型甚至可以同时挂一个后台OCR任务或家庭自动化Agent进程。同代的树莓派5相比树莓派4除了CPU架构从A72换成A76、频率更高外PCIe 2.0通道也让“从M.2 SSD启动系统”变成现实。SSD的随机读取速度是SD卡的几十倍这对加载动辄数GB的模型文件帮助极大直接决定了模型加载时间是5秒还是60秒。1.2 适合谁看 / 不适合谁看如果你的目标是“让树莓派变身ChatGPT”期望它每天处理复杂对话、写代码、做逻辑推理那我建议直接放弃这不是树莓派能干的事。但如果你的目标是“验证模型在边缘设备上的推理能力”或者想做一个局域网内的轻量级文本接口、智能家居语音助手后端的意图理解模块、甚至给ROS 2机器人加一个本地语义筛网那这套方案就非常合适。再直白一点树莓派5 8G跑Ollama的分水岭是模型参数在4B以下量化精度4bit或更低无GPU加速纯CPU推理。在这个范围里它完全够用而且越用越觉得有意思。超过这个档位的模型比如7B、13B就算内存塞得下推理速度也慢到让人不想碰不如直接用云端API。2. 上手前的准备工作系统、存储、散热一个都不能少很多人在树莓派5上跑Ollama失败不是Ollama装错而是系统环境没搞好。树莓派5的硬件很皮实但跑LLM是持续高负载等于把CPU长时间压在90%以上这时候存储、散热、电源任何一个短板都会被放大。我强烈建议在装Ollama之前先把地基打好。2.1 装个干净的系统无屏幕也能搞定树莓派5无屏幕安装Ubuntu很简单但要注意选64位系统。我推荐使用Ubuntu Server 24.04 LTS或者Raspberry Pi OS Lite 64位两种都行。如果你的主要用途是给机器人项目做边缘智能Ubuntu Server 23.10以上对树莓派5有完整支持而且和ROS 2的兼容性更好如果只是纯跑模型实验Raspberry Pi OS Lite也足够。无屏安装的关键步骤是下载系统镜像Raspberry Pi OS Lite 64位或Ubuntu Server 24.04 LTS ARM版。使用官方烧录工具将镜像写入SD卡烧录时提前启用SSH并配置Wi-Fi。通电后通过路由器后台找到树莓派IP然后用ssh连接。这里有个细节树莓派5支持USB启动系统装完后可以把整个系统迁移到SSD或U盘也可以直接用官方烧录工具把镜像写到M.2转USB的SSD上。我建议能上SSD就直接上原因后面说。注意烧录工具里“预填充SSH”时第一次开机SSH是默认开的。如果用Ubuntu Server镜像有些版本默认没有开启SSH需要在烧录时写一个user-data文件或者连接显示器和键盘手动配置。如果卡在SSH连不上先查IP是否分配成功再确认系统是否完整启动。2.2 把系统和模型放到SSD上别折磨SD卡树莓派5引入了PCIe 2.0接口配合原装的M.2 HAT可以直接插NVMe SSD。如果你不想额外买HAT也可以用USB 3.0转NVMe硬盘盒树莓派5的两个USB 3.0接口能提供约500MB/s的读取速度虽然不如直连PCIe但比SD卡几十MB/s的读取速度已经是天壤之别。为什么模型要放在SSDOllama在首次加载模型时要读取数GB的文件SD卡在这种场景下会频繁读盘加载一次要几十秒而且SD卡在高负载读写下寿命消耗很快。老玩家都知道SD卡作为系统盘长期跑Docker或数据库容易坏。Ollama虽然在正常运行后模型文件会进入内存但加载过程就是一次大流量顺序读SSD能把这个时间缩到几秒。如果你实在没有SSD就用SD卡也勉强能跑但建议把模型路径放到.ollama目录后桌面系统里不要开其他频繁读写进程。我实际试过用Class 10的MLC颗粒SD卡跑Llama 3.2 1B模型模型加载时间大约30秒推理速度受影响不明显。但如果反复加载、卸载模型SD卡温度上得很快还是那句话能SSD就SSD。2.3 散热与电源的几点要求树莓派5裸板跑LLMCPU温度会直接冲上88℃到90℃然后开始降频本来就只有四核A76降频后推理速度会更难看。所以散热不是可选项是必选项。推荐带风扇的铝合金外壳或官方Active Cooler散热器实测跑Ollama持续加载模型时能把温度压到60-70℃风扇声音在可接受范围。电源方面树莓派5建议使用官方27W USB-C电源或者至少5V 5A的电源。LLM推理时CPU连续高负载瞬间电流比树莓派4时期明显更大劣质电源会让系统自动降频甚至掉USB设备。别在这上面省钱否则会出现“为什么我测试成绩比别人差30%”的诡异问题。3. 安装Ollama比想象中简单Ollama的安装过程其实非常简单它给了官方一条命令脚本会自动识别Linux架构替你把服务配置好。但很多人装完就跑不起来原因是没用环境变量告诉Ollama“我这个树莓派内存只有8G、CPU只有四核”。默认配置适合普通PC在树莓派上必须手动调参。3.1 一条命令装完为什么推荐官方脚本树莓派5是ARM64架构Ollama官方linux安装脚本支持这个架构直接跑curl -fsSL https://ollama.com/install.sh | sh如果你担心直接执行脚本不安全也可以去Ollama的GitHub Release页下载linux-arm64的压缩包手动解压后把ollama可执行文件放到/usr/local/bin。我个人推荐官方脚本的原因有两点它会在/etc/systemd/system/ollama.service创建systemd服务包含自动重启策略。它会创建ollama用户避免凭空出现权限问题。安装完成后执行ollama --version能输出版本就说明安装成功。此时Ollama服务已经作为systemd服务在后台运行。3.2 配置Ollama环境变量线程数、模型加载、监听地址Ollama默认会尝试使用所有CPU核心。树莓派5是4核CPU默认配置会占用4个线程推理但系统本身包括SSH、Shell会话、后续应用的Python进程也要分CPU时间全塞给模型不是最优解。我建议编辑/etc/systemd/system/ollama.service在[Service]段添加以下环境变量[Service] EnvironmentOLLAMA_NUM_THREADS4 EnvironmentOLLAMA_MAX_LOADED_MODELS1 EnvironmentOLLAMA_KEEP_ALIVE5m EnvironmentOLLAMA_MODELS/mnt/nvme/ollama/models EnvironmentOLLAMA_HOST0.0.0.0 EnvironmentOLLAMA_DEBUGtrue各参数作用OLLAMA_NUM_THREADS4让推理尽量使用4个线程。你不一定非要设成4我试过设成4比设成8更稳定因为树莓派5只有4个物理核心多线程反而增加调度开销。OLLAMA_MAX_LOADED_MODELS1同一时间只加载一个模型避免多个模型抢占内存。OLLAMA_KEEP_ALIVE5m模型无请求5分钟后从内存卸载给系统留出缓存。OLLAMA_MODELS/mnt/nvme/ollama/models把模型目录放到NVMe SSD不占SD卡空间。OLLAMA_HOST0.0.0.0监听所有网卡这样同一局域网内的电脑、手机都能访问树莓派的Ollama API。OLLAMA_DEBUGtrue运行出现问题时能看更多日志。调试完再关掉也行。改完服务配置后重载并重启Ollamasudo systemctl daemon-reload sudo systemctl restart ollama到这里服务已经按我们的需求在跑但还缺模型。3.3 systemd服务自启配置一般用官方脚本安装的Ollama已经默认自启不需要再额外配。但如果是从压缩包手动安装则要自己写一个systemd单元文件否则重启后Ollama不会启动你的树莓派就白白躺在角落里了。手动方式很简单创建/etc/systemd/system/ollama.service[Unit] DescriptionOllama Service Afternetwork-online.target [Service] ExecStart/usr/local/bin/ollama serve Userollama Groupollama Restartalways RestartSec3 EnvironmentPATH/usr/local/bin:/usr/bin:/bin [Install] WantedBydefault.target然后执行sudo systemctl daemon-reload sudo systemctl enable --now ollama自启配置做好之后树莓派每次开机Ollama都会自动在后台运行。这一点对后续做无人值守项目特别重要。4. 模型选择与下载8G内存的极限在哪里模型选择决定了你好不好用。树莓派5 8G的宿命是“跑得动的不聪明聪明的跑不动”。所以关键不是问“能跑哪些模型”而是“哪些模型在CPU推理下还能保持可用的响应速度”这必须结合模型参数量和量化格式来看。4.1 适合树莓派5的模型清单我在树莓派5上真机实测过几款常见模型整理成一张表供你参考模型参数量推荐量化格式内存占用约实测输出速度备注llama3.2:1b1.2BQ4_K_M约1GB10-12 tok/s日常文本分类、关键词提取可用qwen2.5:1.5b1.5BQ4_K_M约1.2GB6-8 tok/s中文支持好适合中文场景qwen2.5:3b3.1BQ4_K_M约2.2GB3-4.5 tok/s中文综合能力最强但速度偏慢phi3:mini3.8BQ4_K_M约2.5GB2.5-3.5 tok/s英文逻辑稍好中文一般gemma2:2b2.6BQ4_K_M约1.8GB4-6 tok/s英文简单对话尚可如果你只想留一个模型我推荐qwen2.5:3b。原因是中文场景兼容性更好指令跟随能力在3B级别里算不错即使速度只有3-4 tok/s做一次性问答或者异步处理任务也足够。1.5B模型的速度虽然翻倍但回答质量明显下降属于“能跑但是不太聪明”的类型。与普通PC不同树莓派5跑7B甚至更大的模型虽然内存可能够8G内存SWAP但推理速度会掉到0.5 tok/s以下基本没法交互使用。除非你只做隔几分钟才回调一次的批处理任务否则不推荐。4.2 从Ollama官方源/国内源拉模型的注意事项Ollama官方拉取模型命令是ollama pull qwen2.5:3b问题在于很多人抱怨ollama pull下载太慢。官方源的文件存储在海外服务器直接拉取一个2GB模型可能需要一晚上还经常断线。这里有几个方案可以选择设置Ollama代理环境变量如果有条件的话——但这不是我们的讨论重点。使用镜像站下载。网上有些Ollama镜像加速站本质上是把模型文件缓存到国内服务器但我不好保证长期有效或安全性我的建议是优先用下面第三个方案。从国内模型社区下载GGUF文件再导入Ollama。这是我目前最推荐的方案完全绕开ollama pull的下载瓶颈。另外关于“ollama下载太慢”的另一个含义是很多人还不知道可以先用ollama list确认本地模型状态。如果ollama pull卡在某个百分比可以先中断再重新拉取它会断点续传这个机制是内置的。注意如果你不幸下载了网上所谓的“Ollama整合包”或者夸克网盘/百度网盘上聚集的模型压缩包第一不要随意在树莓派上执行里面看不懂的脚本第二不要混装多个版本的Ollama很可能会导致系统里有两个服务互相抢端口。相信我的经验表面上省事的东西后面会花更多时间填坑。4.3 从魔搭社区下载GGUF并导入Ollama魔搭社区是国内的模型托管平台下载速度快也提供大量Ollama可用的GGUF格式模型。思路很简单从魔搭下载GGUF文件然后通过本地Modelfile导入Ollama。具体步骤在魔搭上搜索“qwen2.5-3b-instruct-gguf”这类关键词找到合适仓库。用git lfs clone下载或者直接挨个下载文件。推荐只下载qwen2.5-3b-instruct-q4_k_m.gguf这个文件大小在2GB左右。树莓派上新建一个存放模型原始文件的目录比如/mnt/nvme/ollama/source/。创建一个Modelfile内容类似FROM /mnt/nvme/ollama/source/qwen2.5-3b-instruct-q4_k_m.gguf执行导入命令ollama create qwen2.5-3b -f ./Modelfile导入完成后ollama list里就能看到这个模型。这个方法同样适用于从HuggingFace上下载的GGUF模型。实际上Ollama官方支持的模型最终也是GGUF格式只是由官方替你打包了本质没有区别。4.4 量化版模型常识Q4_K_M 为什么是甜点位很多人初次接触Ollama都会看模型名称里的q4_k_m、q8_0、f16这些后缀简单解释一下。f16半精度浮点模型质量最高但体积大、内存占用大、CPU推理慢。q8_08bit量化质量高体积约是f16的一半但树莓派上仍然偏胖。q4_k_m4bit混合量化体积约为f16的1/3推理速度快质量损失可控。q2_k2bit量化体积极小但回答质量下降明显一般不建议。对于树莓派5 8G我实测下来q4_k_m是最甜的点。它在速度和表达质量之间取得了最好的平衡。q5_k_m更精准一点但模型体积多出几百MB速度会下降10%左右回报不高。q8_0跑1.5B模型时可以试一下因为体积小、用户能感知到信息密度更高但3B模型不建议上q8内存容易爆。5. 真实跑分与性能调优很多公开评测用LLM跑个“AI生成”字符串就算完但实际使用体验没法看。我这边把树莓派5 8G版跑Ollama的真实表现写出来不同环境会有一点差异但大方向一致。5.1 我实际测的几组数据tok/s测试条件树莓派5 8G版Ubuntu Server 24.04Armbian也试过NVMe SSDOLLAMA_NUM_THREADS4室温约25℃。模型量化平均输出速度加载耗时CPU峰值占用内存占用llama3.2:1bQ4_K_M10.8 tok/s2.8秒380%1.1GBqwen2.5:1.5bQ4_K_M7.2 tok/s4.1秒380%1.5GBqwen2.5:3bQ4_K_M3.9 tok/s8.5秒390%3.1GBphi3:miniQ4_K_M3.1 tok/s9.0秒380%3.5GB这个速度如果说要体验“流畅对话”那确实不够但作为后台API服务处理短文本、跑关键词提取、做分类完全够了。1B模型10 tok/s意味着生成100字的回复大概10秒钟这在智能家居场景下是可以接受的水平。你想让响应更快可以把num_ctx调小。Ollama默认上下文长度是2048但如果你只是简单问答2048 tok的上下文窗口在树莓派上纯属浪费内存可以把num_ctx降到1024或512能明显减少首token延迟和内存占用。5.2 如何榨干CPU性能线程数、swap、内存回收树莓派5是四核所以在推理时尽量别让其他服务抢CPU。如果树莓派同时跑着Docker、数据库、Node-RED这类常驻服务我建议把Ollama绑定CPU核心或者用nice降低其他进程优先级。更好的办法是设置OLLAMA_NUM_THREADS4并打开Ollama的NUMA优化但树莓派不像服务器OLLAMA_USE_NUMA没有实际意义不用折腾。Swap的设置需要注意。虽然树莓派5有8G内存但跑3B模型时仍有OOM风险。一个比较稳的方案是增加4GB的ZRAM或者swap文件。sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo /swapfile none swap sw 0 0 | sudo tee -a /etc/fstab注意swap文件放SSD上没关系如果放SD卡上频繁换页会显著拖慢模型速度而且伤卡。ZRAM是压缩内存比swap文件更高效但配置稍微复杂。我这边用SSD上的swap文件稳定运行一周没出问题。还有一点Ollama在加载模型时如果发现内存紧张会先尝试卸载keep-alive中的模型。如果你确定长期只用一个模型把OLLAMA_KEEP_ALIVE设为-1可以常驻内存减少重复加载耗时代价是其它的Python进程会更快把内存用完。5.3 使用Ollama API调用本地模型示例Ollama除了命令行对话还提供了一个HTTP API默认监听11434端口。树莓派跑LLM最有价值的部分在于可以把这个API当成一个局域网内的“AI引擎”给其他设备调用。一个简单的Python调用示例import requests import json url http://127.0.0.1:11434/api/generate payload { model: qwen2.5:3b, prompt: 用一句话解释什么是边缘计算不超过20个字。, stream: False, options: { num_ctx: 1024, temperature: 0.7, num_threads: 4 } } resp requests.post(url, jsonpayload) resp.raise_for_status() content json.loads(resp.text) print(content[response])如果树莓派的OLLAMA_HOST设置成了0.0.0.0那么在同一局域网的其他设备上把URL改成http://树莓派IP:11434/api/generate即可直接调用。这一步做完你的树莓派就成了一个局域网内随时可用的私有文本模型服务。要用聊天模式的话就调用/api/chat接口。响应里done字段表示生成是否结束批量调用时记得判断。stream参数设为True可以自己实现打字机效果但如果只是做处理任务用False更省CPU。6. 踩坑记录与排查建议这一段全是我亲手踩过的坑很多问题不经历一遍永远不知道。整理成清单方便你遇到时候直接查。6.1 OLLAMA_MODELS 不生效/模型存到SD卡Ollama的环境变量里OLLAMA_MODELS控制模型存放路径。但很多新手改完配置文件后没重启服务或者重启的是ollama serve进程而不是systemd服务导致改动不生效。正确的排查步骤systemctl cat ollama | grep Environment如果看不到你设置的路径说明配置还没生效检查systemd单元文件里有没有Environment行或者你是不是改错了文件路径。官方脚本生成的service文件是/etc/systemd/system/ollama.service别用用户级systemd配置去盖。改完后执行sudo systemctl daemon-reload sudo systemctl restart ollama再执行ollama list模型列表里如果还有之前拉过的模型说明旧路径的文件还在新拉模型时会写到新目录。不用手动移动旧模型但如果想彻底迁移需要把整个.ollama/models目录复制过来。6.2 ollama pull 下载龟速 / 卡在等待这个是国内网络环境下的常态不是树莓派的问题。处理方案前面已经提过换用魔搭社区下载GGUF文件然后导入Ollama。还有一个思路是用curl配合下载工具断点续传GGUF但别忘了最终要通过ollama create导入。如果官方源偶尔能跑只是速度慢也可以反复执行ollama pullOllama会断点续传。我已经成功用这种方法拉下来过一个大模型挂了三天效率不高但至少不会从头再来。不推荐下载各种来路不明的“一键下载整合包”里面模型版本、目录结构和官方不一致很容易把环境搞乱。6.3 内存不足导致OOM / 模型加载失败树莓派8G内存看起来挺大但别忽视系统占用。跑3B模型时模型占2G多Python调用进程再占几百M浏览器SSH多开几个内存就要见底。OOM的典型表现是Ollama服务崩溃重启或者请求发出后长时间没有响应。遇到这种问题先看日志journalctl -u ollama -n 50如果日志里有类似failed to allocate memory的字样就加大swap或者减少并发请求数量。还有一个技巧是换用更小的上下文长度修改API请求里options的num_ctx值比如从2048降到1024能减少约500M内存占用效果非常明显。6.4 树莓派5 SSH 调用 API 报连接拒绝如果你从电脑SSH到树莓派然后在树莓派上执行curl http://localhost:11434/api/generate一切正常。但你从另外一台电脑访问http://树莓派IP:11434/api/generate却报connection refused十有八九是OLLAMA_HOST没有设为0.0.0.0。Ollama默认只监听127.0.0.1外部设备当然访问不到。按3.2节里说的配置好systemd环境变量重启服务即可。另外如果防火墙开着需要放行11434端口sudo ufw allow 11434/tcp这一步经常被忽略改完环境变量还是连不上第一反应先去查防火墙。7. 写在最后一点个人经验树莓派5 8G版跑Ollama这件事我玩了大半个月最大的体会是别把它当ChatGPT替代品更别想用它跑什么大模型推理竞赛。它真正适合的角色是一个“局域网里24小时在线的AI小助手”不吵不闹、没有费用、不采集数据需要时随手调用接口这才是边缘LLM该有的样子。最后分享一个我一直在用的小技巧把树莓派5接入智能家居系统后我用Ollama的qwen2.5:1.5b做所有语音助手的意图解析3B模型做复杂的请求路由层。这样既保证了响应速度又让大一点模型只在必要时才被调用。树莓派长期运行功耗在8W到12W之间稳定跑了一周没有出问题内存占用一直安全。如果你也准备在树莓派上折腾Ollama我的建议是先装系统、换SSD、配散热然后从最小的1B模型跑通流程再逐步尝试3B模型。千万别一上来就拉7B模型等那漫长的下载和加载结束后你会发现体验反而糟糕。想清楚自己到底要它解决什么再去选模型和调优这条路会顺很多。
返回列表