faster-whisper模型选型:8GB显存能跑多快?tiny到large-v3的选型结论
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
显存只有8GB、字幕今晚必须批量跑完,faster-whisper模型选型的第一步不是写代码,而是决定加载哪个模型:tiny太笨、large-v3太重,中间怎么平衡?这篇文章把 tiny/base/small/medium/large-v2/large-v3 六档一次讲透。
🎯 30秒秒选:你的硬件该配哪个模型
目的明确的读者看这张表就够了:
| 手里的硬件 | 典型场景 | 推荐档位 | 一句话理由 |
|---|---|---|---|
| ≥8GB 显存 GPU | 批量字幕、会议转录 | large-v3 + int8_float16 | 实测13分钟音频仅占2.9GB显存,精度封顶 |
| 4~8GB 显存 GPU | 批量、追求速度 | large-v2 或 medium + int8 | 少一档的显存,多一分速度 |
| ≤4GB 显存 GPU | 快响应、轻量服务 | base + int8_float16 | 速度仍是音频时长的1/10量级 |
| 纯 CPU 台式机 | 离线批处理 | small + int8 | 实测13分钟音频1分42秒跑完 |
| 4GB 内存设备/NAS | 边缘、监控 | tiny.en + int8 | 内存占用500MB以内,只认英语 |
另外记住一条:只处理英语就把档位名加.en后缀,同一档里文件更小、解码更快。
👥 六个模型逐个点评:每档是什么人设
tiny(39M 参数):速度王,但是体验版。模型文件约75MB,int8 量化后几百MB内存就能跑;代价是 LibriSpeech 干净英语朗读集上 WER(字错率,越低越好)约 9.7%,是 base 的两倍。适合"先有再优"的管道验证。
base(74M):实时场景的默认项。WER 5.4%,文件约145MB,耗时约为 small 的一半。如果你的产品要求首字延迟短、音频以清晰人声为主,base.en 往往够用。
small(244M):我心中的性价比拐点。官方 README 在 8 线程 i7-12700K 上实测:13分钟音频 int8 跑 1分42秒、内存1477MB;换 batch_size=8 批处理 51秒跑完(内存涨到3608MB)。WER 4.8%,"能直接用"和"听起来很顺"的分界线就在这一档。
medium(769M):6GB 显存卡的舒适上限。WER 3.6%,int8 下显存占用约1GB,配 batch 还有大量余量。多说话人、有背景噪音的音频从这一档开始明显更稳。
large-v2(1550M):精度老兵,benchmark 数据最多。官方在 RTX 3070 Ti 上实测 13分钟音频:fp16 用 1分03秒、占4525MB;int8 只要59秒、2926MB;int8 + batch_size=8 仅16秒。faster-whisper 的速度比 openai 原版实现最高快4倍,大头都省在这一档。
large-v3(1550M):当前默认,多语言最强。训练数据比 v2 多约65%,多语种和复杂场景的精度有实质性提升,显存要求和 v2 同档(int8 约3GB)。只跑英语、把速度放第一的话,可以看看仓库里同样支持的turbo(large-v3-turbo,8位蒸馏版),GPU 上快约8倍,精度略低于 v3。
📈 数据的边际回报:每升一档,到底买到什么
先看准确率这条线(LibriSpeech 干净英语朗读集,WER):
tiny 9.7% → base 5.4% → small 4.8% → medium 3.6% → large 2.7%
拆开看每升一档的差值:tiny→base 砍掉 4.3 个百分点,这是全部曲线里最肥的一段;base→small 只降 0.6 个点,但速度代价约2倍;small→medium 降 1.2 个点,显存需求从几百MB跳到1GB量级;medium→large 再降 0.9 个点,耗时和显存又上一个台阶。
速度侧几乎每档×2:从 tiny 到 large,同一台 CPU 上要慢约 30~40 倍,而 WER 只从 9.7% 走到 2.7%。
我的判断是:拐点在 small。预算允许、要"能上线"的转录质量(WER<5%),到 small 就该停手;只有当你需要 WER<4% 的"业务级干净",才值得为 medium 多花一档资源。large 档的价值不在干净英语——那里 v2 和 v3 只差零点几个点——而在多语言、口音重、专业术语多的真实语料,large-v3 相对 v2 的收益集中在这类场景。
🛠 三类硬件三套配置
消费级 GPU(以8GB为例):large-v3 + int8_float16。int8_float16表示权重8位存储、FP16计算,是显存和精度的平衡点——仓库实测 large-v2 档 int8 跑13分钟音频仅2926MB显存,开 batch_size=8 也才4500MB,8GB 卡余量充足。
from faster_whisper import WhisperModel model = WhisperModel("large-v3", device="cuda", compute_type="int8_float16") segments, info = model.transcribe("meeting.mp4", beam_size=5, vad_filter=True) text = "".join(seg.text for seg in segments)纯 CPU:small + int8 + 限线程。int8 把内存从 2257MB 压到 1477MB;beam_size=1比默认的 5 快一倍左右;cpu_threads=8和外部OMP_NUM_THREADS对齐,避免超线程抢核。想拿内存换速度时用 BatchedInferencePipeline 批处理,13分钟音频能从1分42秒压到51秒。
from faster_whisper import WhisperModel model = WhisperModel("small", device="cpu", compute_type="int8", cpu_threads=8) segments, _ = model.transcribe("interview.wav", language="zh", beam_size=1)低内存设备(4GB内存的NAS、边缘盒子):tiny.en + 单核级线程。int8 下 tiny.en 内存占用在500MB以内,without_timestamps=True让解码不再生成时间戳 token,进一步省算力。这一档别期待高精度——WER 9.7%,定位是"大致能用"。
from faster_whisper import WhisperModel model = WhisperModel("tiny.en", device="cpu", compute_type="int8", cpu_threads=2) segments, _ = model.transcribe("memo.m4a", language="en", without_timestamps=True)⚠️ 避坑指南:4个高频坑
现象:转录反复输出同一句话、时间戳越漂越远。原因:condition_on_previous_text默认 True,上一窗口的输出会回灌成下一段的上下文,遇到坏音频模型会陷入循环。 解法:传condition_on_previous_text=False,并开vad_filter=True把长静音切掉。
现象:中文音频被检测成英语。原因:默认只用前30秒做语言检测,开头有音乐、噪音就容易被带偏。 解法:直接传language="zh",跳过检测,还省掉开头的检测开销。
现象:8GB 卡上 large-v3 直接 OOM。原因:fp16 权重加批处理占用翻倍。 解法:compute_type="int8_float16",实测同任务显存从4.5GB档降到2.9GB档。
现象:调完 transcribe() 感觉什么都没发生。原因:segments是生成器,只有开始迭代时才真正执行转录。 解法:用list(segments)包一层或写 for 循环,进度才会出现。
✅ 收尾:上线前做三件事
我的建议:8GB 卡直接 large-v3 int8_float16,纯 CPU 用 small int8,纯英语场景一律选.en版本。上线前拿一段1分钟真实音频,small 和 large-v3 各跑一遍,用你自己数据上的 WER 和耗时决定那一档值不值。需要调解码细节时,完整参数清单就在 faster_whisper/transcribe.py 里。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考