2、Ollama简介与核心概念
各位同学好,我是老张。今天咱们来聊聊Ollama——这个在嵌入式AI圈子里越来越火的小家伙。
说实话,我第一次接触Ollama的时候,心里是有点不屑的。一个命令行工具而已,能有多厉害?直到我在一块只有2GB内存的树莓派上,成功跑起了7B参数的模型,我才意识到——这玩意儿,真有点东西。
Ollama是什么?
简单来说,Ollama是一个让你能在本地跑大语言模型的工具。它把模型下载、加载、推理、管理这些繁琐的事情,全都封装成了几条简单的命令。
你想想看,以前要跑一个LLaMA模型,你得先找模型权重,然后配置Python环境,装PyTorch,写推理代码,调显存……搞不好折腾一整天。现在呢?一条命令搞定:
ollama run llama3.2:1b
嗯,就是这么简单。
我有个朋友,做嵌入式开发的,之前一直觉得AI是云端的事。直到我用Ollama在他的RK3588开发板上跑了个对话模型,他当场就沉默了。过了半天憋出一句:「这玩意儿能离线用?」
对,能离线。而且跑得还挺溜。
Ollama的架构设计
Ollama的架构其实不复杂,但设计得很巧妙。我画了张图,你一看就明白:
从这张图你能看到,Ollama分了四层。最上层是用户接口,中间是调度和推理引擎,底层是模型仓库。每一层各司其职,耦合度很低。
我个人最喜欢的是它的调度层。你想想,嵌入式设备内存就那么点,如果同时跑多个请求怎么办?Ollama会智能排队,把模型加载到共享内存里,避免重复加载。我在项目中遇到过一个问题:同时跑两个模型实例,内存直接爆了。后来发现Ollama的共享内存机制可以解决这个问题——多个请求共享同一个模型实例,内存占用几乎不变。
模型仓库(Model Zoo)
Ollama的模型仓库,说白了就是一个模型超市。你不需要自己去Hugging Face上翻,也不需要手动转换格式。一条命令,模型就下来了:
ollama pull llama3.2:1b
目前官方仓库里有多少模型?我数了数,几百个是有的。从几亿参数的小模型,到几百亿参数的大模型,应有尽有。
但咱们做嵌入式开发的,重点关注的是小模型。我整理了一个表格,方便你快速选型:
| 模型名称 | 参数量 | 量化后大小 | 推荐硬件 | 适用场景 |
|---|---|---|---|---|
| Llama 3.2 | 1B / 3B | ~0.7GB / ~2GB | 树莓派4B / RK3588 | 对话、文本生成 |
| Phi-3 | 3.8B | ~2.5GB | Jetson Nano / 手机 | 代码、推理 |
| Qwen2.5 | 0.5B / 1.5B | ~0.3GB / ~1GB | ESP32-S3 / 低端ARM | 中文问答、分类 |
| Gemma 2 | 2B | ~1.5GB | 树莓派5 / 手机 | 通用对话 |
| TinyLlama | 1.1B | ~0.8GB | 树莓派4B / 低端ARM | 文本生成、微调 |
llama3.2:1b 入手。这个模型在1GB内存的设备上就能跑,效果还不错。我在树莓派4B上实测过,生成速度大概每秒5-8个token,够用了。
量化与轻量化的概念
好,接下来是重点——量化。这个概念很多同学觉得玄乎,其实说白了就一句话:用更少的位数来表示模型参数。
你想想看,一个32位的浮点数,占4个字节。如果把它变成8位的整数,只占1个字节。模型大小直接变成原来的四分之一!
当然,代价是精度会下降一些。但神奇的是,对于大语言模型来说,这种精度损失对最终效果的影响很小。我做过对比测试:
- FP32(原始):精度最高,但模型太大,嵌入式设备根本装不下
- FP16:大小减半,精度损失几乎不可察觉
- INT8:大小再减半,精度略有下降,但效果依然可用
- INT4:极致压缩,精度下降明显,但某些场景下够用
Ollama默认使用GGUF格式,这种格式天然支持多种量化方式。你可以在拉取模型时指定量化级别:
# 拉取4位量化版本
ollama pull llama3.2:1b-q4_0
# 拉取8位量化版本
ollama pull llama3.2:1b-q8_0
轻量化这个概念,比量化要宽泛一些。它包括了:
- 模型剪枝:去掉不重要的神经元
- 知识蒸馏:用大模型教小模型
- 量化:降低数值精度
- 架构优化:设计更高效的网络结构
Ollama主要靠量化来实现轻量化。但说实话,对于嵌入式设备来说,光靠量化还不够。你还需要考虑:
- 内存带宽:模型小了,但推理速度还受限于内存读取速度
- 计算能力:CPU还是NPU?有没有硬件加速?
- 功耗:跑一次推理耗多少电?电池能不能扛住?
这些细节,咱们后面的章节会一个一个拆开来讲。今天先把概念理清楚。
📌 核心要点回顾:
- Ollama = 本地大模型运行工具,一条命令搞定模型部署
- 架构分四层:用户接口 → 调度运行时 → 推理引擎 → 模型仓库
- 模型仓库里有几百个模型,嵌入式首选1B-3B参数的小模型
- 量化就是用更少的位数表示参数,INT8是嵌入式设备的黄金选择
好了,这一章的内容就到这儿。记住我说的:先跑起来,再优化。别一开始就想着怎么把模型压到最小,先让它在你的设备上能跑,后面的事情都好说。