llama.cpp 模型管理和路由器模式
The llama-server 现在包含一个 路由器模式,使用户能够在不需要重启服务器的情况下动态加载、卸载和切换多个模型。此更新将 Ollama 风格的模型管理引入到 llama.cpp,采用多进程架构,每个模型在其自身的进程中运行,以确保一个模型的崩溃不会影响其他模型。
动态模型加载和路由
llama-server 现在可以根据 API 请求中的 model 字段按需管理多个模型,将请求路由到相应的模型。
关键管理功能
- 自动发现:服务器会自动扫描
llama.cpp缓存(由LLAMA_CACHE或~/.cache/llama.cpp定义)或通过--models-dir指定的自定义目录中的 GGUF 文件。 - 按需加载:模型在首次请求时自动加载到内存中。对同一模型的后续请求将立即处理。
- LRU 淘汰:为管理内存,服务器采用最近最少使用(LRU)淘汰策略。当已加载模型的数量达到最大值(由
--models-max定义,默认为 4)时,最近最少使用的模型将被卸载以释放资源。 - 手动控制:用户可以通过 HTTP POST 请求使用
/models/load和/models/unload端点显式管理模型。
配置和技术选项
路由器模式下的模型会继承路由器的全局设置,例如上下文大小(-c)和 GPU 卸载(-ngl)。然而,可以通过预设进行细粒度控制。
关键命令行标志
| Flag | Description |
|---|---|
--models-dir PATH |
指定包含 GGUF 文件的目录。 |
--models-max N |
设置同时加载的最大模型数量(默认:4)。 |
--no-models-autoload |
禁用自动加载,需要显式调用 /models/load。 |
每个模型的预设
用户可以通过 --models-preset 传递的 config.ini 文件为各个模型定义特定的配置。这允许为每个模型自定义上下文大小和温度设置。根据社区讨论,presets.ini 也可以用于为特定模型指定 mmproj(多模态投影)文件。
API 和界面集成
模型管理已集成到 API 和用户界面中:
- API 列表:向
/models发送 GET 请求将返回所有发现的模型及其当前状态(loaded、loading或unloaded)。 - Web UI:内置的
llama.cppWeb UI 通过下拉菜单支持模型切换,这将触发自动加载。 - OpenAI 兼容性:服务器仍然是一个轻量级的 OpenAI 兼容 HTTP 服务器,使其易于集成到现有工作流程中。
社区见解
用户已强调此功能在 A/B 测试模型版本和创建多租户部署中的实用性。就技术细节而言,社区成员指出:
"llama-server 在大多数实现中默认将推理内容保存在响应属性的
reasoning_content变量中。您可以从那里获取它。否则,使用 reasoning-format 标志并传递 DeepSeek 值以获取纯标记。"
这表明虽然路由器管理模型,但底层服务器仍然支持诸如推理标记之类的高级输出格式,以适应特定的模型架构。