跳转到主内容
博客
拼图的最后一块:vibe一个推理引擎

拼图的最后一块:vibe一个推理引擎

做完 AIMA 管理层和售后层之后我发现还差一块。Ollama 太傻、llama.cpp 精度被自己的格式吃了、vLLM 又太重。市面上没有现成的解,那就自己来。

关嘉伟关嘉伟6 分钟阅读
分享:

昨天看到一条新闻,盯了挺久。

23 岁的 Liam Price,没什么高深数学背景。一个普通星期一的下午,他把一道编号 Erdős #1196 的题随手丢进了 ChatGPT,几轮挑挑拣拣之后,居然把一道困扰数学界 60 年的难题给捅破了。Terence Tao 看完之后说了句很有意思的话:以前看过这道题的那些人,"从第一步就走偏了"。

那条新闻让我那晚没怎么睡好。倒不是羡慕,是我开始重新审视手里这几个项目。

一张拼图,差最后一块

做边端 AI 这条线,我心里一直有一张拼图。

要解的核心矛盾很经典。一头是 SOTA:希望小型化设备上跑 AI 模型也能拿到当前业内最强的性能,而且要跨各种操作系统、各种硬件。另一头是 TCO:这台设备的总拥有成本要尽量压到接近硬件加电费。

单看任何一头都不算难,凑一起就拧巴。要 SOTA 就得请专家针对这台机器的硬件、推理引擎、模型去专门调;调参的人月薪两万不算贵,但放到一台两万块的边端设备上,这账就算不平了。这件事的来龙去脉我之前在《边缘AI推理:算力金矿,还是管理黑洞?》里写过。

为了堵这个矛盾,我做了两块拼图。

第一块叫 AIMA。一个知识驱动的管理平台,把调优的知识塞进去,让 Agent 在每台设备上自己跑 benchmark、自己调参,慢慢逼近这台机器的最佳性能。说白了就是把"那个两万月薪的人"的活让 AI 接走。

第二块叫 AIMA Service。设备出问题之后的售后维护,过去得让工程师远程连进去人肉操作。AIMA Service 让 Agent 直接接管这块,诊断、调优、修故障一条龙,把超出现场管理者认知边界的事情吃掉。

两块拼图齐了之后,我以为差不多到位了。直到最近真上手用,才发现一件尴尬的事:我做完一整套管理层,不知道去管什么推理引擎

现在能选的引擎,每个都让我皱眉

Ollama:体验最好,性能最遗憾

Ollama 的体验是真的好。装上、点一下、模型自动下载、一键启动,跨 macOS / Windows / Linux 都很丝滑。第一次接触私有化部署的人几乎都从这里入坑。

但它有两个硬伤。

第一个是性能拿不到。Ollama 背后跑的其实是 llama.cpp,llama.cpp 的可调参数极其多极其复杂,这是它的优点(足够灵活),也是它的缺点(绝大多数人调不出最佳那一组)。Ollama 干脆替所有人选了一套保守的默认值,让普通人开箱就能跑,代价是几乎永远拿不到这台机器的极限性能。

第二个是默认只有一并发。OLLAMA_NUM_PARALLEL 出厂就是 1,每个请求老老实实排队。可以配上去,但配上去意味着上下文要按并发数线性放大、内存得重新算账,并不是开关那么简单。批处理任务、Agent 多步调用,遇到 Ollama 都会很疼。

llama.cpp:参数能调,精度被自己的格式吃了

直接用 llama.cpp 而不是用 Ollama,性能能高 5–10%,并发更可控,跑得动各种各样的硬件。当前最跨平台的引擎之一。

但有一件事我之前没注意到,最近做出来才意识到:它必须把模型从 safetensors 先转成自家的 GGUF 格式才能跑。

这一步在过去的聊天场景里没什么问题。一到 Agent 这种走多步调用的场景,麻烦就来了。

哪怕完全不做量化,光是这一步格式转换,模型在智能体任务上就会出现一次比较明显的精度下滑。再往下走如果做了量化,事情更糟。我看过一些公开数据:Q4_K_M 在某些小模型上准确率会从 0.87 一路掉到接近一半,Q3_K_M 直接崩盘;Llama 3.2 3B 转成 q4_k_m 之后 MMLU 从 64.2 掉到 61.8。

这些数字单步看还能忍。但 Agent 一次任务要走几十步,每步丢一点点精度,复合衰减跑下来就是另一回事。有研究统计过,对话长度涨 50%、效率降 3–5%;超过 12 轮之后,Agent 开始大量做无意义的重复操作,把上下文塞满垃圾。

所有人都在往 Agent 编程、智能体场景走。这条路上的精度问题,只会更难处理,不会变轻。

vLLM / SGLang:性能拉满,但是另一种重

vLLM 和 SGLang 是另一极。性能拉满,原生支持多模态。vLLM 现在已经稳稳支持视觉模型,加上 ASR / TTS、embedding、rerank 这一套接口;SGLang 那边支持 30+ 多模态模型、扩散模型,甚至 TTS。云端推理引擎的标准答案。

但放到边端,问题也很直接:包大小动辄十几 GB,部署很重,跨平台不友好。让一个普通用户在自己的 16GB 盒子上跑 vLLM,几乎不现实。

我想要的引擎是什么样的

把这三家的优点和痛摊到一张桌子上,要的引擎其实就是把它们的优点拼起来。

像 Ollama 一样开箱即用,跨操作系统,几百兆量级的包大小,点一下就跑。底层像 llama.cpp 一样灵活,CPU、GPU、NPU 不挑。性能像 vLLM 那样拉满,原生支持视觉、ASR、TTS、embedding、rerank,而不是后面打补丁补上去的。最后还有一条:不要 GGUF 中转,直接吃 safetensors,避开格式转换带来的精度悬崖。

这几件事单独都有人在做。把它们叠在一起做的,我目前没看到。

如果做出来了,整张拼图就闭环了。用户体验跟 Ollama 一样傻瓜,几百兆装上点一下就跑。性能上 AIMA 在背后让 Agent 自动调参,逼近 vLLM 那种 SOTA。本地直接跑视觉、语音、embedding、rerank,不用再去关联一堆云端账号。出问题 AIMA Service 自己接管。

这件事其实就是我之前在《AI盒子该像路由器一样无聊》里讲那个"什么辅助模型都跑得动的盒子"的最后一块拼图。

三个月前我不敢想的事

讲到这里得说点别的。

3 个月前我对"做推理引擎"这件事的态度是:不敢想。太底层、太硬核,市面上做这事的开源项目要么死气沉沉、要么是大厂内部的活。

但今天我已经动手了,甚至不只是一个引擎,是几个不同版本的引擎。这个心态怎么变过来的?

3 个月前我第一次认真上 AI coding。给团队布了个一周的小任务:写个性能测试脚本,因为这事我惦记好久了一直没人帮我做。一周后大家陆陆续续都把工具做出来了。

做完之后开始有新想法:能不能做个 demo?展会上能展示的那种。做着做着又想,能不能做一个自动获客的小工具?做出来之后再想,能不能给自己做个个人官网?

每一件事做出来都让我惊讶。预期都很低,结果都跑通了。

到这里就开始往大处想:之前一直想做的模型管理平台(AIMA),是不是我自己也能做出来?花了一段时间,居然真做出来了,开始接真实业务跑。

下一步我又问:那能不能做个云服务?这跟做单机软件完全是另一个领域,我以前没碰过。结果还是能搭起来,真的能给人用。

再到最近开始去优化硬件层的性能,拿到了非常不错的结果。这一刻我突然意识到,AI 真能在原本属于研究项的、非常底层的事情里产生突破,尤其是那种端到端可以验证的场景。

回头看:之前积攒的软件能力、云能力,加上现在这块研究项的能力,组装一下就是一个推理引擎。从不敢想到已经在做,差的不是技能,是一次次"诶,原来这也能做"。

每一步都是"试一下没想到能行"。每一步又把"下一步还能做什么"的答案再撑大一圈。

写在最后

回头看那条 23 岁小伙的新闻。

最值得记的不是"AI 做出了数学家的发现"。原报道里写得很坦白,AI 直接产出"质量很差",是人挑出了里面有价值的那一点。值得记的是它的触发结构:一个不在数学圈、没受过专业训练的 23 岁年轻人,因为有了 ChatGPT,敢去碰一道困扰数学界 60 年的题。

不是 AI 替你做了,是 AI 让你敢做了。

我自己这 3 个月也一样。从一个性能测试脚本起步,一步一步把原本以为不可能的事变成现在动手在做的事。模型每个月都在变强,今天卡你的事情,往往两个月之后下一代模型一出来就只是个工程量问题。

倒不是说躺着等模型就好。是说今天觉得做不了的事,最好别太快下结论。能做的范围,每个月都在变大。


参考资料

推荐阅读

订阅博客更新

新文章发布时第一时间通知你,不会发送垃圾邮件。

仅用于博客更新通知,随时可以取消订阅。

评论

或匿名评论
0/2000