引擎虚拟环境与磁盘占用¶
Model Catalogue 现在会在安装前提供结构化的磁盘占用明细:模型权重下载、软件包下载、唯一安装字节、潜在共享字节、临时空闲空间需求、目标卷,以及估算置信度。缺失的软件包或去重测量值会显示为“未知”而不是“零”。打开已安装引擎的磁盘详情时,会分别测量其模型、环境、共享缓存,以及应用自有总量。这些值来自 config/models.yaml 和 sidecar 安装器规范;UI 不维护自己的大小表。
大多数引擎在 VoiceStudio 的主环境中以进程内方式运行。少数引擎(IndexTTS2、MOSS-TTS-v1.5、dots.tts,以及任何依赖项与主环境的 torch/transformers 固定版本冲突的引擎)在专用的 sidecar 虚拟环境中运行,这样它们的固定版本就不会破坏应用的其余部分。这些 sidecar 正是磁盘占用累积之处——本页将解释原因,以及如何控制磁盘上的成本。
为什么 sidecar 需要自己的虚拟环境¶
IndexTTS2 固定 transformers<5,而 VoiceStudio 要求 transformers>=5.3。你无法在同一个环境中同时满足两者,因此 IndexTTS2 在首次使用时会被创建独立的虚拟环境(uv venv + uv pip install,参见 backend/engines/indextts/bootstrap.py)。代价是重型 ML 技术栈的第二份副本——其中大部分是 torch + 捆绑的 CUDA 库。
“第二个 torch”有多大?¶
测量时间(2026-06):
| 平台 | torch CUDA wheel | + 捆绑的 CUDA 库 |
|---|---|---|
| Linux (cu128) | ~0.83 GiB | 外加若干 GiB 的 nvidia-* 包 |
| Windows (cu128) | ~3.2 GiB(DLL 已捆绑在 wheel 中) | — |
因此,如果 sidecar 固定的 torch 版本与主环境不同,就会产生数 GB 的额外开销。如果 sidecar 固定相同的 torch + CUDA 构建,则几乎可以共享所有这些内容(见下文)。
uv 对相同 wheel 去重——免费,但有一个条件¶
uv 通过从全局 wheel 缓存链接到每个虚拟环境的 site-packages 来安装包。链接模式:
- macOS + Linux —
clone(写时复制 reflink)。安装了相同 wheel 的 N 个虚拟环境会共享这些字节,直到其中一个被修改——实际上磁盘上只有一份副本。 - Windows —
hardlink。在单个卷上效果相同。
唯一条件:缓存和虚拟环境必须位于同一文件系统上。如果 UV_CACHE_DIR 与引擎虚拟环境位于不同的驱动器上,uv 会退化为完整复制(不去重,更慢)。请将它们放在一起。
去重是按每个相同的 wheel进行的。torch==2.6.0+cu124 和 torch==2.8.0+cu128 是不同的 wheel → 零共享 → 需要额外一份完整的数 GB 副本。因此,对 sidecar 而言,最大的磁盘决策是:只要引擎允许,就固定与主环境相同的 torch 构建。当引擎不允许时(IndexTTS2 的 transformers<5 迫使使用更旧的 torch 系列),这第二份副本就是隔离不可避免的代价——而不是缺陷。
可选加入的 #498 引擎展示了这两种情况:dots.tts 固定 torch==2.8.0——与主环境约束的相同构建——因此它与主虚拟环境共享几乎全部 torch,只有它的 transformers==4.57 和模型依赖是新增的。MOSS-TTS-v1.5 固定 torch==2.9.1+cu128,这是一个不同的构建,因此在 CUDA 主机上需要额外支付一份完整的数 GB torch 副本(这是运行一个技术栈固定 transformers==5.0 的 8B 模型的代价)。
在 Linux 上,
nvidia-*CUDA 包是独立的 wheel,因此即使是不同的 torch 版本,任何固定版本恰好匹配的nvidia-*仍然会被共享。在 Windows 上,CUDA DLL 位于 torch wheel 内部,因此跨 torch 版本时没有任何内容会被共享。
实用指南¶
- 将
UV_CACHE_DIR和引擎虚拟环境放在同一文件系统上(默认情况下——两者都在你的主目录下——已经满足此要求)。应用会自动强制这一点:当应用环境或引擎虚拟环境位于与 uv 默认缓存不同的卷上(例如安装到 D: 盘、便携模式)时,每次受管理的uv调用都会将UV_CACHE_DIR指向虚拟环境旁边的缓存(<env root>/uv-cache、<data dir>/engines/.uv-cache)。你自己显式设置的UV_CACHE_DIR始终优先。 - 在 Linux ext4(无 reflink)上,
export UV_LINK_MODE=hardlink可保证在任意单个文件系统上去重;默认的clone只在支持 reflink 的文件系统(带 reflink 的 XFS、btrfs、APFS)上去重。 - 回收空间:删除 sidecar 虚拟环境(
backend/engines/<id>/.venv/)会释放其独有文件;共享缓存字节会一直保留到执行uv cache prune。 - 展望未来:PyTorch 的实验性 wheel 变体(随 2.8 发布)最终将让
uv install torch自动选择正确的 CUDA 构建,而 uv 已经提供了--torch-backend=auto。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 om/VoiceStudio