AB
AiBoss
project

berth - 让本机所有 GPU 程序排队租用显卡的调度守护进程

berth 是一个用 Go 编写的单二进制 GPU 租约调度器:聊天模型、图像流水线、语音引擎和游戏通过租约轮流占用显卡,而不是同时抢显存导致 OOM。它还会报告谁在占用显存。项目自述为 alpha 阶段,采用 Apache-2.0 许可。

berth 是一个用 Go 编写的单二进制 GPU 调度守护进程,目标是解决一个很常见的问题:本机同时跑聊天模型、图像生成流水线、语音引擎和游戏时,多个进程同时抢显存,互相把对方挤到 out-of-memory 崩溃。berth 的做法是让这些程序「租用」显卡而不是直接抢占:同一时刻只允许一个引擎持有显卡,其余请求排队等待,并告诉用户当前是谁占着卡、谁在等、为什么等。它适合在单机工作站上同时部署多种推理引擎、又不想手工管理显存占用的开发者与运维人员。

维护者与状态

项目由 T-Crypt 维护,仓库创建于 2026-10-11,最后提交时间为 2026-10-27。最新 release 为 v0.3.6,发布于 2026-10-23。截至 2026-10-27,仓库星标数为 235。项目自述当前处于 alpha 阶段,并称其日常运行在一台 RTX 4090 工作站上,与 llama-swap、NInfer、Strata、ComfyUI 和游戏并存,测试者也在 Windows 上运行它。

主要能力

以下能力据项目 README 自述整理,属于维护者描述而非中立评测。

让引擎轮流使用同一张卡

  • 租约式排队。每个引擎通过 berth run 启动。当另一个引擎需要显卡时,berth 等待持有者完成当前回复或图像任务,然后卸载它(先尝试其自身卸载,再 SIGTERM,最后 SIGKILL),等驱动显示显存已释放后,才把租约交给下一个引擎。
  • 优先级。请求按 hold、foreground、interactive、batch 排序;低优先级请求会等待并得到一个指明持有者的原因,而不是 OOM 崩溃。
  • 避免来回切换。两个客户端同时请求不同引擎时,由排序选出一个,另一个等待,避免显卡反复切换。
  • ComfyUI 在任务边界交接。berth 会等当前图像任务完成后再移交。
  • 最短持有时间。配置项 min_turn = "5m" 让引擎拿到卡后至少保留五分钟,只有 hold 能提前拿走。
  • 容器内引擎。berth run --container NAME -- docker run ... 可把 Docker 或 Podman 引擎纳入租约,排空时通过 docker stop 停止。
  • 重启后存活。升级或重启守护进程后,正在运行的引擎保持在线并重新挂接。

更快的切换与退出手段

  • 驻留内存。支持自我卸载的引擎(如 ComfyUI、vLLM、SGLang 或实现 park 协议的引擎)在排空时把权重移到系统内存,之后从内存恢复而不是重新从磁盘加载;berth 只在实测内存足够时这样做,内存紧张时优先停止已驻留的引擎。
  • 每种租约状态都有出口。berth stop ENGINE 主动排空,berth resume ENGINE 恢复驻留引擎,berth reclaim 在确认后清理卡住的释放残留。
  • 队列位置。等待原因会以等待者位置开头(例如「2nd in line (behind interactive comfyui)」),berth status 还会根据实测切换时间给出启动预估。

游戏与创意应用

  • 在 Linux 上启动 Steam、Lutris 或 gamescope 游戏,或在 Windows 上启动 Steam、Epic、GOG、EA、Ubisoft、Xbox、Battle.net 游戏时,berth 会排空 AI 引擎直到游戏退出。
  • Blender、DaVinci Resolve、OBS、Kdenlive、Premiere、After Effects 占用的显存会被计入显卡用量,且不会被报告为「偷渡者」。
  • berth.toml 中的 [[claim]] 可按名称、命令行或启动器为训练任务、渲染农场作业等自定义规则;berth hold 可临时腾出显卡,Ctrl-C 归还;berth run --pinned 用于绝不能中途停止的应用。

统一 API(预览)

README 称 berth gateway 提供一个 OpenAI 兼容端口:指定模型名后,berth 启动对应引擎、卸载占卡者、等待加载并流式返回答案;它也代理 ComfyUI 的工作流 API,使图像请求排在同一个租约之后。另有唤醒页(--gui-listen),访问已停止引擎的 Web UI 时会显示谁持有显卡、启动在等什么,并在引擎响应后打开界面。所有 API 路由要求 Bearer key,仅监听回环地址,拒绝浏览器来源。

模型管理与自更新

  • berth pull hf:org/repo:Q4_K_M 从 Hugging Face 下载并断点续传,使用前按 Hub 公布的体积与 sha256 校验每个文件;berth pull civitai:VERSION_ID 对 CivitAI 做同样的事。
  • berth models 列出机器上的 GGUF、safetensors、Hugging Face 缓存、LM Studio 与 Ollama 存储,附带量化、体积、参数量、上下文和最近使用时间;berth models export ollama 可把已有 GGUF 转成 Ollama 模型。
  • berth storage 显示各模型根目录的文件系统与剩余空间,berth verify 离线复查已拉取模型。
  • berth update 查询发布页,下载本机二进制与 SHA256SUMS,校验后在你确认后原地替换,并提示需要重启什么,但不会自行重启任何进程。

可观测性

项目自述可自动发现 llama.cpp、llama-swap、Ollama、vLLM、SGLang、ComfyUI、Kokoro、LM Studio、KoboldCpp、TabbyAPI、LocalAI 等引擎的默认端口;会把未持租约却占用显存的进程作为「偷渡者」报告 PID、名称与显存,但不终止它。内置每卡显存、负载、温度、功耗、频率,以及每秒 token 数、队列、延迟分位、KV 缓存用量等指标,磁盘保留 30 天历史;berth harbor 提供只读的 Web 面板,另有桌面或 webhook 告警、Prometheus 的 /metrics 和 CSV/JSON 导出。所有报告命令支持 --format json|yaml。

面向 agent 与脚本

berth skill install 据称可教会 Claude Code、Codex、OpenCode、Hermes Agent 等 agent 通过 berth 申请显卡,而不是直接杀掉 GPU 进程。

使用入口

仓库地址:T-Crypt/berth;项目主页:berth 官网。

README 给出的最小上手流程如下(每张卡一个 broker):

berth daemon & # one broker per card
berth run --as llama -- llama-server -m model.gguf # this engine now takes turns
berth status # who holds the card, who waits, and why

项目自述为单个 Go 二进制,无需云账号,也不需要安装其他依赖。

许可与限制

许可证为 Apache-2.0。运行环境方面,README 写明:Linux + NVIDIA GPU 为受支持配置;Linux + AMD RDNA3/RDNA4 独立显卡或 Phoenix APU(如 780M)为实验性支持;Windows 10/11 + NVIDIA GPU 同样为实验性支持。项目自述处于 alpha 阶段,文档只覆盖「已可用且有测试」的部分,路线图另行列出了阶段与尚未完成的内容;gateway 相关能力标注为预览。使用前应结合仓库中的文档与路线图评估其成熟度。