当前位置: 首页 > news >正文

Faster-Whisper:更快更好的开源Asr模型

大家好,我是烤鸭:

   半年前写过的whisper,https://blog.csdn.net/Angry_Mills/article/details/145556431。其实一度中间换到了whisperX,虽然没有whisper好用(不支持标点符号),不过效率是真香。最近又遇到类似的需求,就去魔塔上搜了一下,发现了这款 faster-whisper(不过魔塔上没有代码说明 )。如果你也有asr要求,又不想花钱,机器配置又一般,强烈推荐。

Faster-Whisper模型介绍

魔塔地址:https://www.modelscope.cn/models/XXXXRT/faster-whisper

github:https://github.com/SYSTRAN/faster-whisper

可以看到large模型,在内存差不多的情况下,faster-whisper耗时比whisper快了50%+

在这里插入图片描述

测试环境

  • Python 3.11 or greater
  • CUDA 12.8
  • windows 4070S 12G
  • linux 4090 24G

调用demo

代码没什么好说的,就是官方代码改了下。

from faster_whisper import WhisperModel
model_dir = "/data/xxxxx/modelscope/hub/models/XXXXRT/faster-whisper/faster-whisper-large-v3"# Run on GPU with FP16
model = WhisperModel(model_dir, device="cuda", compute_type="float16")
# or run on GPU with INT8
# model = WhisperModel(model_dir, device="cuda", compute_type="int8_float16")
# or run on CPU with INT8
# model = WhisperModel(model_dir, device="cpu", compute_type="int8")# 2. 配置VAD参数(异常检测核心)
vad_options = {"threshold": 0.9,"min_speech_duration_ms": 100,"max_speech_duration_s": 5
}def transcribe(audio_path: str):# 下载远程音频到本地segments, info = model.transcribe(audio_path,beam_size=5,length_penalty=0.5,  # 鼓励更短文本suppress_tokens=[],  # 不抑制任何标点(保留默认标点)word_timestamps=True,no_speech_threshold=0.8,  # 更严格的无语音判断compression_ratio_threshold=2.6,  # 更高的压缩率阈值log_prob_threshold=-0.8,  # 更高的日志概率要求vad_filter=True,  # 启用VAD过滤vad_parameters=vad_options  # 应用自定义参数)print("Detected language '%s' with probability %f" % (info.language, info.language_probability))# 关键:将迭代器转换为列表,避免后续遍历耗尽# 转换为只包含start、end、text字段的字典列表segments_list = [{"id": segment.id,"start": segment.start,"end": segment.end,"text": segment.text}for segment in segments]# 打印处理后的片段信息for seg in segments_list:print(f"[{seg['start']:.2f}s -> {seg['end']:.2f}s] {seg['text']}")return segments_list  # 返回仅包含目标字段的列表if __name__ == '__main__':transcribe("D:\\dev\\workspace\\python\\chatterbox\\simple_sep_results\\vocals.wav")

文字内容基本和原始音频一致,除了个别的背景干扰音识别失败之外。

不管是linux还是windows环境,使用float16量化,1分钟的音频基本在2~3秒可以返回结果。

结果截图:
在这里插入图片描述

如果不设置vad的话,上面的时间都是连贯的,上一句的end和下一句的start是没有间隔的。

由于我们要求的精度高一些,就调整了vad设置。

vad设置可以参考这篇文章:

https://blog.csdn.net/gitblog_00911/article/details/151477552

https://github.com/CheshireCC/faster-whisper-GUI/blob/main/%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E%EF%BC%9A.md

为什么快

faster-whisper is a reimplementation of OpenAI’s Whisper model using CTranslate2, which is a fast inference engine for Transformer models.

This implementation is up to 4 times faster than openai/whisper for the same accuracy while using less memory. The efficiency can be further improved with 8-bit quantization on both CPU and GPU.

faster-whisper是使用CTranslate2对OpenAI的Whisper模型进行的重新实现,CTranslate2是Transformer模型的快速推理引擎。
在保持相同准确率的同时,此实现比openai/whisper快达4倍,且占用内存更少。若在CPU和GPU上均采用8位量化,则效率可进一步提升。

CTranslate2之所以高效快速,主要源于其针对 Transformer 模型推理场景的深度优化,结合了硬件适配、执行策略和架构设计等多方面的改进。具体原因可归纳为以下几点:

1. 针对性的执行优化技术

CTranslate2 实现了多种高级优化技术,直接提升计算效率:

  • 层融合(Layer Fusion):将多个连续的计算层(如注意力层、前馈网络层)合并为单次操作,减少层间数据传输和内存访问开销。
  • 移除填充(Padding Removal):在处理批次数据时,去除输入序列中的填充(padding) tokens,避免无效计算,提高计算密度。
  • 批次重排序(Batch Reordering):对输入批次按长度或其他特征重新排序,使计算更高效(如减少内存碎片化、提高缓存利用率)。
  • 原地操作(In-place Operations):尽量在原有内存空间中执行计算,减少不必要的内存分配和拷贝。
  • 缓存机制(Caching Mechanism):对频繁使用的中间结果或参数进行缓存,避免重复计算或加载。

2. 量化与低精度计算支持

通过支持多种低精度数据类型,在保证精度损失最小的前提下大幅提升计算速度:

  • 支持 FP16(16 位浮点数)、BF16(16 位脑浮点数)、INT16(16 位整数)、INT8(8 位整数)甚至 INT4(4 位整数,AWQ 量化)等格式。
  • 低精度计算不仅减少内存带宽占用(数据传输更快),还能提高硬件计算单元的利用率(如 GPU 对 INT8 的计算吞吐量远高于 FP32)。
  • 量化后的模型体积更小(最多可缩小 4 倍),加载和访问速度更快。

3. 硬件适配与自动优化

  • 多 CPU 架构支持:针对 x86-64 和 AArch64/ARM64 等主流架构,集成了多个硬件优化后端,如 Intel MKL、oneDNN、OpenBLAS、Ruy、Apple Accelerate 等,充分利用硬件特性。
  • 自动指令集调度:单个二进制文件可包含多种指令集(如 AVX、AVX2)和后端,运行时根据 CPU 型号自动选择最优方案,无需手动配置。
  • GPU 高效利用:支持 CUDA 等 GPU 加速,结合量化(如 INT8 + FP16 混合精度)进一步提升 GPU 计算效率,减少显存占用。

4. 并行与异步执行

  • 多批次并行处理:支持多 GPU 或 CPU 核心并行处理多个批次,提高硬件资源利用率。
  • 异步执行:通过异步接口(如 translate_batch_async)允许在等待当前批次计算时预处理下一批次,减少空闲时间,提升吞吐量。

5. 动态内存管理

  • 采用缓存分配器(CPU 和 GPU 均支持),根据输入请求大小动态调整内存使用,避免过度分配或频繁内存申请 / 释放,平衡性能与内存开销。

6. 轻量架构与框架无关性

  • 与原始 CTranslate 相比,CTranslate2 移除了对 LuaTorch 等 deprecated 框架的依赖,核心逻辑与具体深度学习框架解耦,仅在模型转换阶段处理框架相关逻辑,减少运行时冗余。
  • 延迟调用外部库(如 Intel MKL、cuBLAS),避免依赖库的复杂逻辑对执行效率的影响,专注于核心推理优化。

实测数据佐证

从官方 benchmarks 来看,CTranslate2 在相同硬件上的性能显著优于通用深度学习框架(如 TensorFlow、PyTorch)和其他专用工具(如 Marian):

  • CPU 上:相比 OpenNMT-py(PyTorch),INT8 量化下的 CTranslate2 tokens 处理速度提升约 3 倍,内存占用减少 75%。
  • GPU 上:相比 FP32 精度,INT8 + FP16 混合精度下的 tokens 处理速度提升约 1.4 倍,显存占用降低 30% 以上。

综上,CTranslate2 通过 “算法优化 - 硬件适配 - 资源管理” 的全链路设计,实现了 Transformer 模型推理的高效执行,尤其适合生产环境中的高性能需求。

在这里插入图片描述

文章参考

https://blog.csdn.net/gitblog_00911/article/details/151477552

https://github.com/SYSTRAN/faster-whisper/

https://github.com/OpenNMT/CTranslate2/

https://github.com/CheshireCC/faster-whisper-GUI/blob/main/%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E%EF%BC%9A.md

http://www.dtcms.com/a/596310.html

相关文章:

  • ubuntu部署whisper+speaker_large+qwen【gradio界面版】
  • 阿里云通过中国信通院首批安全可信中间件评估
  • 正点原子【第四期】Linux之驱动开发学习笔记-12.1 Linux 阻塞和非阻塞 IO 实验
  • 做网站fjfzwl门户wordpress主题下载
  • Elasticsearch的用法
  • LLMChain for Chat Models in LangChain
  • 【JAVA进阶】SpringBoot启动流程深度解析:从main方法到应用就绪的完整旅程
  • 昆明建设厅培训网站创意设计文案
  • 如何为虚拟机配置多渠道、可聚合、更智能的告警通知机制?
  • 分布式容器镜像自动同步系统 设计方案
  • 智联无界,术教相融:分布式医疗示教系统重构医疗教学新生态
  • 【深度学习新浪潮】三维数字孪生核心算法深度解析
  • Clustering vs Classification|聚类vs分类
  • Java-小林coding八股文(1)
  • Selenium详细教程
  • 门户网站开发介绍上海华谊集团建设有限公司网站
  • 8. Linux-riscv内存管理35-40问
  • Vue3响应式系统中,对象新增属性、数组改索引、原始值代理的问题如何解决?
  • HTTP接口和Dubbo接口区别
  • K8S中ETCD高可用机制详解
  • jmeter发送数据到sasl加密的kafka
  • 【MATLAB代码】二维平面的TOA定位,GDOP(几何精度因子)和CRLB(克拉美罗下界)计算与输出
  • 【Hadoop】Hadoop核心基础——YARN 框架架构与运行机制(Hadoop 集群的 “资源管家”)
  • MI50运算卡使用llama.cpp的ROCm后端运行gpt-oss-20b的速度测试
  • 聊聊关于hive“中文乱码”问题
  • 一般建设网站需要多少预算酷站 网站
  • ASP.NET 实战:用 CSS 选择器打造一个可搜索、响应式的书籍管理系统
  • 消息队列防止数据丢失问题
  • Spring Cloud Bus 事件广播机制
  • 广州巨腾建网站公司郑州网站app开发