llama.cpp b11930 发布:server 支持按设备内存余量动态卸载模型
server:新增路由设备内存余量参数,支持动态卸载( #21231 )。server:新增 --models-memory-max 参数,当模型超过内存大小阈值时允许动态卸载;估算时计入待加载模型的大小;使用 no_alloc 仅获取模型加载所需内存;设置模型……
server:新增路由设备内存余量参数,支持动态卸载( #21231 )
server:新增 --models-memory-max 参数,当模型超过内存大小阈值时允许动态卸载模型
估算时计入待加载模型的大小
使用 no_alloc 仅获取模型加载所需内存
若此前未计算,则设置模型的 memory_mb
改用内存余量而非总大小上限,并分别应用到每台设备
新增 server 内存调试日志
将 llama_context_device_memory 函数移至 llama-ext.h
修复模型数量超限检查
改进 memory_per_device 映射的命名
改进变量命名,修正风格
同时让子进程也扣除模型内存余量
续:清理
用 buft 内存映射替换设备内存映射,改用 llama_get_memory_breakdown
把重复的检查提取为辅助函数
将模型内存估算移至子进程
预计算 name->buft 映射,将 GPU host 类型映射到 CPU buft
清理未使用变量
移除重复的 init 调用
适配上游变更
wip
common_memory_reports 接口
SERVER_ROLE_MEASURE
server-models-sched
修复构建
server:修复 measure 子进程的内存记账与 claim 自旋
measure 子进程以 no_alloc 运行,因此它报告的空闲内存不包含自身的估算:在那里扣减自身,会把其他进程占用的内存一并抹掉,开启 --fit 时甚至归零,下一次加载便可能超出余量。因此只对实例报告扣减自身。
排队中的加载此前只在认领前检查 --models-max,因此当内存余量把它挡在某个繁忙模型之后时,load() 抛出异常,等待方陷入紧密循环重试。现在的做法是:在超出限额且没有可卸载的空闲模型时拒绝认领,让等待方在条件变量上休眠,直到有模型空闲下来。
Co-authored-by: Xuan Son Nguyen son@huggingface.co
Co-authored-by: Pascal admin@serveurperso.com
Website: https://llama.app
Attestations: https://github.com/ggml-org/llama.cpp/attestations/60393615
发布说明另附各平台构建产物清单。