在线计算器

本地语音模型体量估算器

先把 STT + TTS + LLM 三段权重的体积下限算清楚,再去机器上实测真实占用。

这个页面只做一道乘法:参数量 × 每参数字节数 = 权重体积下限。 内置清单里的参数量全部取自模型名本身(0.6b / 1.7B / 82M / 4B / 31B), 不含任何跑分、显存需求或延迟数据——那些我们没有实测,也不打算猜。

STT(语音转文字)

取值出处:LLM 与 Parakeet 的默认精度

默认 STT,只覆盖 25 种欧洲语言,不含中文

TTS(文字转语音)

取值出处:GGML 量化默认 BF16

默认 TTS

不勾就是把 LLM 交给云端 API(仓库的 --llm_backend 默认值 responses-api 就是这条路), 这段权重不落到你机器上。

LLM(对话模型)

取值出处:LLM 与 Parakeet 的默认精度

README 里出现过的本地 LLM 示例

1.12 GiB
STT 权重体积下限
0.6B × 2 字节
3.17 GiB
TTS 权重体积下限
1.7B × 2 字节
7.45 GiB
LLM 权重体积下限
4B × 2 字节
11.73 GiB
三段合计(下限)
1 GiB = 1024³ 字节

这不是显存占用,是权重体积的下限

这是权重体积的算术下限,实际占用必然更高——还要加上激活值、KV cache、音频缓冲、运行时与框架开销,且不同后端(GGML / torch / MLX / ONNX)差异很大;本站没有实测数据,请以你自己机器上的实际占用为准。

所以这个页面不会告诉你「某张显卡跑不跑得动」,也不会给吞吐、实时率或首包延迟的数字—— 那些都要在你自己的机器上实测,别人的数字换台机器就不作数。

中文场景请注意:默认 STT(nvidia/parakeet-tdt-0.6b-v3)只覆盖 25 种欧洲语言。要做中文语音代理必须换 STT——Whisper 系或 Paraformer,换完参数量也跟着变,请按你实际选用的检查点重新填。

计算口径:每段体积下限 = 参数量(B)× 10⁹ × 每参数字节数; bf16 / fp16 = 2 字节,8bit = 1,6bit = 0.75,4bit = 0.5。 这几档取值对应仓库参数 --llm_torch_dtype(默认 float16)、--qwen3_tts_ggml_quantization(默认 BF16)、--qwen3_tts_mlx_quantization(可取 bf16 / 4bit / 6bit / 8bit)、--parakeet_tdt_compute_type(默认 float16)。

它算的到底是什么

一条本地语音对话链路要同时装下三个模型:把你说的话转成文字的 STT、 想清楚该回什么的 LLM、把答案念出来的 TTS。 它们是同时驻留的,不是排队轮流上场,所以体积要加起来看。

这个页面做的是一道乘法:参数量 × 每参数字节数。 一个 1.7B 的模型以 bf16 保存,每个参数占 2 字节,权重就是 1.7 × 10⁹ × 2 ≈ 3.4 GB(约 3.17 GiB)。 换成 4bit,每个参数只占半字节,同一个模型的权重降到四分之一。就这么简单,没有别的魔法。

算出来的数只是下限。推理跑起来之后,显存里还要放激活值、KV cache、 音频缓冲区,加上运行时和框架自己的那一份开销,而这部分在 GGML、torch、MLX、ONNX 上 差别很大——同一个模型换个后端,实际占用能差出一大截。所以页面上那个数字的正确读法是 「至少要这么多」,而不是「就要这么多」。

为什么值得先算这一步

因为它能在你下载十几 GB 权重之前,先把明显不成立的组合筛掉。 如果三段权重的下限已经超过了你的显存总量,那么后面的一切优化都是徒劳, 这个结论不需要实测就能下——下限突破了,实际值只会更高。

反过来,如果下限只占了显存的一小半,那也不等于能跑, 只是说明「值得下下来试试」。这两个方向的推断强度完全不对称,用的时候要分清楚。

怎么用

第一步,选 STT。默认给的是 nvidia/parakeet-tdt-0.6b-v3, 0.6B 参数,这个数就写在模型名里。它的默认计算精度是 float16, 对应页面上的 fp16 档。

第二步,选 TTS。默认是 Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice,1.7B。 清单里还有 hexgrad/Kokoro-82M,82M 参数——换成它,TTS 这一段的体积会小一个数量级。 Qwen3-TTS 的两个后端各有各的量化参数:GGML 侧默认 BF16,MLX 侧默认 6bit, 这也是页面上把 6bit 单列一档的原因。

第三步,决定 LLM 放哪。如果 LLM 走云端 API,就把「LLM 也放在本地跑」这个勾去掉, 这一段权重不落到你的机器上。想本地跑就选一个参数量——清单里给了 4B 和 31B 两个示例, 用的是仓库 README 里出现过的模型。

第四步,跑实测。页面给的下限只是让你有个数量级的概念, 真正要拿的数字在你自己的机器上。

三件容易搞混的事

第一,GB 和 GiB 不是一回事。参数量乘出来的是十进制的字节数, 而显存和内存通常按二进制单位报(1 GiB = 1024³ 字节)。1.2 × 10⁹ 字节写成 GiB 是 1.12, 差了大约 7%。页面统一用 GiB,和你在 nvidia-smi 或活动监视器里看到的口径对齐。

第二,量化文件通常比乘法结果略大。真实的量化权重里往往有一部分不量化 (嵌入层、归一化参数),还要存缩放因子和零点。所以「参数量 × 位宽」是下限里的下限, 实际文件会大一点。

第三,默认只有一条流水线。仓库的 --num_pipelines 默认是 1, 也就是默认只承载一个并发会话。要服务多个用户,这个参数得动——而并发起来之后, KV cache 和音频缓冲这些「权重之外的部分」会跟着涨,权重本身却不会重复加载。 这正说明为什么不能拿权重体积当占用预算。

什么情况下这个页面不适用

MoE 模型。混合专家模型的总参数量和每次推理实际激活的参数量是两个数, 权重要全部装进内存,但计算只走一部分。这个页面按总参数量算体积下限,对 MoE 依然成立, 但你不能反过来用它推断算力需求。

模型名里没有参数量的情况。比如 GGUF 打包里的 E4B 这类标注, 或者你手上只有一个文件名的检查点。这时候参数量得去模型页面上找,找不到就别猜—— 猜出来的数乘上去,结果只是一个精确的错误。

需要延迟或吞吐结论的时候。体积和速度是两件事。 一个模型装得下不代表跑得动,跑得动也不代表首包够快。 这个页面不碰速度,因为我们没有任何实测数据可以支撑那类数字。

算完之后

拿到下限之后的下一步是把模型拉下来实跑,记录峰值占用,然后用「实测值 ÷ 下限」 得到一个属于你这台机器、这个后端的经验倍数。有了这个倍数, 以后换模型时就能用下限乘一下做粗估——但那是你的倍数, 换后端、换并发数就要重测。 想先把整条链路的参数搞明白,可以看 语音对话链路专题里的部署与选型文章。

常见问题

算出来 12.6 GiB,我的 16GB 显卡能跑吗?

这个页面回答不了这个问题,而且任何只知道参数量的页面都回答不了。12.6 GiB 只是三份权重本身的体积,不是运行时的占用;推理跑起来还要加上激活值、KV cache、音频缓冲、CUDA/Metal 上下文和框架本身的开销,这几项加起来能占多少,取决于你用的是 GGML、torch、MLX 还是 ONNX,也取决于并发数、上下文长度和采样设置。想知道答案只有一条路:把模型拉下来,跑起来,看任务管理器或者 nvidia-smi。别人给你的数字换台机器就不作数。

为什么 6bit 是 0.75 字节,不是 1 字节?

因为 6 bit ÷ 8 = 0.75 字节,这是位宽的直接换算。量化的位宽不必是 8 的整数倍,权重在文件里是按位打包存的,不会每个参数单独占一个字节。这也解释了为什么 4bit 只有 fp16 的四分之一:从 16 位压到 4 位,正好是四分之一。需要提醒的是,真实的量化文件通常还带一些不量化或按更高精度保存的部分(嵌入层、缩放因子、零点),所以实际文件会比这道乘法算出来的略大——又是一条「下限」的理由。

默认那套配置,中文能用吗?

默认 STT 是 nvidia/parakeet-tdt-0.6b-v3,它覆盖 25 种欧洲语言,不含中文。想做中文语音代理必须换 STT——Whisper 系(whisper / whisper-mlx / faster-whisper,语言覆盖取决于你选的检查点)或者 Paraformer(FunASR,默认那个检查点偏中文)。换完之后参数量也跟着变,页面上选「自定义参数量」把新模型的数填进去重算。TTS 侧默认的 Qwen3-TTS 是多语言的,语言参数默认 auto。

这里为什么没有「推荐配置」这一栏?

因为给推荐配置需要实测数据,而我们一次推理都没跑过,一份权重都没下载过。手上确定的事实只有模型名里自带的参数量和仓库参数里写明的量化取值,能从这两样东西严格推出来的只有一道乘法。硬编一张「8G 显卡选这套 / 24G 选那套」的表,看起来有用,但它既没有依据也很快过期,比不给更糟——你会以为它是准的。

想系统学会把模型跑在自己机器上?

从接入第一个 API 到把本地模型接进日常工作流,奇连 AI 的学习路线按顺序排好了。

看学习路线