Electron 计算与性能设置¶
历史背景: 本页面编写时 Electron 与 Tauri 应用共存。文中提到的 Tauri 辅助工具、页面、测试和回归结果描述的是那个迁移时期;Tauri 外壳此后已被移除,共享代码现位于
electron/src/shared/。已有 Tauri 安装:请参阅迁移指南。
设置 > 性能 展示现有的设备覆盖选项、多 GPU NVIDIA 主机上的物理 CUDA 适配器选择器、torch.compile 变通方案、生成时间预算和硬件读数。CUDA 选择器通过 CUDA_VISIBLE_DEVICES 持久化一个稳定的 GPU UUID;重启应用即可将其应用于后端及每个引擎子进程。
CUDA 选择使用经过验证的 /api/settings/cuda-device 端点;通用环境变量设置器无法更改它,也无法改变正在运行的进程的 GPU 可见性。
适配器发现机制会检查 PATH、Windows NVSMI 安装目录和 WSL NVIDIA CLI 位置,因此非 DCH Windows 驱动无需手动编辑 PATH。
外部设置的空 CUDA_VISIBLE_DEVICES 值会显示为“已禁用”而不是“自动”:它隐藏所有 CUDA 适配器并使选择器保持固定。
保存失败后,“重试”会重新加载两项计算设置,并且仅当两个请求都成功时才清除已观察到的错误;它不会静默重试写入,也不会忽略来自更新保存的失败。
设置 > 性能 > GPU 加速 读取 GET /api/settings/gpu-report:操作系统报告的 GPU(独立于 PyTorch)、已安装的 PyTorch 构建版本、一个包含该操作系统上实际存在选项的主机状态,以及每个引擎的判定(使用 GPU、使用 CPU 及原因、按设计使用 CPU)。未安装的引擎不会获得判定。后端发送代码;渲染器负责文本。
设备选项来自后端检测到的设备系列以及“自动”。所选偏好与当前活动系列分开显示。被环境变量固定的选项会被禁用,被忽略的不可用覆盖项会得到解释,更改后的偏好会显示其实际的重启要求。保存失败时保留上次确认的状态。没有任何操作会自动重启后端或更改活动模型。
设置 > 性能 > 内存管理 还有一个可选开关 在生成后将语音模型移至系统 RAM(#2618,默认关闭),由 GET/PUT /api/settings/perf/offload-after-generation 提供支持。它从下一次生成开始生效,无需重启。当 OMNIVOICE_OFFLOAD_AFTER_GENERATION 固定该设置时,开关会被锁定并显示说明;当没有 GPU 可释放时,其描述会指出这一点。行为描述见性能指南。
torch.compile 变通方案自 #2135 起在所有平台上都可供选择,因为编译内核失败并不仅限于 Windows。生成预算保留 GPU 和 CPU 的独立限制,接受 21,600 秒以内的正值,并在重新获取数据时保留编辑内容。当外部环境值覆盖某个预算时,UI 会标示出该覆盖项,而不是提示保存的值将在重启后生效。RAM 和 VRAM 读数仅在此视图挂载时轮询。
合成期间,固定宽度的主操作按钮会轮询现有的模型状态契约,并标明当前运行时阶段:启动 AI 运行时、加载权重、预热语音识别、优化模型、生成中,或接收音频。模型加载百分比和已用时间共用保留的状态行,进度条会从模型加载切换到流式音频传输,而不会移动控件。
后端会向渲染器事件流发布显式的模型生命周期转换。Engine Ready 会从这些事件立即刷新,并且仅在工作进行中保持每秒轮询;空闲的模型、工作线程、批次、性能配置文件和说话人分离检查会退避到有界的 15–30 秒恢复间隔。
electron/tests/performance-settings-smoke.mjs 使用模拟契约检查已保存/活动状态的分离、保存失败、环境变量固定、不可用设备、平台保护、预算验证和外部覆盖项。实时只读检查验证了计算、编译和硬件响应模式。测试未更改用户的设备、优化或超时偏好。macOS/Linux 上的原生硬件行为仍需平台验证。
速度与质量预设¶
侧边栏将速度/质量与引擎列表归为一组。一个细滑块可选择快速、均衡、高质量或最高,所选档位显示在滑块上方,另有一个独立的自动开关。自动会显示为此硬件解析出的档位。模型使用紧凑的双行布局,包含通俗易懂的工具名称和简短的模型名称。正常状态仅显示一个状态点(蓝色:可用并在使用时加载;绿色:已加载),状态名称供屏幕阅读器和悬停时使用;需要关注的状态(如“检查设置”、加载中或离线)会以文字写出。“检查设置”会打开模型设置以检查可用性。在“详细信息”中,展开的工具会显示一张紧凑的“引擎 / 模型 / 运行于”卡片,包含用于复制完整模型 ID 的按钮、以高亮备注形式呈现的任何设置问题,以及一个“更换引擎”按钮。离线状态会覆盖缓存的就绪状态。加载和保存使用明确的文本和尊重“减少动态效果”设置的旋转指示器。
设备状态旁的一个视图图标会打开记忆中的“简洁”、“模型”和“详细信息”三种选择,每种都有自己的图标。“简洁”只显示速度/质量控件;将鼠标悬停在其标签上或点击该标签,会在弹出层中打开所选模型和硬件详细信息。更改预设也会打开此弹出层以提供反馈,同时保持“简洁”模式。“模型”显示全部六个已选引擎;“详细信息”允许用户一次展开一个引擎,以查看完整标识符、观察到的执行设备、报告的问题以及“更换引擎”链接。视图更改仅影响呈现方式。引擎列表和弹出层可滚动,因此即使窗口较矮,控件也保持可及。
更换预设成功后,后端已确认的模型选择保持可见,同时依赖的状态查询刷新,随后恢复为观测到的运行时状态。在此过渡期间,陈旧的就绪状态、设备和错误信息会被隐藏。所有受影响的状态来源(包括说话人分离)都会刷新。滑块保留键盘及从右到左支持,并为屏幕阅读器链接说明文字。更换预设绝不会下载模型。
“自动”会依据本地 CPU 线程数、内存和 GPU 显存来选择一个档位,然后使用与手动预设相同的共享模型预算。Models(模型)和 Details(详情)在滑块下方保留硬件状态行;Simple(简洁)则将该信息放入其弹出气泡中。硬件详情包括 Max 可用性以及各工具选择更小或未变更模型的原因。全局选择会重置各系列覆盖项;系列选择会覆盖全局偏好。当前台或批量工作处于活动状态时会阻止更改。选择预设绝不会下载权重或激活云提供商。当显式选择已就绪的网络翻译器时,它保持权威性;如果该提供商不可用,配置文件的协调过程会恢复为已安装的本地翻译器。
全局计划会保留系统余量,保留已固定/自定义的选择,然后按顺序分配给 TTS、转录、翻译、听写和说话人识别。当 OmniVoice 的检查点和运行时均已安装且估算值符合要求时,原生 OmniVoice 在 Max 档位下为首选;否则计划会保留已安装的兼容选择。克隆引擎绝不会被替换为 Kitten 仅限预设的语音。支持性工具在必要时使用更小的已安装模型。就绪的 NLLB 选择会被保留,因为设备级预设无法验证备选的 Argos 语言对。听写在已安装、语言兼容且有足够余量时会升级为 Parakeet v3;Whisper Tiny 可能因语言、安装或内存限制而继续被选中。预设不会改变 OmniVoice 的运行时精度(目前为 FP16);Max 并不保证 FP32 推理。
估算值描述的是工作内存,而非下载大小。CPU 和独立 GPU 的预算相互分离;Apple 统一内存只计算一次。“自动”使用带有系统余量的稳定总容量预算,因此加载应用自身模型不会导致反复切换。它会在被选中时、启动时以及安装后重新评估,而不会在任务进行中持续评估。加载时仍会执行运行时内存压力检查;适配估算无法保证峰值使用量,也无法精确考虑其他应用的占用。硬件读数缺失时会保留模型选择并显示“不可用”检查标记。移动滑块不会预加载任何模型。
硬件说明以紧凑网格形式显示实时的本地 CPU/GPU 利用率和已用(相对于容量)的 RAM/VRAM,随后是各工具的内存适配情况。展开 Details(详情)可查看硬件规格以及模型如何共享内存。它共享设备状态遥测查询,在打开期间每两秒刷新一次,关闭即停止。不支持的读数和失败或离线的采样样本显示“Unavailable”,而不是虚假的零值或过期的实时值。当设备级 GPU 遥测不可用时,所报告的应用进程分配会被标记为“App VRAM”。面板在窗口较矮时可滚动。规划估算仍与这些实时测量相互独立。
关联控制包括 OmniVoice 采样(8/16/32/64 步)、Faster-Whisper 解码搜索(1/3/5/8)、Sherpa 换能器听写搜索(从贪心搜索到 8 路径修正束搜索)、本地 NLLB 束搜索(1/3/5/8)以及已安装的说话人分离运行时。Clone(克隆)、Dubbing(配音)、Batch(批量)、Voice Conversion(语音转换)、Stories(故事)和 Audiobook(有声书)通过这一共享契约解析未触碰的 TTS 控件;显式的 Production 覆盖仍然优先。全局计划在应用其模型选择后会缓存有效的解码器档位。当所选模型发生更改时,听写会重建其热启动识别器。当只有一个说话人分离运行时,其单独的各系列控件保持不可用。LLM 选择保持显式,因为它没有可比较的本地工作量控制。
“性能设置”将每个系列显示为离散的“Fast(快速)/Balanced(均衡)/Quality(画质)/Max”控件,并在其下方标明有效的本地模型、运行时和解码工作量。选择在任何可选的渲染器侧同步之前即被持久化,并收到明确的“已应用”或“失败”反馈,因此冷引擎目录不会让控件显得毫无反应。加载克隆控件不会延迟此反馈;只有最新的预设会更新其草稿设置。没有已安装兼容目标的系列会保持禁用状态,指明所需引擎并链接到其 Models 视图;没有可比较工作量契约的引擎会说明该限制。紧凑侧栏保留同一设置的滑块形式。
Settings(设置)> Models 将这些档位转化为一键式的、目标感知的模型包。每个包在启动现有的可恢复安装器之前,都会预览其精确的兼容模型、已安装大小、剩余下载量和总体进度。包档位可在任何引擎激活前浏览;浏览不会更改已保存的性能配置文件或下载模型。该包会预选“下载量适配模型磁盘”的最大档位(按后端的可用空间余量计算),因此当磁盘几乎已满时,会打开更小的包而不是 Max。Install/Use(安装/使用)按钮会应用所选档位。“Fast(快速)”安装最小的本地 ASR 和听写集合;“Balanced(均衡)”选择更快的 Whisper Turbo 和 Parakeet 集合;“Quality(画质)”和“Max”增加 Whisper large-v3 和本地 NLLB;在 Apple Silicon 上,它们会安装其 MLX 构建(运行于 GPU,而非仅限 CPU 的 CTranslate2 副本),且已保存的档位会选择 MLX Whisper(已在使用 MLX Whisper 的 Mac 会保持不变)。每次成功下载模型后都会重新协调已保存的档位,因此新可用的引擎无需再次选择或重启即可投入运行。说话人分离保持显式,因为原生 audio.cpp 设置和受限的 pyannote 访问需要分别获取同意;LLM 保持显式,因为它没有共同的本地性能目标。
在生命周期变更之后,我们对后端启动进行了实时检查:OmniVoice 加载成功,performance-profile 端点正常响应。但这并不能确定历史原生崩溃的原因,也无法验证每次停滞后的恢复情况。
预设仅管理 CTranslate2 Whisper 运行时(Faster-Whisper、其崩溃隔离子进程以及 WhisperX)。当另一个 ASR 引擎处于活动状态时,例如 Apple Silicon 上的 MLX Whisper 或 Parakeet MLX,或者用户自行选择的引擎,预设会保留该引擎,而不会切换到 CPU 上的 Faster-Whisper。崩溃隔离的 Faster-Whisper 在每次转录请求时都会收到相同的 ASR 解码预设。父进程会对所选的 beam/best-of 值进行快照;子进程在加载模型前会对这些值进行验证。现有调用方若未指定解码选项,则保留其原始默认值,更改预设无需重启子进程。
参考转录¶
上传的语音参考通过共享的 transcribe 端点的参考模式使用所选的 ASR 引擎。该模式会跳过词对齐,在加载前检查本地已安装的模型,并且绝不会启用 LLM 精炼。听写(Dictation)选择保持独立。模型缺失时,可选的转录文本仍可编辑和重试;异步结果不会覆盖手动编辑或随后选择的已保存语音。
如果本地安装无法得到验证,参考模式将采取 fail closed(默认失败),包括未知的模型选择和预检错误。加载器会在加载前立即重新检查实际选中的引擎以及每一个回退项,从而绕过过期的正向缓存条目。
当专用 GPU 容量不可用时,规划器仍会在 RAM 预算内考虑已安装的仅 CPU 候选方案。它不会假设 GPU 模型必然放得下。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 om/VoiceStudio