Ai

我在 24GB 的 Mac mini 上折腾本地大模型,最后放弃了——一场关于「理想与内存」的和解

By karp 3 Views 15 MIN READ 0 Comments
一句话总结:我想让本地大模型接进 Hermes 这个 AI agent,折腾了大半天,撞了三堵墙,最后没成。但这趟没白走——磁盘从 22GB 清到了 73GB,脑子里那团关于「大模型到底怎么跑」的浆糊,也终于清干净了。

起点:一个朴素的念头

我有一台 Mac mini(M4 芯片 / 24GB 统一内存),平时还算够用。某天冒出个念头:

能不能让本地大模型跑在自己电脑上,还接进我常用的 Hermes(一个 AI agent 客户端)?这样不用联网、数据不出门、还免费。

听起来很美好。于是我打开了 Claude Code,说:「帮我检查下这个大模型是否匹配我的电脑配置。」

故事就这么开始了。


第一站:清磁盘(意外的最大赢家)

准备装 Ollama 之前,先看了眼磁盘——只剩 22GB。这点空间连模型都塞不下几个。

于是顺手做了次大扫除,结果发现电脑里全是「僵尸缓存」:

清理项释放
~/.gemini/tmp 暂存14 GB
npm 缓存~6 GB
VSCode 过期扩展(85 个残留版本!)20 GB
Go module 缓存3 GB
Cursor 对话历史 DB、剪映缓存等~4 GB

磁盘从 22GB 一路清到 73GB。 好家伙,正事还没开始,先赚了 50 个 G。

💡 教训一:想跑本地模型,先看磁盘。开发机上的缓存垃圾比你想象的多得多。VSCode 那个 anthropic.claude-code 扩展,我一个人就囤了 36 个历史版本

第二站:搞懂 Ollama 到底是啥

装好 Ollama、拉下第一个模型 qwen3:14b 后,我才真正搞明白一个一直没分清的概念:

Ollama 是「播放器」,大模型是「影片」。
  • Ollama = 一个软件工具,负责下载、加载、用 GPU 加速、提供对话接口。它自己不会思考
  • Llama / Qwen = 真正会回答问题的「大脑」,是 Meta / 阿里开源的模型。

名字里都有 llama 纯属历史原因。现在 Ollama 什么模型都能跑。

第一次 ollama run qwen3:14b,中文流畅、100% GPU 加速、只吃 9.3GB 内存——丝滑。那一刻我信心爆棚:这不轻轻松松?


第三站:想接 Hermes,撞上第一堵墙——64K

兴奋没持续多久。我想让 Hermes 用这个本地模型,结果一跑就报错:

Model qwen3:14b has a context window of 40,960 tokens,
which is below the minimum 64,000 required by Hermes Agent.

Hermes 硬性要求模型上下文 ≥ 64K,而 qwen3:14b 只有 40K。 被当场拒绝。

我不信邪,翻了 Hermes 的源码,确认这是写死的常数

MINIMUM_CONTEXT_LENGTH = 64_000

为什么这么高?源码注释说得很清楚:

"Tool schemas + system prompt use a large fixed prefix."

原来 Hermes 是个重型 agent,每次开场就往上下文里塞一大包「工具定义 + 系统提示词」。我用它自带的 prompt-size 一量:

固定开销大小
系统提示词62 KB
27 个工具的 schema72 KB
合计~134 KB ≈ 约 3 万 token

你还没打第一个字,3 万 token 就没了。 难怪它要 64K——扣掉 3 万的固定开销,才剩一半给你真正对话。

💡 教训二:上下文限制是「模型」的属性,不是 agent 的。但 agent 决定「吃掉多少 + 要不要设门槛」。Hermes 属于最奢侈的那一类。

第四站:换 llama3.1:8b,撞上第二堵墙——它是个「人工智障」

qwen3 上下文不够,那换个原生支持 128K 的呗。llama3.1:8b 上场——128K 上下文,轻松过门槛,内存 9.4GB,完美契合预算。

设成 Hermes 默认,一跑……先是报 does not support thinking(llama 不支持思考模式,关掉 reasoning_effort 解决)。然后,真正的灾难来了。

我让它「说中文」,它吐给我一坨原始 JSON

{"type":"function","name":"say","parameters":{"text":"你想要我说什么","lang":"zh-Hans"}}

我让它「帮我写个 html」,它又吐:

{"parameters":{"path":"example.html","content":"<html>...Hello World...</html>"}}

它「知道」该调哪个工具、参数也对,但没能力把 JSON 变成真正的工具调用——直接漏成了聊天内容。 这是弱模型跑复杂 tool-calling 的典型翻车。

我盯着屏幕,心情复杂:连接是通的、内存是够的、就是这个 8B 的脑子……撑不起这么复杂的活。

💡 教训三:能跑 ≠ 能用。8B 小模型做多工具、多步骤的 agent,力不从心。

第五站:加码到 16GB,换 qwen2.5:14b——撞上第三堵墙,彻底死结

我不甘心。把内存预算从 14GB 放宽到 16GB,上 14B 的大脑——qwen2.5:14b,中文和工具调用都是开源第一梯队。这总行了吧?

结果一头撞死在墙上:

尝试结果
qwen2.5 原生上下文❌ 只有 32K,又不够
num_ctx 65536 强行拉大❌ 被 ollama 夹回 32768
骗 Hermes context_length=64000❌ Hermes 还会查 runtime 实际值,再次识破
用 rope 缩放强制拉伸❌ 这个 ollama 版本不支持这参数

到这里我终于看清了那个死结

Qwen 系列(qwen2.5=32K、qwen3=40K)架构原生就 <64K,而 ollama 无法把它们扩到 64K。Hermes 又严格要求 runtime 真的 ≥64K。

中文最强的 Qwen,技术上进不了 Hermes;能进的(llama3.1:8b),脑子又不够用。

这不是我不会配置,是硬件 + 工具 + 模型三方限制夹击的必然结果


释然:和「理想」握手言和

折腾到这,我停下来问自己:我到底图什么?

答案其实很简单:我想要本地、隐私、免费地用 AI。而「本地模型 + 重型 agent」这个具体组合,在一台 24GB 的 Mac mini 上,性价比极差

  • 那 3 万 token 的固定开销,每轮都要用 GPU 重新算一遍 → 慢到以分钟计
  • 预算够得着的模型太弱,够强的模型内存放不下。

于是我做了个决定:放弃「本地模型塞进 Hermes」,让它们各司其职。

需求最优解
Agent 干活(调工具、写文件、多步骤)Hermes + 云端(快、对、200K 上下文、有缓存打折)
本地 / 隐私 / 中文聊天 / 写代码ollama run qwen2.5:14b(不套 agent,32K 绰绰有余,又快又干净)

其实我早就同时拥有两者了,分开用就是最优解。 非要把重型 agent 硬塞进本地小模型,是我一开始就想拧了。

最后,我把所有本地模型和 Ollama 全部卸载,系统干干净净——但脑子里那团浆糊,清干净了。


复盘:这趟到底学到了什么

  1. Ollama 是运行器,模型是大脑——别再搞混了。
  2. 上下文限制看模型,不看 agent;但 agent 决定吃掉多少、要不要设门槛。
  3. 重型 agent 的固定开销惊人(Hermes ~30K token/轮),云端靠 prompt caching 扛,本地只能硬算 → 慢。
  4. Ollama 里的 Qwen 被锁在原生上下文(32K/40K),扩不到 64K;要 128K 请认准 llama / mistral 这些原生长上下文的家族。
  5. 能跑 ≠ 能用:8B 做 agent 会翻车;14B 内存又吃紧。24GB 的机器跑本地 agent,先天不足。
  6. 最大的赢家是磁盘清理:22GB → 73GB。有时候你出发去找宝藏,捡到的却是回家的路。

写在最后

失败吗?技术目标上,是。但我不觉得亏。

我搞懂了一整套原本一知半解的东西,顺手把电脑清干净了 50GB,还认清了一个道理——

工具是用来解决问题的,不是用来供着的。 与其为了「全都要本地」而忍受糟糕的体验,不如让云端和本地各干各擅长的事。

理想主义撞上 24GB 的内存墙,最体面的结局,是握手言和。

—— 记于一次「失败」但值得的折腾之后

本文由 karp 原创

采用 CC BY-NC-SA 4.0 协议进行许可

转载请注明出处:https://www.ikarp.top/index.php/archives/879.html

标签: 无标签

相关推荐

  • 暂无相关推荐,看看别的吧。

0 评论