ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

faster-whisper实战上手:Whisper语音转录提速4倍,内存占用减半

faster-whisper实战上手:Whisper语音转录提速4倍,内存占用减半 faster-whisper实战上手Whisper语音转录提速4倍内存占用减半【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper每天要处理几小时的会议录音、播客或访谈素材你大概率体会过这种痛用原版 Whisper 转录 13 分钟音频GPU 上要跑 2 分多钟两小时的长音频要等二十分钟起步内存还越吃越多。等待不只是浪费时间——对批量任务来说它直接决定了你的机器成本和交付时间。faster-whisper 把 OpenAI 的 Whisper 模型换到 CTranslate2 推理引擎上重新实现了一遍目标就是不牺牲准确率的前提下把这两笔账都打下来。对比原版 Whisper它强在三个可量化的点第一速度最高快 4 倍。以 13 分钟音频、large-v2 模型、GPU 实测RTX 3070 Tibeam size 5原版 Whisper fp16 用时 2分23秒faster-whisper fp16 是 1分03秒int8 量化后 59秒再叠加批量处理batch_size8只要 16秒。第二内存占用明显下降。同一场景下 int8 量化把显存从 4708MB 压到 2926MBCPU 上跑 small 模型内存从 2335MB 降到 1477MB。显卡只有 8GB 的话这个差距直接决定能不能跑起来。第三不需要自己装 FFmpeg。原版 Whisper 依赖系统里的 FFmpegfaster-whisper 改用 PyAV 做音频解码FFmpeg 库直接打包在 Python 包里装完包就能用少一类环境坑。完整对比数据如下13 分钟音频beam size5。GPU 端large-v2CUDA 12.4RTX 3070 Ti 8GB实现精度用时显存openai/whisperfp162分23秒4708MBwhisper.cpp (Flash Attention)fp161分05秒4127MBfaster-whisperfp161分03秒4525MBfaster-whisperbatch_size8fp1617秒6090MBfaster-whisperint859秒2926MBfaster-whisperbatch_size8int816秒4500MBCPU 端small 模型i7-12700K8 线程实现精度用时内存openai/whisperfp326分58秒2335MBwhisper.cppfp322分05秒1049MBfaster-whisperfp322分37秒2257MBfaster-whisperbatch_size8fp321分06秒4230MBfaster-whisperint81分42秒1477MBfaster-whisperbatch_size8int851秒3608MB注意两点批量模式最快但最吃内存纯 CPU 单文件场景下 whisper.cpp 反而更快选型时别只看一家数据。三步跑通你的第一条转录第一步安装。需要 Python 3.9 或更高不需要额外装系统组件pip install faster-whisper第二步加载模型。模型用尺寸名指定首次加载会自动下载对应的 CTranslate2 权重。有显卡就 cuda 加 float16纯 CPU 就 int8from faster_whisper import WhisperModel model WhisperModel(large-v3, devicecuda, compute_typefloat16) # 没有显卡WhisperModel(large-v3, devicecpu, compute_typeint8)第三步转录并拿结果。transcribe 返回一对东西段落流和语言信息segments, info model.transcribe(audio.mp3, beam_size5) for segment in segments: print(f[{segment.start:.2f}s - {segment.end:.2f}s] {segment.text})这里有个最容易踩的坑 ⚠️segments 是生成器你不进入 for 循环或调用 list(segments)模型根本不会开始跑。习惯调用即算完的人第一次会被绕进去。语言默认取音频前 30 秒自动检测结果和置信度在 info.language 与 info.language_probability 里。已知语种时直接传 languagezh 之类的参数既省检测时间也避免误判想把英文音频译成其他语言把 task 改成 translate 即可。原理速览同一个模型为什么能跑出两种速度不用逐行读代码两个机制值得弄明白。机制一同一份配方换了一间厨房。Whisper 本身只是模型权重相当于一份配方原版 openai/whisper 用 PyTorch 搭了一间通用厨房faster-whisper 则把配方搬进了 CTransfer2 这台专门给 Transformer 优化的推理引擎。引擎主要干两件事一是操作融合把原本零散的小步骤合并成大步骤减少来回读写二是量化int8 存权重相当于把 8 位数字压缩成 2 位表变小了跑起来就又快又省。这解释了为什么同一个模型、同样的准确率换实现后速度和内存完全两样。转录算法本体在 transcribe.py 里。机制二先滤掉静音再让模型干活。Whisper 每次只处理 30 秒的窗口长音频要切成多个窗口逐段转录。faster-whisper 在切窗前多走一步用 Silero VAD 模型扫一遍全片标出真正有语音的区间只把这些区间喂给转录模型相当于空白页直接跳过。默认只删超过 2 秒的长静音正常语句不会被切断。收益不只是快——模型面对大段连续静音时容易复读、幻觉出一堆假文本过滤掉静音后结果也稳得多。想更激进一点传 vad_filterTrue 加 vad_parameters 调最小静音时长等参数即可默认值都写在 vad.py 的 VadOptions 里。三种常见场景的参数选择场景一临时转一条音频。保持默认beam_size5默认值无需改动GPU 用 compute_typefloat16显存紧张时换 int8_float16 混合量化CPU 用 int8。这个场景没有别的讲究。场景二批量处理大量文件。换成 BatchedInferencePipeline它包了一层同样的 transcribe 接口属于即插即用。注意这里的 vad_filter 默认就是开着的from faster_whisper import WhisperModel, BatchedInferencePipeline model WhisperModel(large-v3, devicecuda, compute_typefloat16) batched BatchedInferencePipeline(modelmodel) segments, info batched.transcribe(audio.mp3, batch_size16)原理是把多个 30 秒窗口凑成一批塞进 GPU 并行算13 分钟音频因此从 1 分 03 秒压到 17 秒代价是显存fp16 下 batch8 就要 6090MB。显存不够就把 batch_size 从 16 降到 8提速幅度依然可观。场景三长期挂服务。三条原则模型只加载一次large-v3 加载不便宜别每个请求都重建有并发请求时设 num_workers让多线程的并发调用真正并行多张显卡时给 device_index 传一个列表比如 [0, 1]各线程的转录分摊到不同卡上。再配合 local_files_onlyTrue 防止启动时走网络。想省事也可以直接用仓库里 docker/infer.py 的示例起步。字幕类需求加 word_timestampsTrue 拿到每个词的起止时间。它默认关闭因为开启后每段还要多跑一遍交叉注意力对齐只在确实需要时开。另外有专有名词总被认错的话可以用 hotwords 参数喂一份提示词。四个高频翻车场景与对应解法现象GPU 版启动报错提示找不到 CUDA 相关库或 ctranslate2 加载失败。原因新版 ctranslate2 只认 CUDA 12 加 cuDNN 9你机器上的版本对不上。解决CUDA 12 配 cuDNN 8 就降级到 ctranslate2 4.4.0CUDA 11 环境降级到 3.24.0或者直接用 NVIDIA 的 CUDA 12 官方 Docker 镜像所需库都预装好了。现象脚本跑完了但打印不出任何文本。原因segments 是生成器没被迭代前模型根本没执行。解决进入 for 循环逐条消费或先 segments list(segments) 强制跑完。现象静音、纯音乐片段转出一大串重复文字。原因模型在听不到有效语音时容易进入复读循环或上一窗口的错误文本被当作提示越滚越偏。解决开 vad_filterTrue 把静音摘掉或对顽固片段传 condition_on_previous_textFalse让每个窗口不再参考上文官方在跑 distil-large-v3 时也这么推荐。现象检测出的语言明显不对。原因默认只拿前 30 秒音频判断开头若是音乐、混响或别的语种就会误判。解决直接传 language 跳过检测拿不准时看一眼 info.language_probability 再决定信不信。该不该上 faster-whisper适合用的情况批量转长音频、对机器成本和内存有硬约束、技术栈是 Python、要求准确率与原版 Whisper 对齐。这几个条件同时成立时faster-whisper 是当下 Python 生态里最稳的本地方案。不建议用的情况想要免 Python 环境的独立可执行程序上 whisper.cpp纯 CPU 单文件场景它明显更快要实时流式字幕Whisper 本身就是离线模型faster-whisper 也不例外流式需求要看基于它做的社区方案只转零星的短音频、量很小用托管 API 更省事没必要自己维护推理环境。另外它定位是纯推理不支持训练。手里有微调过的模型想用的话得先用 ct2-transformers-converter 工具把它转成 CTranslate2 格式README 里给了完整命令转完的路径直接丢给 WhisperModel 就能加载。回到开头那个场景13 分钟音频GPU 上 large-v2 批量 int8 只需 16 秒左右CPU 上 small 模型 int8 批量也要 51 秒——对批量任务来说这就是当天能交完和排不起队的差别。faster-whisper 的 PyPI 包名与项目同名装完即可开工想读源码的话clone 仓库即可git clone https://gitcode.com/GitHub_Trending/fa/faster-whisper【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表