1. 项目概述
最近在RK3588开发板上折腾了一个有趣的AI应用——离线部署Ollama和Qwen3:0.6B模型。这个方案特别适合那些需要在边缘设备上运行AI模型,但又受限于网络环境的场景。作为一个长期在嵌入式AI领域摸爬滚打的开发者,我想分享一下这个过程中的实战经验。
RK3588作为一款高性能的ARM处理器,其四核Cortex-A76和四核Cortex-A55的组合,加上6TOPS的NPU算力,完全有能力在本地运行轻量级的大语言模型。而Ollama作为一个开源的本地大模型运行框架,配合通义千问的0.6B小模型,形成了一个非常实用的边缘AI解决方案。
2. 环境准备与验证
2.1 硬件兼容性检查
在开始之前,我们必须确认硬件平台是否符合要求。RK3588和RK3568都是基于ARMv8-A架构的64位处理器,这正是我们需要的。但为了确保万无一失,我通常会做更全面的检查:
bash复制# 查看CPU架构
uname -m
# 期望输出:aarch64
# 查看CPU详细信息
lscpu | grep -i 'model name'
cat /proc/cpuinfo | grep -i 'processor' | wc -l
提示:如果输出不是aarch64,说明你的板子可能是32位ARM架构,这种情况下Ollama的预编译二进制将无法运行。可以考虑从源码编译,但会复杂很多。
2.2 系统版本确认
Ollama对系统版本有一定要求,特别是glibc的版本。Ubuntu 24.04 LTS是目前比较稳定的选择:
bash复制cat /etc/os-release | head -n 3
# 期望看到类似输出:
# PRETTY_NAME="Ubuntu 24.04.3 LTS"
# VERSION="24.04.3 LTS (Noble Numbat)"
在实际测试中,我发现Ubuntu 22.04也能运行,但需要额外安装一些依赖库。如果你必须使用其他发行版,可能需要调整后续的安装步骤。
3. Ollama安装与配置
3.1 获取安装包
由于是离线环境,我们需要提前下载Ollama的ARM64版本。这里有个小技巧:即使官网显示的文件名是ollama-linux-arm64.tgz,实际下载链接可能会变。我建议先用PC浏览器访问下载页面,获取最新的下载链接:
bash复制# 在有网络的机器上下载
curl -fL -o ollama-linux-arm64.tgz https://ollama.com/download/ollama-linux-arm64.tgz
# 然后通过U盘或SCP传输到开发板
scp ollama-linux-arm64.tgz user@your_board_ip:~/llm/
文件大小约2GB,下载时需要耐心等待。我实测发现,使用wget有时会比curl更稳定,特别是在网络不稳定的环境下。
3.2 安装与验证
安装过程看似简单,但有几个关键点需要注意:
bash复制# 创建工作目录
mkdir -p ~/llm && cd ~/llm
# 解压到系统目录
sudo tar -zxvf ollama-linux-arm64.tgz -C /usr
# 验证安装
ls -l /usr/bin/ollama
/usr/bin/ollama --version
注意:解压时一定要使用sudo,否则可能会因为权限问题导致部分文件无法正确安装。如果遇到"Permission denied"错误,检查你的用户是否在sudoers列表中。
4. 系统服务配置
4.1 创建systemd服务
为了让Ollama能够开机自启并在后台稳定运行,我们需要配置systemd服务。这里有几个关键参数需要特别注意:
bash复制sudo vim /etc/systemd/system/ollama.service
服务文件内容:
ini复制[Unit]
Description=Ollama Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/ollama serve
User=pi
Group=adm
Restart=always
RestartSec=3
Environment=PATH=/usr/bin:/usr/local/bin
Environment=OLLAMA_MODELS=/mnt/models # 自定义模型存储路径
[Install]
WantedBy=multi-user.target
重要提示:
- User参数要根据你的实际用户名修改,RK官方镜像默认是pi
- 可以通过Environment变量指定模型存储路径,这对于存储空间有限的开发板特别有用
- Restart策略设置为always可以确保服务意外退出后自动重启
4.2 服务管理
配置好服务后,我们需要重新加载systemd并启动服务:
bash复制sudo systemctl daemon-reload
sudo systemctl enable --now ollama
# 检查服务状态
systemctl status ollama
如果一切正常,你应该能看到"Active: active (running)"的状态。如果服务启动失败,可以查看详细日志:
bash复制journalctl -u ollama -b
5. 模型部署与运行
5.1 获取Qwen3:0.6B模型
在联网环境下,直接使用ollama pull命令下载模型:
bash复制ollama pull qwen3:0.6b
对于严格的离线环境,可以采用以下方案:
- 在联网机器上拉取模型
- 模型文件通常存储在~/.ollama/models目录下
- 将整个目录打包复制到离线机器的相同路径下
我实测发现,0.6B的模型文件大约2.4GB,确保你的存储空间足够。如果空间紧张,可以考虑使用SD卡或外接USB存储,并通过软链接将模型目录指向外部存储。
5.2 运行模型
启动交互式会话非常简单:
bash复制ollama run qwen3:0.6b
但在资源受限的开发板上,你可能需要调整一些参数以获得更好的性能:
bash复制# 限制CPU使用核心数
taskset -c 0-3 ollama run qwen3:0.6b
# 或者使用nice调整优先级
nice -n 10 ollama run qwen3:0.6b
在RK3588上,0.6B模型的推理速度大约在5-10 tokens/秒,对于简单的对话和文本生成任务已经足够实用。
6. 性能优化技巧
6.1 内存管理
大语言模型对内存需求较高,在资源有限的开发板上需要特别注意:
bash复制# 查看内存使用情况
free -h
# 如果内存不足,可以尝试创建swap文件
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久生效需要添加到/etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
6.2 CPU调优
RK3588的8核CPU可以很好地并行处理推理任务:
bash复制# 设置CPU性能模式
sudo apt install cpufrequtils
sudo cpufreq-set -g performance
# 查看CPU频率
watch -n 1 "cat /proc/cpuinfo | grep 'MHz'"
6.3 温度监控
长时间运行大模型可能会导致芯片温度升高:
bash复制# 安装温度监控工具
sudo apt install lm-sensors
sudo sensors-detect
sensors
# 设置温度监控脚本
while true; do clear; date; sensors; sleep 2; done
如果温度过高,可以考虑添加散热片或风扇,或者限制CPU频率。
7. 常见问题排查
7.1 服务启动失败
如果ollama服务无法启动,首先检查:
- 二进制文件权限:
bash复制ls -l /usr/bin/ollama
# 应该显示-rwxr-xr-x
- 用户权限:
bash复制id pi
# 确认用户存在且属于正确的组
- 端口冲突:
bash复制sudo netstat -tulnp | grep 11434
# Ollama默认使用11434端口
7.2 模型加载错误
当遇到模型加载问题时:
- 检查模型文件完整性:
bash复制ls -lh ~/.ollama/models
- 验证模型清单:
bash复制ollama list
- 尝试重新拉取模型:
bash复制ollama rm qwen3:0.6b
ollama pull qwen3:0.6b
7.3 性能问题
如果推理速度过慢:
- 检查CPU使用率:
bash复制top -1
- 尝试限制运行核心:
bash复制taskset -c 0-3 ollama run qwen3:0.6b
- 关闭不必要的后台服务:
bash复制sudo systemctl list-units --type=service --state=running
8. 实际应用场景
在RK3588上成功部署Ollama和Qwen3:0.6B后,可以尝试以下应用:
- 本地知识问答系统:
bash复制ollama run qwen3:0.6b "用简单的话解释量子计算"
- 代码辅助工具:
bash复制ollama run qwen3:0.6b "写一个Python函数计算斐波那契数列"
- 文本摘要生成:
bash复制ollama run qwen3:0.6b "为以下文章生成��要: [粘贴文章内容]"
在部署过程中,我发现RK3588的NPU目前还不能直接用于加速Ollama的推理,这主要是因为Ollama默认使用CPU进行计算。如果未来能实现NPU加速,性能将会有显著提升。不过即便如此,当前的性能已经足够支持很多实际应用场景了。
