在 GPU 主机上运行一条命令。
curl -fsSL https://raw.githubusercontent.com/ Podwarden/ lm-warden/ main/ install.sh | sh -s -- --dir /opt/ vllm-warden
LM Warden 在你自己的硬件上运行 vLLM、llama.cpp 或 MLX,并在其前端提供一个兼容 OpenAI 的端点:每个应用一个密钥,每个密钥的用量,以及每块 GPU 的实时面板。可运行于配备 NVIDIA 显卡的 Linux 主机,或 Apple 芯片 Mac。
开源,Apache-2.0无需账户,无遥测Linux + NVIDIA · macOS(测试版)· Windows 开发中
在上方选择一个平台查看其步骤,或显示全部四种。
curl -fsSL https://raw.githubusercontent.com/ Podwarden/ lm-warden/ main/ install.sh | sh -s -- --dir /opt/ vllm-warden
我们正在开发,哪天有了可用版本就放到这里,而不是先放一个注册表单。在那之前,有两个实在的选择:
运行 LM Warden 的第四种方式,适合一台只做这件事的主机。
在它发布之前,上面的 Linux 安装能在你自己搭建的主机上完成同样的工作,包括离线 / 物理隔离安装。在 GitHub 上关注发布。
单独运行的推理引擎只能在一个端口上提供一个模型。下面是 LM Warden 在引擎之外补齐的部分,凡有自测数据的都一并给出。
把 Hugging Face 仓库粘贴到 Add model 中。每个文件都会列出针对你所勾选显卡的结论:放得下、余量紧张或放不下。勾选更多显卡,可用显存会相应累加。在有能放下的文件之前,不会下载任何内容。
吞吐量 = 并发数 × 提示词长度 × 缓存复用,而单独运行的推理引擎无法把这些放在一起展示。Stats 页面可以,范围从 1 h 到 7 d:VRAM、GPU 利用率、功耗(Linux)、每秒 token 数(提示词 token 分为已缓存和需计算两部分)、p50/p95 延迟、提示词缓存命中率、抢占、按密钥和按客户端 IP 统计的请求数。队列积压而利用率上不去,说明“需要更高并发”;缓存占比低,说明“需要固定会话”。
聊天和其他功能在同一个窗口中。流式 Markdown,支持代码高亮和数学公式;视觉模型每条消息最多可附带八张 PNG、JPEG 或 WebP 图片;每个聊天可设置温度、top-p、最大 token 数和系统提示词,并保存为默认值;聊天会被保留、自动命名,并且可以分叉。模型发出的工具调用会被渲染出来,因此你可以在智能体依赖工具调用之前先检查它。
God mode 用于调试提示词:在部署中开启 VW_GODMODE_ENABLED 后,每个密钥的页面都会出现一个停靠面板,实时流式显示该密钥的提示词和补全内容。默认关闭,关闭时完全不存在。它是一个有容量上限的内存环形缓冲区:不写入数据库或磁盘,重启即消失。任何拥有管理员会话的人都能打开它;warden 只有一个管理员角色,没有其他角色。
智能体每一轮都会重新发送全部历史,所以长对话的大部分内容是引擎已经读过的前缀。vLLM 会把这部分工作保存在前缀缓存中,但只保存在完成这项工作的副本上,而它自带的负载均衡器会把每一轮发给队列最短的副本。LM Warden 把每个新对话放到负载最低的副本上并让它留在那里,使用的是 Claude Code 本来就会发送的会话 ID。只有当该副本超过溢出阈值时,它才会转移请求。
在我们的四卡主机上实测(4 × RTX A4000,Qwen3-4B 作为四个单卡副本,模拟 Claude Code 风格的会话,先关闭亲和性再开启,两组连续运行):把对话固定到副本后,在 4 个并发会话时,从缓存提供的提示词 token 占比从 56% 升至 86%,首字节时间中位数从 2.05 降至 0.38 s。在我们测试的每一级中,每分钟输出 token 数都更高,p95 首字节时间(最慢的 5%)也都更低。实际在工作的副本数几乎没变(4 个会话时为 2.71 对 2.83,总共四个):收益来自缓存复用,而不是更多显卡投入工作。
| Sessions | Sessions/h off → on | Output tokens/min off → on | TTFB p50 off → on (s) | TTFB p95 off → on (s) | Replicas busy off → on | Prefix hits off → on (%) | Stayed on replica (%) |
|---|---|---|---|---|---|---|---|
| 4 | 180 → 240 | 5,886 → 6,744 | 2.05 → 0.38 | 3.5 → 2.84 | 2.71 → 2.83 | 56.2 → 86.4 | 100 |
| 8 | 300 → 380 | 8,364 → 10,752 | 2.33 → 0.48 | 6.32 → 5.03 | 3.74 → 3.74 | 44.3 → 86.1 | 100 |
| 16 | 300 → 360 | 9,558 → 12,204 | 3.25 → 0.85 | 26.24 → 24.88 | 3.91 → 3.69 | 33.2 → 48.6 | 100 |
| 24 | 300 → 420 | 9,048 → 11,178 | 5.06 → 13.14 | 58.82 → 38.34 | 3.91 → 4 | 32.8 → 37.9 | 89.1 |
| 32 | 520 → 620 | 14,760 → 16,638 | 12.32 → 27.66 | 82.84 → 38.92 | 4 → 4 | 31.6 → 31.6 | 67.3 |
在我们的四卡主机上用一个小模型测量,先关闭亲和性,再开启,中间没有重启 vLLM:第二组开始时前缀缓存已经预热,两组的提示词都来自同一个随机种子。每一级持续 3 分钟,因此只能完成 9 到 31 个会话,多一个或少一个会话就会让每小时会话数变化 20;每分钟输出 token 数是更稳定的一列。你的模型、显卡和工作负载会有所不同;模型页面上的副本卡片会为你的环境显示同样的计数器。
sticky)或通过溢出到达、正在运行和等待的请求、使用中的 KV 缓存以及前缀缓存命中率。记录于 2026 年 10 月 4 日,亲和性开启,溢出阈值为 8(自动):sticky 100%,副本 0 到 3 的前缀缓存命中率分别为 82.2%、86.0%、69.0% 和 80.0%。图中是控制台里的计数卡片,并非基准测试结果。点按卡片可放大。代价在哪里。24 和 32 个会话这两级是有意让四块小显卡过载,每个副本都已饱和。输出仍然更高(每分钟 11,178 对 9,048 和 16,638 对 14,760 个 token),长尾延迟也短得多(p95 38 对 59 s,以及 39 对 83 s),但开启亲和性后首字节时间中位数更差:24 个会话时为 13.1 对 5.1 s,32 个会话时为 27.7 对 12.3 s。我们尚未查明原因,把溢出阈值从 8 降到 4 也没有改变这一点。
在繁忙的主机上两种都测一下。有余量时优势最大;长期满负荷运行的主机应该把两种设置都测一遍,亲和性可以按模型关闭。副本以及这种路由属于配备 NVIDIA GPU 的 Linux 安装;Mac 应用(测试版)不支持张量并行或数据并行。
十款编程智能体只需一个 base URL 和一个密钥即可连接;其中两款还能继续用付费的 Claude 订阅处理更难的任务。
通过兼容 OpenAI 的 API。每个请求都按密钥和会话显示。
Claude Code 和 Anthropic SDK 通过路由器接入。由一条规则指定由你的 GPU 应答哪些 Claude 模型;其余请求以你自己的登录或密钥发往 Anthropic。
ANTHROPIC_BASE_URL 指向 warden,warden 密钥放在 ANTHROPIC_CUSTOM_HEADERS 中,你的登录保持不变。我们尚未对回答质量做基准测试:请把常规、需求明确的工作交给本地模型。在控制台中选择客户端、密钥和一个已加载的模型;它会根据实际加载的内容逐项检查要求(上下文窗口、工具调用、路由器是否开启),并给出可直接粘贴的文件。所有编程智能体,每个客户端一个页面,写明哪些可用以及我们观察到的情况。
为你的显卡选模型,意味着要选择量化方式、引擎、如何在多块 GPU 间切分、给多大上下文以及 KV 缓存类型;每次猜测都要花一次下载和一次加载。控制台的每项操作都是一次 API 调用,因此 Claude Code、Codex 或其他能使用 shell 的智能体可以在你的硬件上、针对你的工作负载替你完成这项搜索。
智能体会调用:GET /api/system/gpus,在任何下载之前调用 POST /api/models/fit-preview,注册并调用 suggest-config,拉取并加载,一次压力测试(找出并应用真实的上下文上限),GET /api/stats/v2/throughput 和 latency,以及它签发的用于发送测试流量的推理密钥。它会先读取 /agent-guide.md,这是一份为语言模型编写的这些调用的简短说明。
./workload/*.txt 中的提示词分别重放给模型 A 和模型 B,并评判每个回答。你会得到:model-comparison.md,包含延迟、每秒 token 数、智能体评判的正确性和推荐结论;推荐的模型保持加载。开始之前。管理员令牌拥有 warden 的全部管理权限(模型、密钥、设置;目前没有更细的权限范围):请给它设置较短的有效期,并在任务完成后到 Settings → Access Tokens 中吊销。压力测试会故意让引擎崩溃以找到其上限:请在没有其他人依赖的 warden 上运行这些提示词。下载量很大;提示词会在拉取前检查是否放得下,但请留意磁盘空间。
引擎和切分方式的选择(vLLM、张量并行或数据并行)仅适用于 Linux 安装;在 Mac 上可选的是单 GPU 上的 MLX 或 llama.cpp。负责调优的模型可以是你已经付费的任何模型;被调优的模型是你显卡上的那个。智能体调优页面:四条提示词全文。
API 密钥想建多少就建多少,然后分发出去:同事、家人、CI 任务、智能体集群,各自拥有自己的密钥、优先级和用量页面。硬件为所有人工作,重要的工作永远不必等待。
同一个控制台可以读取 16 GB 的 M1、工作站里两块型号不同的显卡,以及一台 8 × B300 NVSwitch 服务器,并且会指出瓶颈,而不是把它平均掉:在 x16 插槽上只以 x4 运行的 PCIe 链路、未激活的 NVLink 链路、各卡之间不同的 ECC 设置。
每个面板按卡显示:温度与该卡自身降频温度的对比、功耗与功耗上限的对比、频率、风扇、当前协商的 PCIe 代数和宽度、显卡具备时的 ECC 和 NVLink,以及占用显存的进程。互连示意图读取自 nvidia-smi topo -m。在 Mac 上:GPU 使用率和 Metal 报告的内存预算,不含功耗。底层引擎由它自己的 /health 监控,而不是看进程表:外层进程仍在而引擎已失效时,会重新加载引擎并保留证据。
LM Warden 以 Apache-2.0 许可证发布在 GitHub 上:安装脚本和 Compose 文件就是全部部署内容,两者你都可以直接查看。无需账户,没有许可证检查,没有遥测。vLLM、llama.cpp 和 MLX 是我们原样运行的上游项目。
基于 Apple 官方 mlx-c 绑定,将 Apple 的 mlx-lm 从 Python 移植到 Rust,由 LM Warden 团队作为独立开源项目开发和维护。LM Warden 将把它用作第三个 Mac 引擎,最终取代占如今 Mac 下载包大部分体积的 Python 版 mlx-lm 引擎。非官方项目,与 Apple 无关。