云原生后端运维【免费下载链接】TerminusOpen-Source Personal Cloud OS for Always-On Agents项目地址https://gitcode.com/gh_mirrors/terminus2/Terminus点击查看免费下载导读本文针对 Olares 1.12.5 中一个已知问题当你在App exclusive应用独占模式下停止并移除某个应用后该应用仍反复出现在Select exclusive app选择独占应用列表中导致无法将 GPU 分配给其他应用。文章会从问题现象、触发条件、底层原因共享应用的后台服务残留到完整修复步骤逐一展开并结合当前仓库中 GPU 调度与共享应用的源码实现说明其原理。阅读完成后你将掌握一套可复现、可验证的排查与恢复流程并理解 Olares 独占模式与共享应用生命周期的关联机制。版本范围本问题与对应的解决方案仅适用于Olares 1.12.5。如果你使用的是 Olares 1.12.6 或更高版本请参考 Remove an app from a GPU 中的标准移除流程。问题现象移除后应用再次出现在独占列表在Settings GPU页面将 GPU 模式切换为App exclusive应用独占后系统会自动挑选一个应用作为独占应用。正常流程下若要更换独占应用你需要先停止当前独占应用再将其从独占列表中移除随后才能把 GPU 分配给其他应用。但在 Olares 1.12.5 中部分用户会遇到以下现象在App exclusive模式下停止并移除应用后它再次出现在Select exclusive app列表中该应用在Settings设置、Market应用市场和Launchpad启动台中均显示为Stopped已停止状态。此时 GPU 资源被看不见的应用占用其他应用无法绑定到该 GPU独占模式的实际效果被破坏。触发条件什么情况下会遇到该问题该问题并非在所有应用上都会出现其触发条件非常明确GPU 模式处于App exclusive目标应用已被选为独占应用你停止该应用并尝试将其从独占列表中移除该应用属于共享应用shared application。满足以上条件时应用就会在移除后复活回独占列表。如果你遇到的应用不是共享应用或者版本不是 1.12.5通常不会触发此问题。根本原因共享应用的后台服务仍在运行什么是共享应用在 Olares 中共享应用是一类特殊的社区应用它们由管理员Admin集中安装和管理集群内所有成员无需各自安装即可直接使用。典型例子包括 Engine Base 模型实例、Dify、ComfyUI 等。关于共享应用的完整定义与管理方式可参阅 Shared applications 与 Applications 概念文档。从代码层面看共享应用在 GPU 资源调度中被标记为集群范围的共享所有者。在 framework/app-service/pkg/compute/preflight_types.go 中定义了// PreflightSharedOwner identifies cluster-scoped shared applications. PreflightSharedOwner shared也就是说共享应用的 GPU 资源请求PreflightDemand以shared作为 Owner 标识参与集群容量预检与普通成员用户的应用以用户名为 Owner不同。为什么已停止却仍占用 GPU在 Olares 1.12.5 及更早版本中共享应用采用服务器组件 客户端访问点client-side access point分离的架构服务端与用户侧的访问入口相互耦合。即使在界面上将应用显示为Stopped其服务器组件可能仍在后台运行并持续占用 GPU 资源。界面上显示Stopped的只是客户端或前端的访问点状态后台的共享服务器进程并未真正退出仍持有 GPU 的独占绑定因此当你把该应用从独占列表中移除时系统检测到后台服务仍占用资源便将其重新列出。这一现象与 1.12.6 架构调整的背景完全吻合官方文档明确说明旧架构中卸载客户端访问点可能导致共享服务器不可用、客户端与服务器分离管理而新架构1.12.6 起改为单一统一共享服务器服务器生命周期与任何访问点解耦才从根本上解决了这类残留问题。更多架构对比参见 Explore the architecture shift。解决方案先恢复再停止彻底关闭服务端要解决该问题核心思路是先把应用恢复到运行状态再完整停止一次从而让客户端和服务端都真正关闭然后再移除独占绑定。操作步骤确认残留应用打开Settings GPU在Select exclusive app部分查看当前显示的独占应用确认是哪款应用出现了残留。{width90%}恢复Resume该应用进入Settings Applications应用管理找到同一款应用点击Resume恢复等待应用重新启动。{width90%}再次停止Stop该应用等待几秒钟让应用完全启动后点击Stop停止。这一步的关键是让应用先完整启动再完整停止确保客户端与服务端都被关闭。{width90%}重新移除独占绑定回到Settings GPU点击link_off断开链接图标将应用从独占列表中移除。刷新并验证刷新 GPU 资源列表确认该应用不再出现在Select exclusive app部分此时可以正常将 GPU 分配给其他应用。{width90%}注意事项恢复与停止之间要有间隔第 2、3 步之间务必等待应用真正启动完成否则恢复后再停止的操作可能无效服务端仍处于残留状态。资源释放需要时间即使操作正确GPU 资源的释放也可能需要短暂延迟。如果立即刷新仍未清空稍等片刻再刷新确认。这也是官方在标准移除流程中强调的要点见 Remove an app from a GPU。后续使用该应用将来若要再次使用需要在 GPU 设置中重新分配资源并启动独占模式下同一时间只能有一个应用绑定 GPU。延伸理解Exclusive 模式与 GPU 资源管理三种 GPU 共享模式Olares 将 GPU 等加速设备视为集群共享资源由系统根据应用的加速器需求自动匹配并绑定资源。在 GPU 设置中支持以下三种模式详见 Manage accelerator resources| 模式 | 说明 | 适用场景 | | -- | -- | -- | |Time slicing| 多个应用轮流使用同一 GPU 的计算与显存每个应用可见完整 GPU但按时间片运行 | 同时运行多个 GPU 应用 | |Memory slicing| 多个应用共享 GPU按固定显存配额分配 | 需要控制显存占用的多应用场景 | |Exclusive| 单个应用独占整张 GPU | 大型模型、渲染、高端游戏等重负载场景 |在源码层面这三种模式在 framework/app-service/pkg/compute/types.go 中对应三个支持类型常量SupportTypeTimeSlice TimeSlice SupportTypeMemorySlice MemorySlice SupportTypeExclusive Exclusive每个节点Node上的设备Device都会携带其服务的Mode模式字段调度器按模式对节点进行过滤Node.viewForMode确保独占模式的应用只会被调度到以 Exclusive 模式服务的设备上。为什么独占模式最容易暴露残留问题在Time slicing/Memory slicing模式下GPU 被多个应用共享后台服务即使残留也不容易阻止其他应用绑定。而Exclusive模式规定除非释放否则其他应用无法绑定到该 GPU因此后台服务对 GPU 的占用会直接表现为移除后应用再次出现、其他应用无法分配 GPU。这正是本文所述问题在独占模式下才凸显的原因。切换模式的代价需要留意的是切换 GPU 模式会停止当前使用该 GPU 的所有应用并移除其绑定的 GPU 资源要重新使用这些应用必须重新分配资源并启动。因此在执行任何 GPU 模式切换或应用移除操作前请先评估当前独占应用的运行状态。总结与验证清单完成上述操作后建议按以下清单确认问题已解决Settings GPU的Select exclusive app列表中不再显示该应用可以将 GPU 成功分配给其他目标应用Settings / Market / Launchpad中该应用保持Stopped状态且不再复活。如果执行完整流程后问题仍然存在请确认系统版本确为 Olares 1.12.5本方案不适用于 1.12.6 及以后版本若是 1.12.6请改用标准的 Remove an app from a GPU 流程直接进入Settings Accelerator Manage下的Assigned apps中移除应用即可无需先恢复再停止的绕行操作。参考资源Manage accelerator resourcesGPU 模式、应用恢复与资源释放的完整指南Shared applications共享应用的架构演进与新旧架构对比Applications共享应用概念应用类型与标识体系GPU 调度模式常量定义三种支持类型的源码依据共享应用 Owner 标识集群范围共享资源的调度身份赞分享云原生后端运维【免费下载链接】TerminusOpen-Source Personal Cloud OS for Always-On Agents项目地址https://gitcode.com/gh_mirrors/terminus2/Terminus点击查看免费下载相关推荐Docker Compose中无法停止数据库容器的故障排查与解决Docker Compose中无法停止数据库容器的故障排查与解决 在使用Docker Compose管理PostgreSQL容器时部分用户可能会遇到一个棘手问云原生容器编排DevOpsCLI彻底解决iOS残留应用TrollStore系统应用识别与完整移除指南彻底解决iOS残留应用TrollStore系统应用识别与完整移除指南 你是否遇到过iOS应用删除后仍占用存储空间、设置项残留或无法重新安装的问题特别是通过企应用安全swagger-jsdoc 错误处理指南failOnErrors 与 verbose 参数详解swagger jsdoc 错误处理指南failOnErrors 与 verbose 参数详解 swagger jsdoc 是一款强大的工具能够基于 jsD上一篇OpenLake架构深度剖析io_uring核心本地异步I/O如何实现百万级IOPS与毫秒内读取下一篇如何拿到CDP调试端口:js-reverse-mcp连接已运行Chrome和AdsPower/BitBrowser指纹浏览器全解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考