llama.cpp b12008修正Gemma模型加载顺序,CPU模式显存占用降约 216 MiB
llama.cpp发布b12008版本,调整gemma3n与gemma4的token_embd创建顺序,避免输入输出共享缓冲区类型时重复持有词嵌入表;官方给出gemma-4-E2B-it Q4_K_M在纯CPU、无mmap下模型缓冲区从 3163.73 MiB降至 2947.73 MiB。
AI解读:本次更新针对gemma3n和gemma4模型,在创建与输出层共享权重的输出之前先创建token_embd,原因是重复输出会在其缓冲区上下文中查找token_embd,必须先存在。
旧顺序下,当输入和输出共享同一种缓冲区类型(例如纯CPU运行、-ngl 0)时,词嵌入表会被持有两次。
发布说明给出的实测例子是gemma-4-E2B-it Q4_K_M、不使用mmap、纯CPU模型缓冲区,从 3163.73 MiB降至 2947.73 MiB。
该版本同时提供macOS、iOS、Linux、Android、Windows等多平台预编译包,部分后端如KleidiAI和openEuler构建处于禁用状态。
llama.cpp发布b12008版本,提交说明为“gemma3n, gemma4 : create token_embd before the tied output (#31394)”。改动内容是让token_embd在绑定的输出层之前创建。
加载顺序修正与内存效果
发布说明解释,重复的输出会在其缓冲区上下文中查找token_embd,因此token_embd必须先存在。旧顺序下,当输入和输出共享同一种缓冲区类型时(例如纯CPU运行、-ngl 0),词嵌入表会被持有两次。
发布说明给出的例子是gemma-4-E2B-it Q4_K_M、不使用mmap、纯CPU模型缓冲区,数值从 3163.73 MiB变为 2947.73 MiB。该数据来自发布说明,属于项目方的单例说明。
- 适用模型:gemma3n、gemma4。
- 触发条件:输入和输出共享缓冲区类型,如CPU-only、-ngl 0。
- 示例模型:gemma-4-E2B-it Q4_K_M,no mmap。
- CPU模型缓冲区:3163.73 MiB → 2947.73 MiB。
预编译包与平台状态
b12008发布页列出了macOS Apple Silicon(arm64)、macOS Intel(x64)、iOS XCFramework、Ubuntu(x64/arm64/s390x及多种加速后端)、Android arm64、Windows(x64/arm64及CUDA、Vulkan、OpenVINO、SYCL、ROCm等构建)的下载包,并包含UI包。
发布页同时标注macOS Apple Silicon的KleidiAI启用版本为DISABLED,openEuler相关构建也为DISABLED。