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 请求将返回所有发现的模型及其当前状态(loadedloadingunloaded)。
  • Web UI:内置的 llama.cpp Web UI 通过下拉菜单支持模型切换,这将触发自动加载。
  • OpenAI 兼容性:服务器仍然是一个轻量级的 OpenAI 兼容 HTTP 服务器,使其易于集成到现有工作流程中。

社区见解

用户已强调此功能在 A/B 测试模型版本和创建多租户部署中的实用性。就技术细节而言,社区成员指出:

"llama-server 在大多数实现中默认将推理内容保存在响应属性的 reasoning_content 变量中。您可以从那里获取它。否则,使用 reasoning-format 标志并传递 DeepSeek 值以获取纯标记。"

这表明虽然路由器管理模型,但底层服务器仍然支持诸如推理标记之类的高级输出格式,以适应特定的模型架构。

Sources