Margrop
Articles308
Tags789
Categories6

Categories

1password 24GB VRAM 2K 3-SAT 3.6 Flash 30B dense 4-bit 量化 6-DoF SLAM AC ACP AI & Economy ATLAS AI Agent AI Coding Assistant AI Tech AI Workflow AI tutor AI 基础设施 AI 安全 AI 工程 AI 应用 AI 日记 AI 生产力 AI编程助手 ALTK-Evolve AMIE AP API API 定价 API 稳定性 API 降价 ARC-AGI-3 ASR ATEM chat 模板 AUTOMATIC1111 Agent Agent Harness Agent Memory Agent 入侵 Agent 可靠性 Agent 工程 Agent 推理 Agent 架构 Agent 检索 Agent 沙箱 Agent 系统 Agent 训练 Agent 记忆 Agent 评测 Agent 路由 Agentic AI Agentic SOC Agentic tools Ai2 Alertmanager AllenAI Android 17 Antigravity Apertus 1.5 AppDaemon AppWorld Apple Silicon Aqara Astra Async GRPO Attention AutoSynthData Baseten Benchmark CC-Switch CI/CD CLI Tools CLI工具 COBOL CPU 推理 Cache Hit Rate Caddy ChatGPT Claude Code Claude Sonnet ClawLoader Code Interpreter CodeMender Codex Coding Agent ComfyUI Computer Use Cookie 认证 Cosmos DB Cosmos-H-Dreams Cost Optimization Cron Cybersecurity DFIR DSpark Date DeepSeek DeepSeek V4 Flash Diagrams.net Diary Diffusers Diffusion Docker Efficiency Tools Embedding English Evaluation Cards FSDP2 Fable 5 Falcon ASR Fireworks AI FlashAttention FlashDreams Frontier AI Function Calling Funes GGUF GLM 5.2 GLM-5.2 GPT-4.1 GPT-5.6 GPT-5.6 Sol GPT-6 GPT-6 Astra GPT-Live GPT-Live-1 GPT-Red GPU 云 GPU 加速 GPU 性能分析 GPU 集群 GRPO Gated DeltaNet Gateway Gemini Gemini 3.5 Flash Gemini 3.7 Flash Gemini 3.8 Gemini 4 Argon Gemini API Gemini CLI Gemini Omni Flash Gemma 4 12B Gemma Translator Gemma4 GitHub Actions Google Google AI Google Beam Google Data Commons Google DeepMind Google Research Google Sheets Grabette Gradio Gradio Workflow Gripette HA HADashboard HF Security Incident Hailuo Hermes Hexo Holo4 HomeAssistant Hugging Face IBM Granite IBM Research In-context Learning Inference Providers Isaac Lab JSON Output JSON Schema Java KV cache KV 缓存 Kimi K3 Kubernetes LFM2.5 LFM2.5-VL LLM LLM Router LLM 安全 LLM 工程 LLM 评测 LVM‑Thin Late Interaction LeRobot Lean Linux Liquid AI LiquidAI Live Translate LoRA Luna MCP MLX MTP MacOS Magpie TTS Managed Agents Meta Microsoft 365 Copilot MiniMax Mistral Mistral Shieldstral MoE MoE 缓存 Model Routing MuJoCo Warp Multi-Agent Multi-Vector MultiLangBench Muse Glimmer Muse Spark Open MySQL NAS NIM NVIDIA NeMo Automodel NeMo Data Designer Nemotron Nemotron 3 Embed NeoMME Newton Nginx Node.js Nunchaku OCR OOM OlmoEarth On-device AI Open Source OpenAI OpenAI Codex OpenAI 兼容 OpenClaw OpenCode OpenResty OpenWrt PII 检测 Physical AI Pollen Robotics Portainer PostgreSQL ProcessOn Project Astra Prometheus Prompt Caching Prompt Injection Prompt 缓存 Proxmox VE PyTorch Qwen3 Qwen3-VL Qwen3.6 RAG RPC RTEB Real-Time Inference Red Teaming Reflection Beam Responses API SNAP SOCKS5 SPED SVDQuant SWE-Bench Schema Scientific Computing Self-Forcing Distillation Sentence Transformers Session Sheets canvas Shell Sol Speech-to-Text StateBench Storage Buckets Strands Agents Subagent Surgical Robotics TRL TTS Tabular Terra Think button TimeMachine Tokenizer ToyBlocks Transformers TutorMoments UML Uptime Kuma V4-Pro VLA VPS Voice Agent VoiceEQ WARP WebRTC WebSocket Windows World Foundation Model agent agentic aligenie aliyun annotation aop autofs backup bash bitwarden boot brew browser budget control centos cert certbot charles chat chrome classloader client clone closures cloudflare command commit commoditization container crontab cyber capability demo dependency deploy developer devtools dll dns docker domain download drafter draw drawio dsm dump dylib environment hooks exception fail-closed fail2ban feign firewall-cmd flow flow matching free tier frontier hosted model frp frpc frps fuckgfw full-duplex function gfw git github gperftools gridea grub guardrail lockout gvt-g hacs havcs heap hello hexo hibernate hidpi hoisting homeassistant hosts html htmlparser https huggingface_hub iKuai iMessage image img img2kvm immortalwrt import index inference cost install intel io ios ip iptables iso java javascript jni jnilib jpa js json jsonb jupter jupyterlab jvm k8s kernel key kvm lastpass launchctl learning letsencrypt linux llama.cpp low-code lvm mac mariadb markdown maven md5 microcode mirror modules monitor mount mstsc multimodal mysql n5105 network nfs node node-red nodejs nohup notepad++ npm nssm ntp oop open d1 open weights openfeign openssl os ovz packet capture pdf pem perf pip plugin png powerbutton print pro productive struggle pve pvekclean python qcow2 qemu qemu-guest-agent rar reasoning control reasoning slider reboot reflog remote remote desktop renew repo resize retina router runtime safari sata scaffolding scheduled triggers scipy-notebook scoping scp self-play server serverless inference silent test simulated student so speculative decoding spk spring springboot springfox ssh ssl stash string support svg svn swagger sync synology systemctl systemd template terminal txt ubuntu ui undertow unlocker upgrade vLLM vhd vim vm vmdk web windows with worker xml yum zai-org/GLM-5.2 zip 一致性评测 上下文压缩 上下文工程 专家剪枝 世界模型 事件响应 交换机 人才争夺 人机协作 代理 代码生成 代码迁移 仿真基准 企业 AI 企业自动化 优化 低延迟 低资源编程语言 供应链 健康检查 光猫 免费层 具身智能 内存 内存优化 内网渗透 决策模型 分布式存储 分布式推理 分布式训练 医疗 AI 升级 卫星影像 反向代理 反诉 可复现性 合成数据 后训练配方 向量检索 启动 告警 告警优化 图像生成 地球观测 地理空间推理 基础设施 复盘评测 夏令时 多 token 预测 多向量检索 多智能体 多模型编排 多模态 多模态 AI 多模态 API 多模态 Agent 多模态交互 多模态检索 多模态模型 多语言 多语言 AI 大厂人才战 大模型评测 天猫精灵 安全 安全事件 安全基础设施 安全对齐 安全评测 安全运营 安装 定时任务 实时协作 实时语音 客户端 SDK 容器 导入 小模型 小米 屏幕理解 工作流编排 工具审计 工具调用 工具调用拦截 工程团队 工程实践 工程笔记 常用软件 应用市场 延迟优化 开权重 开源权重 开源模型 异常 异步任务 异步委派 强化学习 形式化验证 微信 心跳 性能优化 性能捕捉 成本优化 成本控制 扩散模型 技术 抓包 拒答校准 持续预训练 按 provider 优先级 授权链 排查 推测解码 推理加速 推理引擎 推理成本 推理模型 推理速度 推理预算 描述文件 提示词敏感性 搜索 API 故障排查 效率工具 教育数据开源 教育评测 数学推理 数据工作流 数据治理 数据流 数据管线 数据集偏差 文本编码器 文档解析 旁路由 日志分析 日记 时区 显卡虚拟化 显存优化 智能家居 智能音箱 服务管理 本地 Agent 本地 agent 本地推理 机器人仿真 机器人学习 机器人数据采集 架构 模块 模型压缩 模型微调 模型快照 模型推理 模型评测 模型路由 残存访问 流式推理 流程 流程图 浏览器 混合专家 漫游 火绒 状态追踪 生成式影像 电信 画图 监控 监控系统 监管 知识蒸馏 磁盘 科研 Agent 科研自动化 稀疏注意力 立体声 端侧 AI 端侧推理 端口 端口冲突 端口扫描 结构化抽取 结构化输出 续期 网关 网络 网络安全 网络风暴 群晖 脚本 脚本优化 腾讯 自动化 自动恢复 自动攻击 自部署 苹果 虚拟机 表格基础模型 视觉语言模型 视频生成 视频问诊 计算复杂性 认证 训练基础设施 证书 评测 评测基准 评测方法学 诉讼 语义化版本 语音 AI 语音 Agent 语音识别 资源调度 超时 路由 路由器 软件工程 软件测试 软件管家 软路由 边缘 AI 运维 运维监控 连接保活 连接问题 通信机制 通知 邮件漏发 部署 配置 量化 量子计算 钉钉 镜像 镜像源 长上下文 长任务编排 长连接 门窗传感器 问题排查 防火墙 阿里云 阿里源 集客 非人类身份 飞书

Hitokoto

Archive

llama.cpp v1.0.0 拆解:语义化版本 + 150 多种架构,本地推理库给下游的 ABI 承诺值不值得信?

llama.cpp v1.0.0 拆解:语义化版本 + 150 多种架构,本地推理库给下游的 ABI 承诺值不值得信?

笔名:小六 / 上海 / 1995 女 / 某互联网公司工程师

本地推理库的版本治理与 ABI 边界

先说结论

11 月 13 日,ggml-org 同时把 llama.cpp 与底层张量库 ggml 推到 v1.0.0,并在 Hugging Face 博客给出配套说明:从此两个项目都按语义化版本走,公共 C API(./include 目录)出现不兼容变更才允许动 MAJOR,新增后端、新增模型架构、新增 API 一律只算 MINOR,纯 bug 修复算 PATCH。

我的判断:这次发布的功能增量并不惊艳,真正的价值是治理承诺——它第一次把「ABI 什么时候会断」写成可执行的规则,还给了一条硬约束:只有内部打包的 ggml 副本与正式发布的 ggml 完全一致,才会打 release tag。 对下游意味着两件事:系统级 ggml 与 libllama 可以放心分开装;但 MAJOR 一响,你就得重新编译,不能指望二进制兼容。这条规则值得信,但它只管「版本号说得清」,不管「升级不疼」。

发生了什么

官方事实一:发布主体、时间与位置。 主来源是 Hugging Face 博客《llama.cpp v1.0.0 : A stronger foundation for the local AI ecosystem》,页面标注发布日期 2026 年 11 月 13 日,署名作者 Daniel Bevenius、Georgi Gerganov、merve,归属 ggml-org 组织。同日 GitHub 上 v1.0.0 release 的发布时间戳是 2026-11-13T10:20:19Z,正文明确「Blog post: 见上」,两个源互为佐证,不是二手转述。原始 URL 见文末 Q1。

官方事实二:3.5 年的账被一次性结算。 博客开篇写得很直白:项目从立项到现在 3.5 年,下游应用已经大量依赖这套库,而「每一次新集成都意味着更多开发者依赖我们的库接口,因此一个灵活但稳定的 API 至关重要」。于是 v1.0.0 的定位不是「加了多少功能」,而是「把对下游开发者的责任显式化」。同一天 ggml 也发了 v1.0.0,两个库的版本号对齐——这是这次发布最容易被忽略、但对打包者最重要的一层。

官方事实三:发布节奏分两条轨。 依据 ggml-org 的 release 讨论文档(discussions/1579):nightly 构建用 commit 号 b[NUM] 作版本、编译时开 -DLLAMA_BUILD_IS_DEV=ON;正式发布用 vX.Y.Z、开 -DLLAMA_BUILD_IS_DEV=OFF。官方强调 release tag 的成立条件是「内部 ggml 副本与已发布的 ggml 副本完全相同」,这样「从 release tag 构建、并链接系统级 ggml 的下游」才能保证兼容。换句话说,b12345 这种 nightly 你可以天天追,但它的 ABI 没有任何承诺;只有 v1.0.0 这种 tag 才有契约。

相关事件(同一技术线的另一半)。 这个 v1.0.0 并不是只改了版本号:llama.h 里删掉了 35 个标了 DEPRECATED 的函数、llama_set_warmup、llama_context_params::defrag_thold 字段和 --defrag-thold 选项,同时把 NextN / 推测解码那套 API(18 个函数)从 llama-ext.h 提升进 llama.h,llama-ext.h 整个文件被删除(该 PR 的 diff 显示这个头文件减了 64 行)。合并时间 2026-11-12T18:59:10Z,作者是项目主维护者。也就是说:v1.0.0 的「MAJOR」不是抽象声明,它真的删了一批符号——旧代码会在编译期直接报错,而不是悄悄跑出错误结果。

技术细节

1. 版本规则写成三行表,边界很清楚

官方给出的映射是:MAJOR = ./include 下公共 C API 的不兼容变更;MINOR = 向后兼容的新功能、后端更新、模型支持或 API 新增;PATCH = 无 API 变更的 bug 修复。注意它把「新增模型架构」放进 MINOR——这条对追新模型的人很实用:你从 v1.0.0 升到 v1.1.0,理论上不需要改代码就能多认几种权重格式。

同时 llama.cpp 的内部 ggml 副本「可能偏离正式发布的版本」,nightly 就用这个内部副本;正式 release 则要求两者一致。这条约束解决的是长期困扰下游的一个具体问题:Debian、Homebrew 这类打包渠道把 llama.cpp 与 ggml 分成两个包,llama.cpp 包依赖系统级 ggml 包。如果内部副本偷偷领先,打包出来的二进制和系统库就对不上。现在这条规则把「对不上」的概率压到了 release 边界上。

2. 分发的八个渠道,说明它已经不是 hobby 项目

官方列的渠道:预发布产物覆盖 Linux / macOS / Windows / Android / iOS;Docker 覆盖 Linux;Debian、Homebrew(macOS + Linux)、conda-forge(三平台)、MacPorts(macOS)、Winget(Windows)、XCFramework(iOS + macOS)。这串清单的意义在于:一旦 MAJOR 变动,受影响的不止是源码用户,而是八个包管理生态要同步重打包。作者在同一篇文章里写「我们期待扩大分发方式」,并指向打包接入的讨论帖。

3. 覆盖率与 CI:150 多种架构不是口号

官方称当前支持「150 多种架构变体」以及「所有主流推测解码方法」,ggml 后端可按动态库编译、运行时选择性加载。支撑这套覆盖率的是 CI:官方写他们把容量投在 CI 基础设施上,借 Hugging Face 的 Buckets 与 Jobs 扩展算力,「保证每个落到 master 的变更都正确」,并列出 NVIDIA、AMD、Qualcomm、Arm、IBM、Intel 的硬件支持与自托管 runner。这段是官方自述,不是第三方评测,但它解释了为什么 nightly 一天能出十几个 tag——按 GitHub releases 的实际时间戳统计,11 月 12 日有 19 个 nightly(b12302–b12329),11 月 13 日到 10:20 为止已出 9 个(b12336–b12360)。这个节奏本身就是「nightly 不能当契约用」的最好证据。

4. v1.0.0 里真正落地的四项工程改动

release 正文按类别列了改动,挑四条对跑本地 Agent 最相关的:

  • FP8 KV 缓存:-ctk/-ctv f8_e4m3,可选「按张量的静态 scale」。KV 缓存是长上下文推理里最吃显存的一块,把它压到 FP8 意味着同样显存能撑更长的上下文;v0.9.0 那版先加了 FP8 E4M3 张量类型,v1.0.0 才把它接到 KV 上。
  • MoE 专家缓存搬到主机内存:新增 moe_cache_size 与 moe_cache_cpu_share 两个参数进 llama_context_params,未命中的专家交给 CPU 算,替换策略用 LRFU / ClassLRU 混合,且「命中的专家不让 CPU 等」。这是给消费级显卡跑大 MoE 模型留的活路——显存放不下的专家参数留在内存里,按需搬。
  • 外部 PLE / engram 分片加载:--shard / --ple 可以从独立 GGUF 分片里加载,不必把整个权重塞进一个文件。
  • 服务端安全加固:见下一节,这是本次最容易被低估的一组改动。

模型侧新增了 Kimi-K3.1-Pro(把全注意力 MLA 层换成 DSA)、Ripple-65B-Preview(新的稠密 65B 架构、无新算子)、xing4_0(mHC + MLA + MoE + MTP)、drama-3 TTS,以及 MageVL-Cowork 与 Kimi-K3.1 的视觉支持。多模态侧还去掉了 clip.h、把模型与子上下文基础设施并进 mtmd,并让视觉 + 音频 + 生成三类模型共享同一块计算缓冲。

5. 服务端加固:默认从「信任局域网」改成「默认不信」

这组改动值得单列,因为它改的是默认行为而不是加功能:

  • --allow-unauthenticated-tools:当 --host 绑到非回环地址、又没配 API key 时,开工具或 MCP 现在会直接报错,必须显式 opt-in(PR 32113,2026-11-12 合并)。作者在 PR 里写得很实在:这些「其实都不算漏洞」,但因为部署越来越多直接跑在本机上,只好牺牲一点易用性。
  • --media-allow-private-urls:CORS 代理与输入媒体的 URL 原本可以打到任意本地地址,现在 CORS 代理只允许打公网,媒体要指向同网段的 NAS 就得加这个开关(PR 32115)。
  • --cors-origins 端口校验 + DNS rebinding 防护(PR 32098,2026-11-11 合并);HF_TOKEN 只对 huggingface.co 的 host 生效。
  • MCP 工具取消:客户端断开或超时,服务端不再干等到 timeout_ms,而是把 should_stop 透传给 MCP 传输层,并按规范给 MCP 服务器发 notifications/cancelled(PR 32025)。这条对 Agent 编排很关键:以前取消生成不会取消已经发出的工具调用,MCP 服务器继续跑、结果被丢弃。

对 Agent / 工程的影响

第一,把「本地推理服务」当 Agent 宿主的部署,必须重新审一遍默认配置。 很多人用 llama-server 起一个 OpenAI 接口兼容的端点,然后在本机或同网段直接给 Agent 调工具、给 MCP 挂能力。v1.0.0 之后,如果 --host 不是回环地址、又没 API key,工具会直接被拒;媒体如果指向同网段存储,也得显式开 --media-allow-private-urls。这不是 bug,是默认姿态变了——升级后第一次启动很可能报错,要提前知道这是预期行为。

第二,MCP 取消语义的补齐,直接影响 Agent 的重试成本。 客户端断开时工具还在跑,意味着一次网络抖动可能留下一个仍在执行的副作用(写文件、发请求),而 Agent 侧已经重试了一次。v1.0.0 把取消传到 MCP 服务器,至少让「取消」这件事变成协议层可传达的信号。

第三,FP8 KV 缓存与 MoE 主机缓存是「省钱」而非「提速」的改动。 前者换上下文长度,后者换能跑多大的 MoE。如果你的 Agent 常驻一个长上下文会话,FP8 KV 是立刻可用的;如果你在消费级显卡上跑大 MoE,moe_cache_cpu_share 需要实测调参,官方只给了参数与替换策略,没给推荐值。

第四,版本治理对「打包」比对「写代码」更重要。 如果你只是 pip install 或 brew install 之后跑 CLI,v1.0.0 的语义化规则对你几乎无感;如果你把 libllama 链进自己的二进制、或维护一个插件式后端,这条规则才是核心——它告诉你什么时候必须重编译、什么时候可以只换 so。

第五,nightly 追新要付代价。 一天十几个 b tag 说明 master 变更极密;nightly 没有 ABI 承诺,也没有「内部 ggml 与发布 ggml 一致」的保证。追 nightly 的团队要接受「随时可能重编译」,别把 nightly 当稳定基线写进生产依赖。

我的判断

这是一次治理发布,不是能力发布。 四项功能改动里只有 FP8 KV 缓存和服务端默认收紧会影响日常使用,其余是补齐与清理;真正的分水岭是「MAJOR = 公共头文件不兼容」这条规则被写死,加上 release tag 的 ggml 一致性条件——这两条让下游第一次有了可预期的升级节奏。

对自建本地推理栈的人:可以升,但要先测三件事——非回环地址下工具是否还被拒、指向同网段存储的媒体能否读、长上下文下 FP8 KV 的实际质量损失。

对只跑 CLI 的人:不必急着升。 删掉 35 个废弃函数对 CLI 用户几乎透明,收益主要是少踩坑;等下一个 MINOR 带来新模型架构再升更划算。

Q&A

Q1:来源、发布日期与原始 URL?
A:主来源为 Hugging Face 官方博客《llama.cpp v1.0.0 : A stronger foundation for the local AI ecosystem》,发布日期 2026-11-13,URL https://huggingface.co/blog/ggml-org/llama-cpp-v1。配套一手材料:GitHub release v1.0.0(发布戳 2026-11-13T10:20:19Z,URL https://github.com/ggml-org/llama.cpp/releases/tag/v1.0.0);版本与分发规则见 https://github.com/ggml-org/ggml/discussions/1579;API 清理 PR #30565、服务端 opt-in PR #32113 / #32115、CORS 与 DNS rebinding 修复 #32098、MCP 取消 #32025。以上均为官方仓库原文,非媒体转述。

Q2:怎么最小验证这套版本规则?
A:两步。第一步比对版本号与构建开关:从 release tag 构建时 -DLLAMA_BUILD_IS_DEV=OFF,nightly 用 b[NUM] 且 ON;第二步验证 ggml 一致性——release 正文写明内部副本必须等于已发布的 ggml 版本,因此把 libllama 与系统 libggml 分别安装后跑一次推理即可确认链接没断。若你想验证「MAJOR 真的会断」,拿 v0.9.0 时代的代码去编 v1.0.0,调用 llama_set_warmup 或读 defrag_thold 字段,应当直接编译失败。

Q3:适用边界是什么?
A:语义化规则只覆盖 ./include 下的公共 C API。内部实现、结构体布局细节、nightly 的 b tag、以及 ggml 内部副本相对发布版的偏离,都不在这条承诺范围内。另外「新增模型架构算 MINOR」意味着 MINOR 升级也可能带来行为差异(新架构的默认参数、新的 chat 模板解析分支),不算 API 破坏但可能改变输出。

Q4:和「直接 pin 一个 nightly commit」比,哪个更稳?
A:pin nightly 的优点是拿到最新架构支持,缺点是零 ABI 承诺、零 ggml 一致性保证、且 master 一天十几个 tag 意味着你 pin 的版本很快落后。pin release tag 的优点是契约清晰、可分渠道打包,缺点是新模型要等 MINOR。生产环境建议 pin release;实验环境追 nightly,并把「随时重编译」写进流程。

Q5:升级最容易踩的坑?
A:三个。一是服务端默认收紧——非回环 --host 且无 key 时工具/MCP 直接报错,需要 --allow-unauthenticated-tools;二是媒体指向同网段存储需要 --media-allow-private-urls,否则视觉输入读不到;三是删符号是编译期硬失败,插件或自研后端如果还引用 llama-ext.h 里的旧路径,升级当天就会编不过——先把 llama-ext.h 的引用清掉再升。

本文阅读量 --
Author:Margrop
Link:https://blog.margrop.com/post/2026-11-13-llamacpp-v1-stable-abi/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可