为什么 Local Studio 要维护双引擎栈?engines 与 compute 架构及 ComputeBridge 桥接实现解析
【免费下载链接】local-studioControl panel for VLLM, Sglang, llama.cpp, exllamav3项目地址https://gitcode.com/gh_mirrors/vl/local-studio点击查看免费下载Local Studio 是一款本地优先的 LLM 推理控制台统一管理 vLLM、SGLang、llama.cpp、MLX 等推理引擎的启动、驱逐与监控。深入它的 controller 源码会发现一个有趣的结构同时维护着engines和compute两套引擎栈。这不是重复造轮子而是一次典型的旧世界兼容 新世界重构分层设计——本文带你快速看懂两者的分工以及 ComputeBridge 如何把它们无缝桥接起来。双栈分工engines 是用户视角compute 是调度视角先明确一个背景Local Studio 的 controller 是一个 Bun Hono 后端承担模型生命周期、OpenAI 兼容代理、GPU 状态与 SSE 事件流。它的模块划分可以对照 controller/README.md 的架构图。两套栈的定位截然不同engines/模块旧栈用户视角面向 API 与 UI。它负责配方Recipe管理、引擎安装与运行环境探测venv / Docker / 系统二进制、模型下载、启动失败预算连续失败熔断以及/launch/:recipeId、/evict、/wait-ready这些前端一直在调用的生命周期路由。compute/模块新栈调度视角面向机器。它把如何启动一个推理进程抽象成纯粹的调度问题GPU 租约分配、端口探测、健康检查、进程回收支持 process 与 docker 两种运行时。为什么要拆源码注释里给出了最直接的回答旧世界里的协调器coordinator需要维护大量易失的内存状态而新世界里实例记录本身就是租约状态永远是从进程存活性推导出来的不会过期。compute 层的三大设计契约进入 controller/src/modules/compute/contracts.ts 的文件头注释作者用三条规则概括了整个新栈的设计哲学引擎是纯函数plan()是请求的完全函数——不读时钟、不读环境变量、不碰文件系统。这使得整条启动路径可以被黄金测试golden test覆盖5 个引擎vllm / sglang / llamacpp / mlx / exllamav3各自只需要声明自己如何拼写同一组标准参数。以 vLLM 为例vllm.ts 里tensorParallel对应--tensor-parallel-size、memoryFraction对应--gpu-memory-utilization一张映射表就把配方参数翻译成了命令行参数。实例记录就是 GPU 租约设备被占用当且仅当有一个存活记录InstanceRecord声明了它。没有独立的注册表就不会出现注册表和现实失步的问题。记录以先写临时文件再 rename的方式持久化为 JSON见 instances/store.ts崩溃中途写入只会读成未运行而不是垃圾数据。状态是推导出来的从不存储stateOf按存活 → 健康 → 截止期限三级判定得出reserving / starting / ready / unhealthy / exited系统中不存在一个会过期的status字段实现见 lifecycle.ts。配合 2 秒一次轮询的监督循环 supervisor.ts删掉记录就等于释放 GPU——没有需要忘记的释放调用也没有需要失效的缓存。ComputeBridge把旧世界接到新世界的桥那么问题来了前端和代理层一直在调用旧的单模型语义——推理端口上现在跑的是谁帮我驱逐它。新栈却是一个多实例调度器。ComputeBridge就是解决这个阻抗失配的桥。它的接口非常克制只有 7 个方法bridge.ts方法旧世界的含义findInferenceProcess推理端口上正在服务谁pid、后端、模型路径、端口getCurrentRecipe/launchingRecipeId当前/正在启动的配方launchRecipe/cancelLaunch启动与取消evict驱逐当前模型waitForHealthy轮询直到实例 ready桥的核心技巧只有一行常量export const LLM_INSTANCE llmbridge.ts#L32。它给活跃模型固定了一个实例名并让它服务在旧的推理端口上portOverride。于是一次只跑一个模型的旧语义被完美保留——代理、指标采集、语音模块一行代码都不用改却全部从新栈的实例记录中拿到答案。launchRecipe则演示了桥的完整转换链解析配方里的 GPU 选择器 → 组装ComputeLaunchInput二进制解析、extra_args序列化、MoE 专家并行的默认策略→ 交给compute.launch。注意 lifecycle-routes.ts 里的注释模型生命周期经由 compute bridge失败映射是 compute 联合类型 → HTTP绝不靠字符串匹配错误信息。组装点见 app-context.tsmakeCompute产出调度服务createComputeBridge把它与配方存储缝合成桥两者一起挂到AppContext上供所有路由使用。一条启动链路从点击启动到 GPU 租约把两个模块串起来一次完整启动是这样的前端调用POST /launch/:recipeIdengines路由先查启动失败预算连续失败过多则 429 熔断bridge.launchRecipe把配方翻译成调度输入校验 GPU 选择器能否解析到真实设备compute.launch检查主机档案平台 / 加速卡 / 统一内存 / Docker GPU 直通先reserve抢占放置锁、分配 GPU 与端口再写下一条ref: null的预留记录引擎规格生成LaunchPlanapplyDevices统一翻译设备寻址引擎从不需要知道CUDA_VISIBLE_DEVICES长什么样进程/Docker 启动器拉起实例waitReady先查存活再查健康直到就绪或触发失败清理并回收租约。整条链路上唯一有状态突变的地方就是 compute 层的lifecycle.ts——它是计算层中唯一的修改者其余一切只读记录。小结分层不是冗余而是演进 Local Studio 的双引擎栈给中大型项目一个很好的示范**旧栈engines**守住 API 兼容与用户体验新栈compute可以自由演进设计**桥ComputeBridge**只暴露最小接口把语义转换收敛在一个文件里避免两套世界互相污染纯函数引擎 记录即租约 状态即推导让5 个推理引擎 × 2 种运行时 × 3 类加速卡的组合空间依然可控可测。如果你想继续深挖可以从 controller/src/modules/compute/ 的contracts.ts入手——它是所有 compute 文件唯一允许依赖的模块读懂它就读懂了整个新栈的骨架。赞分享【免费下载链接】local-studioControl panel for VLLM, Sglang, llama.cpp, exllamav3项目地址https://gitcode.com/gh_mirrors/vl/local-studio点击查看免费下载相关推荐为什么现代Web应用都需要这个强大的提及引擎为什么现代Web应用都需要这个强大的提及引擎 在当今社交媒体和协作工具盛行的时代用户期望在输入框中能够像在Twitter或Slack中那样轻松地提及他人Babel Monorepo 架构解析为什么一个编译器要维护在同一个代码仓库中Babel Monorepo 架构解析为什么一个编译器要维护在同一个代码仓库中 Babel 是一个将下一代 JavaScript 编译为当前环境可运行代码的编编译器开发工具NumPy 1.22.1 发布说明深度解读维护版修复了什么、为什么重要NumPy 1.22.1 发布说明深度解读维护版修复了什么、为什么重要 NumPy 1.22.1 是一个典型的“维护版maintenance release科学计算数据分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

每日算法题2

每日算法题2

链接:LCR 170. 交易逆序对的总数 - 力扣(LeetCode) 在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。请设计一个程序,输入一段时间内的股票交易记录 record&#xff0c…

2026/10/11 10:56:27 阅读更多 →
如何用电脑键盘操控手机终端:OpenClaw on Android搭配Termux的SSH远程配置完全指南

如何用电脑键盘操控手机终端:OpenClaw on Android搭配Termux的SSH远程配置完全指南

移动开发AI 应用CLI开发工具 【免费下载链接】openclaw-android Run OpenClaw on Android with a single command — no proot, no Linux 项目地址: https://gitcode.com/gh_mirrors/op/openclaw-android 点击查看 免费下载 OpenClaw on Android 让你在手机上运行 …

2026/10/11 10:56:27 阅读更多 →
Mesh 还是 Focus?Cell Architecture Studio 双视图模式与截面透视实战指南

Mesh 还是 Focus?Cell Architecture Studio 双视图模式与截面透视实战指南

【免费下载链接】cell-architecture-studio Interactive 3D cell architecture gallery built with React and Three.js 项目地址: https://gitcode.com/gh_mirrors/ce/cell-architecture-studio 点击查看 免费下载 Cell Architecture Studio 是一款基于 React 和 …

2026/10/11 10:56:27 阅读更多 →

最新新闻

SpringBoot+Vue+MySQL工资信息管理系统:从数据库设计到答辩全攻略

SpringBoot+Vue+MySQL工资信息管理系统:从数据库设计到答辩全攻略

每年到了毕业设计选题季,后台收到最多的问题几乎都是同一个:有没有一个项目,技术栈主流、业务不算复杂、做起来工作量适中、答辩时还拿得出手?如果你恰好也在找这个答案,那基于 SpringBoot、Vue、MySQL 的工资信息管理…

2026/10/11 11:43:13 阅读更多 →
一周新增 2,533 颗星、总星数 129k:MoneyPrinterTurbo 热度数据全解读

一周新增 2,533 颗星、总星数 129k:MoneyPrinterTurbo 热度数据全解读

一周新增 2,533 颗星、总星数 129k:MoneyPrinterTurbo 热度数据全解读 【免费下载链接】MoneyPrinterTurbo 利用 AI 大模型和自动化工作流,根据主题或关键词一键生成高清短视频。Generate HD short videos from a topic or keyword with an automated AI…

2026/10/11 11:43:13 阅读更多 →
Win32 字体处理实战:字符度量、枚举筛选与 DPI 适配

Win32 字体处理实战:字符度量、枚举筛选与 DPI 适配

作为常年跟 Win32 打交道的人,我始终觉得字体这块是 GUI 开发里最容易被低估的环节。很多界面看着别扭,问题并不出在布局算法上,而是对“系统字体与字符大小”的理解还停留在“选个字号就行”的层面。这一章我把这些年积累的字体处理经验完整…

2026/10/11 11:43:13 阅读更多 →
ContentUnavailableView 教程:SwiftUI 空状态设计的完整指南

ContentUnavailableView 教程:SwiftUI 空状态设计的完整指南

【免费下载链接】SwiftUI-Agent-Skill SwiftUI agent skill for Claude Code, Codex, and other AI tools. 项目地址: https://gitcode.com/GitHub_Trending/swi/SwiftUI-Agent-Skill 点击查看 免费下载 ContentUnavailableView 是 SwiftUI 内置的系统级"空状…

2026/10/11 11:43:13 阅读更多 →
C#台账系统设计:实现可追溯、防篡改的企业级数据记录

C#台账系统设计:实现可追溯、防篡改的企业级数据记录

简介:这是一套基于C#开发的轻量级台账记录系统设计源码,面向中小型组织、企业行政或财务人员及C#初学者,解决日常台账录入、查询、修改与删除等基础管理需求。资源共67个文件,压缩包大小384KB,包含41个核心C#源文件&am…

2026/10/11 11:43:13 阅读更多 →
StealthChop+如何让步进电机逼近BLDC性能

StealthChop+如何让步进电机逼近BLDC性能

1. 为什么说“步进电机的天花板”正在被重新定义?最近在某高校机电实验室调试一台高精度3D打印平台时,我遇到一个典型矛盾:客户要求Z轴在0.01mm级微动下完全静音、无振动,同时还要在快速回零时保持200mm/s的瞬时加速度。传统细分驱…

2026/10/11 11:42:13 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →