2、Ollama简介与核心概念

各位同学好,我是老张。今天咱们来聊聊Ollama——这个在嵌入式AI圈子里越来越火的小家伙。

说实话,我第一次接触Ollama的时候,心里是有点不屑的。一个命令行工具而已,能有多厉害?直到我在一块只有2GB内存的树莓派上,成功跑起了7B参数的模型,我才意识到——这玩意儿,真有点东西。

Ollama是什么?

简单来说,Ollama是一个让你能在本地跑大语言模型的工具。它把模型下载、加载、推理、管理这些繁琐的事情,全都封装成了几条简单的命令。

你想想看,以前要跑一个LLaMA模型,你得先找模型权重,然后配置Python环境,装PyTorch,写推理代码,调显存……搞不好折腾一整天。现在呢?一条命令搞定:

ollama run llama3.2:1b

嗯,就是这么简单。

我有个朋友,做嵌入式开发的,之前一直觉得AI是云端的事。直到我用Ollama在他的RK3588开发板上跑了个对话模型,他当场就沉默了。过了半天憋出一句:「这玩意儿能离线用?」

对,能离线。而且跑得还挺溜。

Ollama的架构设计

Ollama的架构其实不复杂,但设计得很巧妙。我画了张图,你一看就明白:

Ollama 核心架构图 用户接口层 CLI 命令行 / REST API / 客户端 调度与运行时层 模型加载 / 内存管理 / 请求排队 / 并发控制 推理引擎层 llama.cpp / GGML / Metal / CUDA / Vulkan 后端 模型仓库层 GGUF 格式模型 / 本地缓存 / 远程拉取 用户 调度 计算 存储 跨平台 CPU/GPU 内存优化 量化支持 热加载 多模型 并发

从这张图你能看到,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 文本生成、微调
💡 我的建议: 如果你刚开始接触嵌入式AI,先从 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
⚠️ 避坑指南: 我曾经在一个项目里,为了省内存,直接上了INT4量化。结果模型输出的中文全是乱码,调试了两天才发现是量化精度太低,导致tokenizer解码出错。所以我的建议是:能上INT8就别用INT4,除非你的设备内存实在紧张。

轻量化这个概念,比量化要宽泛一些。它包括了:

  • 模型剪枝:去掉不重要的神经元
  • 知识蒸馏:用大模型教小模型
  • 量化:降低数值精度
  • 架构优化:设计更高效的网络结构

Ollama主要靠量化来实现轻量化。但说实话,对于嵌入式设备来说,光靠量化还不够。你还需要考虑:

  1. 内存带宽:模型小了,但推理速度还受限于内存读取速度
  2. 计算能力:CPU还是NPU?有没有硬件加速?
  3. 功耗:跑一次推理耗多少电?电池能不能扛住?

这些细节,咱们后面的章节会一个一个拆开来讲。今天先把概念理清楚。

📌 核心要点回顾:

  • Ollama = 本地大模型运行工具,一条命令搞定模型部署
  • 架构分四层:用户接口 → 调度运行时 → 推理引擎 → 模型仓库
  • 模型仓库里有几百个模型,嵌入式首选1B-3B参数的小模型
  • 量化就是用更少的位数表示参数,INT8是嵌入式设备的黄金选择

好了,这一章的内容就到这儿。记住我说的:先跑起来,再优化。别一开始就想着怎么把模型压到最小,先让它在你的设备上能跑,后面的事情都好说。


专注资料整理