llama.cpp服务端新增内存余量参数,可在显存不足时动态卸载模型
b11930版本引入 --models-memory-max,按每块设备分别计算模型加载所需内存余量;当排队加载被内存限制阻塞且无空闲模型可卸载时,等待方改为休眠而非反复重试。
AI解读:llama.cpp发布b11930版本,服务端新增路由器设备内存余量参数,用于在模型超出内存阈值时动态卸载模型(PR #21231)。
新参数名为 --models-memory-max,以内存余量而非总容量上限的方式限制,并按每块设备分别适用;估算时会把待加载模型的体积计入。
实现上用no_alloc获取仅用于加载的内存需求,先对模型内存进行估算,再在子进程中执行;内存上限只作用于子进程,不向其传递余量参数。
该提交作者说明,测量子进程以no_alloc运行,其报告的可用内存不含自身估算,因此在实例报告之外才减去自身;此前在 --fit开启时会把他进程内存扣到零,下一次加载可能超出余量。
同一修复还处理了排队加载的忙等:原逻辑在认领前只检查 --models-max,内存余量阻塞时load() 抛错、等待方紧循环重试;现改为在限制超出且无空闲模型可卸载时拒绝认领,让等待方在条件变量上休眠直到有模型空闲。
版本同时提供macOS、Linux、Windows、Android等多平台预编译包,包括CUDA 12/13、Vulkan、ROCm 10.0、OpenVINO、SYCL及Snapdragon等后端。
llama.cpp发布b11930版本,服务端加入路由器设备内存余量参数,支持在模型超出内存阈值时动态卸载模型(PR #21231,提交信息由该PR描述给出)。
--models-memory-max的作用范围
提交说明称,新参数 --models-memory-max允许在模型超出内存大小阈值估算时动态卸载模型,估算包含待加载模型的体积。限制以内存余量的形式表达,而非总容量上限,并且对每块设备单独应用。
实现上使用no_alloc仅获取模型加载所需的内存,模型内存只在尚未计算时设置;同时加入了服务端内存调试日志。
- 参数名:--models-memory-max
- 限制方式:内存余量,按设备分别适用
- 估算范围:包含待加载模型的大小
- 配套:服务端内存调试日志
测量子进程与排队加载的修复
提交中有一段修复说明:运行no_alloc的测量子进程所报告的可用内存不包含其自身估算,因此在 --fit开启时若减去自身,会把其他进程占用的内存扣到零,下一次加载可能超出余量;现在只在实例报告中减去自身。
排队加载原先在认领前只检查 --models-max,被内存余量挡在忙碌模型之后时load() 抛错,等待方陷入紧循环重试。现在在限制超出且没有空闲模型可卸载时拒绝认领,等待方在条件变量上休眠,直到有模型空闲。
- 测量子进程不再错误扣除自身内存
- 排队加载从紧循环重试改为等待条件变量
- 无空闲模型可卸载时拒绝认领
构建产物
发布页列出macOS(arm64、x64)、iOS XCFramework、Ubuntu(CPU、Vulkan、CUDA 12.8、CUDA 13.4、ROCm 10.0、OpenVINO 2026.4.1、SYCL FP32/FP16)、Windows(CPU、CUDA、Vulkan、OpenVINO、SYCL、ROCm)、Android与Snapdragon等预编译包。
- macOS arm64的KleidiAI构建标记为DISABLED
- openEuler构建同样标记为DISABLED
- 提供UI独立压缩包