资讯动态

Cherry Studio 本地模型硬件加速默认开启:DirectML/CoreML 推理架构与 CPU 回退机制解析

发布时间:2026/9/20 11:54:42 来源:尧图企业网站定制
人工智能大模型AI 应用交互助手本地部署【免费下载链接】cherry-studio Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端项目地址https://gitcode.com/CherryHQ/cherry-studio点击查看免费下载导读本篇文章解析 Cherry Studio v2 引入的一项关键运行时变更本地 Embedding 与 OCR 推理的“硬件加速”开关位于 Settings → Dependencies → Local models由默认关闭改为默认开启从而在全新安装中直接以 DirectMLWindows x64/arm64或 CoreMLmacOS arm64替代纯 CPU 执行推理。读者将了解到硬件加速 profile 在源码中的定义方式、各平台的支持矩阵、偏好项feature.local_model.hardware_acceleration.enabled的作用链路以及失败一次自动回退 CPU、且进程生命周期内保持 CPU的粘性回退机制的实现与测试验证。变更概述硬件加速成为全新安装的默认行为在 v2 版本的设置界面中Settings → Dependencies → Local models提供了一个名为Hardware acceleration的开关。本次变更对应 PR [#19055] 引入将其默认值从false改为true即新安装的 Cherry Studio本地Embedding向量化与OCR图片文字识别推理默认在硬件加速 provider 上执行而不再退回 CPUWindows x64 / arm64 使用DirectMLdmlmacOS arm64Apple Silicon使用CoreMLcoremlLinux 各架构与 Intel Macdarwin x64没有任何受支持的硬件 provider因此该开关在界面上保持隐藏推理始终留在 CPU。这一变更对用户的价值在于开箱即用。用户无需先找到开关、手动打开就能在全新安装中获得明显的本地推理性能提升——尤其是 OCR 这类计算密集任务。硬件加速的源码级实现运行时 profile 体系硬件加速的核心逻辑集中在 inferenceAcceleration.ts该文件以运行时 profileLocalInferenceRuntimeProfile的形式描述每个推理后端的执行配置。CPU 基线 profile无论是否开启加速CPU 始终作为基线存在其定义为export const CPU_LOCAL_INFERENCE_PROFILE: LocalInferenceRuntimeProfile { id: cpu, transformersDevice: cpu, sessionOptions: { executionProviders: [cpu] } }其中transformersDevice对应huggingface/transformers的 device 参数sessionOptions.executionProviders则直接映射到 ONNX Runtime 的executionProviders数组。DirectML profileWindows x64 / arm64const DIRECTML_PROFILE: LocalInferenceRuntimeProfile { id: directml, transformersDevice: dml, sessionOptions: { executionProviders: [dml, cpu], enableMemPattern: false, executionMode: sequential } }DirectML 配置有两个值得注意的细节executionProviders: [dml, cpu]表示优先尝试 DML失败时允许 ONNX Runtime 内部回退到 CPU EPenableMemPattern: false与executionMode: sequential是面向 DirectML 后端稳定性与兼容性刻意设置的选项测试用例中也显式断言了这两个值防止未来被无意改动见 inferenceAcceleration.test.ts。CoreML profilemacOS arm64const COREML_PROFILE: LocalInferenceRuntimeProfile { id: coreml, transformersDevice: coreml, sessionOptions: { executionProviders: [coreml, cpu] }, embeddingSessionOptions: { // Restrict CoreML to static-shape subgraphs; PaddleOCR must allow dynamic image inputs. executionProviders: [{ name: coreml, coreMlFlags: COREML_FLAG_ONLY_ALLOW_STATIC_INPUT_SHAPES }, cpu] } }CoreML 配置体现了按能力capability差异化的设计embeddingSessionOptions专门为 Embedding 推理覆盖了会话选项将 CoreML 限制在静态输入形状static-shape子图coreMlFlags 8即COREML_FLAG_ONLY_ALLOW_STATIC_INPUT_SHAPES而 OCR基于 PaddleOCR需要允许动态图像输入因此不受此限制。这种通用 sessionOptions 按能力覆盖的结构让同一 profile 可以同时适配输入形状固定的 embedding 和输入尺寸多变的 OCR。平台探测与 profile 解析const HARDWARE_PROFILES: PartialRecordNodeJS.Platform, Recordstring, LocalInferenceRuntimeProfile { win32: { x64: DIRECTML_PROFILE, arm64: DIRECTML_PROFILE }, darwin: { arm64: COREML_PROFILE } } export function isLocalInferenceHardwareAccelerationSupported(target currentTarget()): boolean { return HARDWARE_PROFILES[target.platform]?.[target.arch] ! undefined } export function resolveLocalInferenceProfile( hardwareAccelerationEnabled: boolean, target currentTarget() ): LocalInferenceRuntimeProfile { return hardwareAccelerationEnabled ? (HARDWARE_PROFILES[target.platform]?.[target.arch] ?? CPU_LOCAL_INFERENCE_PROFILE) : CPU_LOCAL_INFERENCE_PROFILE }isLocalInferenceHardwareAccelerationSupported判断当前平台是否具备硬件 providerresolveLocalInferenceProfile则根据开关与平台二重条件决定实际生效的 profile。注意其兜底语义即使开关为true只要平台不受支持也会静默落到 CPU profile——这正是Linux / Intel Mac 开关隐藏且永远走 CPU的底层保证。对应的平台矩阵由测试用例 inferenceAcceleration.test.ts 明确固定。平台支持矩阵平台架构硬件 provider开关可见性默认推理后端Windowsx64DirectMLdml可见硬件加速Windowsarm64DirectMLdml可见硬件加速macOSarm64Apple SiliconCoreMLcoreml可见硬件加速macOSx64Intel无隐藏CPULinuxx64 / arm64无隐藏CPU该矩阵与HARDWARE_PROFILES表的定义完全一致只有win32x64/arm64与darwinarm64三个组合被注册。其余平台即使开关被强制打开resolveLocalInferenceProfile也会回落到 CPU。默认值从何而来偏好项与渲染层偏好 Schema 与默认值硬件加速开关对应偏好键feature.local_model.hardware_acceleration.enabled其类型为布尔值定义于 preferenceSchemas.ts默认值已改为true见 preferenceSchemas.ts。这是本次变更最直接的数据层体现所有全新安装都会以true作为该项的初始值。偏好到运行时 profile 的传递链路从设置到实际推理执行的完整链路为渲染层设置界面用户在Settings → Dependencies → Local models切换开关写入偏好IPC 层渲染层通过local_model.get_acceleration_capability查询当前平台是否支持硬件加速返回{ supported }以此决定开关的显示/隐藏见 localModel.ts服务层每次推理前InferenceServiceBase.ts 中的restartIfRuntimeChanged()读取偏好并解析 profileconst profile resolveLocalInferenceProfile( application.get(PreferenceService).get(feature.local_model.hardware_acceleration.enabled) ) if (this.launchedProfileId ! null this.launchedProfileId ! profile.id) { this.logger.info(inference runtime configuration changed; restarting process) await this.client.stop() } this.launchedProfileId profile.id这段代码实现了一个关键能力运行时配置变更感知。推理在独立的 utility process 中执行当用户中途切换开关导致 profile 从cpu变为directml/coreml或反向时服务会主动重启推理进程使新配置立即生效无需重启应用。按能力隔离的进程模型InferenceServiceBase的设计中每个 capabilityembedding、OCR 等拥有独立的 utility process这样停止或移除某个模型不会影响到其他 capability 的在途请求见 InferenceServiceBase.ts 的注释说明。这也是某个 worker 回退到 CPU 后保持 CPU这一粘性行为的载体。故障处理一次回退进程生命周期内保持 CPU文档明确承诺如果硬件 provider 缺失或运行失败应用会自动回退到 CPU——失败的请求在 CPU 上重试一次之后该 worker 保持 CPU用户看到的最坏结果是这次请求变慢而不是报错。这一行为在测试 inferenceEntryAcceleration.test.ts 中有系统性的验证值得逐条梳理embedding 硬件失败只回退一次falls embedding back to CPU once and keeps CPU for the process lifetime第一次请求因硬件失败回退 CPU 后后续请求即使换用新的模型目录也继续留在 CPU日志中falling back只出现一次L161-L170OCR 同样遵循粘性回退DirectML 下 OCR 正常运行一旦运行期失败则回退 CPU 且保持L180-L190将 PaddleOCR 内部回退转化为进程级粘性回退PaddleOCR 自身存在内部回退逻辑/initialize-fallback场景Cherry Studio 将其统一收口为进程级 CPU 回退——即使后续模型文件在硬件下可以工作该进程也维持 CPU 不反复横跳L192-L203硬件与 CPU 同时失败时上报双错误回退后的 CPU 推理若也失败错误信息会同时包含ocr failed on dml与ocr failed on cpu便于诊断L221-L228资源释放失败不阻塞回退即使销毁缓存推理资源dispose抛错也只记录 warn 日志不阻塞 CPU 回退L172-L178非硬件类错误不触发回退例如图片文件不存在ENOENT这类输入错误不会被视为硬件失败不会关闭硬件加速L205-L218。这套一次回退、粘性保持的策略在最大化硬件收益与避免反复失败导致体验抖动之间取得了平衡也保证了用户层面看到的是更慢但可用的降级体验而非硬错误。配置与排查用户需要做什么大多数用户什么都不需要做——这是本次变更的核心立场。但存在两类需要人工干预的场景遇到驱动相关的兼容性问题个别 Windows 机器上的 DirectML 驱动问题可能导致推理异常此时可在Settings → Dependencies → Local models关闭 Hardware acceleration 开关立即回到纯 CPU 推理服务层会在下次推理前重启进程使配置生效旧版本升级用户见下文为什么只有新安装生效。关键偏好键速查偏好键类型默认值说明feature.local_model.hardware_acceleration.enabledbooleantruev2 新安装本地 embedding / OCR 硬件加速总开关BootConfig.app.disable_hardware_accelerationbooleanfalse应用级GPU 渲染等硬件加速禁用项与本地模型推理开关相互独立注意区分BootConfig.app.disable_hardware_acceleration控制的是 Chromium/Electron 渲染层的硬件加速见 bootConfigSchemas.ts而本次讨论的feature.local_model.hardware_acceleration.enabled专指本地模型推理的 ONNX Runtime provider两者作用域完全不同不应混淆。发布管理视角为什么只有全新安装会启用文档特别提醒发布负责人release manager注意一个易被忽视的细节只有新安装会拾取新的默认值。原因在种子数据逻辑 preferenceSeeder.ts 中一目了然// Skip if this preference already exists if (existingPrefs.has(prefKey)) { continue } newPreferences.push({ scope, key, value })PreferenceSeeder的行为是只插入缺失的键从不覆盖已存在的行insert-if-missing。这意味着全新安装数据库中不存在该键 → 以默认值true插入 → 硬件加速开箱即用已经运行过 v2 旧版本的用户数据库中已存在该键且旧值为false→ seeder 跳过 → 用户保持false需要手动开启。因此发布说明的措辞应表述为全新安装默认启用本地模型硬件加速而非笼统的现在已启用否则会让存量用户产生为什么我没有生效的困惑。总结本次变更是 Cherry Studio v2 本地模型链路的一次零操作性能升级通过将偏好默认值改为true配合inferenceAcceleration.ts中按平台注册的 DirectML/CoreML profile、InferenceServiceBase的进程级配置感知重启以及一次失败、粘性回退 CPU的降级策略实现了全新安装用户本地 Embedding 与 OCR 的显著提速同时把驱动兼容性风险控制在慢一点而不是报错的可接受范围内。对于开发者而言理解这条链路的关键入口包括inferenceAcceleration.tsprofile 定义、preferenceSchemas.ts默认值、preferenceSeeder.ts种子逻辑以及 inferenceEntryAcceleration.test.ts回退行为验证。赞分享人工智能大模型AI 应用交互助手本地部署【免费下载链接】cherry-studio Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端项目地址https://gitcode.com/CherryHQ/cherry-studio点击查看免费下载相关推荐Safari浏览器扩展开发中的JavaScript运行时差异从Zotero Connectors看跨平台兼容性挑战Safari浏览器扩展开发中的JavaScript运行时差异从Zotero Connectors看跨平台兼容性挑战 现象观察当Promise在Safari中人工智能大模型AI 应用交互助手本地部署Cherry Studio macOS 透明窗口默认开启变更说明、渲染原理与设置回退指南Cherry Studio macOS 透明窗口默认开启变更说明、渲染原理与设置回退指南 导读 本文基于 Cherry Studio 仓库中的 breakin人工智能大模型AI 应用交互助手本地部署Cherry Studio 本地嵌入模型与 PaddleOCR 模型怎么下载镜像回退与 SHA256 校验Cherry Studio 本地嵌入模型与 PaddleOCR 模型怎么下载镜像回退与 SHA256 校验 Cherry Studio 可以在本机运行两种模型AI 应用大模型桌面应用本地部署RAG上一篇PMLB: 一个用于评估监督机器学习算法的大型基准数据集库下一篇incubator-pagespeed-ngx部署实战从源码编译到生产环境配置创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价