使用 CTranslate2 实现 Faster Whisper 的加速转录
近年来,语音识别技术得到了快速发展。OpenAI 的 Whisper 模型作为其中的佼佼者,以其高精度和强大的性能广受欢迎。然而,其较长的推理时间和高内存消耗也成为了限制其应用的一大因素。为了解决这些问题,社区开发了 Faster Whisper,这是一个基于 CTranslate2 的 Whisper 模型重实现,旨在提供更快的转录速度和更低的内存消耗。
什么是 Faster Whisper?
Faster Whisper 是对 OpenAI Whisper 模型的重新实现,使用 CTranslate2 这一高效的 Transformer 模型推理引擎。与原版模型相比,Faster Whisper 在同等精度下,推理速度提高了最多四倍,同时内存消耗显著减少。通过在 CPU 和 GPU 上进行 8 位量化,其效率可以进一步提升。
基准测试对比
为了更直观地了解 Faster Whisper 的性能优势,我们来看一组基准测试数据。这些数据对比了不同实现方式在处理 13 分钟音频时的时间和内存使用情况。
Large-v2 模型在 GPU 上的性能对比
实现方式 精度 Beam size 时间 最大 GPU 内存 最大 CPU 内存 openai/whisper fp16 5 4m30s 11325MB 9439MB faster-whisper fp16 5 54s 4755MB 3244MB faster-whisper int8 5 59s 3091MB 3117MBSmall 模型在 CPU 上的性能对比
实现方式 精度 Beam size 时间 最大内存 openai/whisper fp32 5 10m31s 3101MB whisper.cpp fp32 5 17m42s 1581MB whisper.cpp fp16 5 12m39s 873MB faster-whisper fp32 5 2m44s 1675MB faster-whisper int8 5 2m04s 995MB安装和使用
安装步骤
Faster Whisper 可以通过 PyPI 直接安装:
pip install faster-whisper
注意:与 openai-whisper 不同,Faster Whisper 不需要在系统上安装 FFmpeg。音频解码使用的是 PyAV,这个库将 FFmpeg 库打包在其内。
GPU 环境配置
如果希望在 GPU 上运行,需要安装以下 NVIDIA 库:
cuBLAS for CUDA 12 cuDNN 8 for CUDA 12最新版本的 CTranslate2 仅支持 CUDA 12。如果需要在 CUDA 11 上运行,可以降级到 CTranslate2 的 3.24.0 版本:
pip install --force-reinstall ctranslate2==3.24.0
使用示例
下面是一个使用 Faster Whisper 进行音频转录的示例代码:
from faster_whisper import WhisperModel
model_size = "large-v3"
# 在 GPU 上运行,使用 FP16 精度
model = WhisperModel(model_size, device="cuda", compute_type="float16")
# 或在 GPU 上运行,使用 INT8 精度
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
# 或在 CPU 上运行,使用 INT8 精度
# model = WhisperModel(model_size, device="cpu", compute_type="int8")
segments, info = model.transcribe("audio.mp3", beam_size=5)
print("Detected language '%s' with probability %f" % (info.language, info.language_probability))
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
扩展功能
支持 Distil-Whisper
Distil-Whisper 是 Faster Whisper 包兼容的简化版 Whisper 模型。以下示例展示了如何使用 distil-large-v3 模型进行推理:
from faster_whisper import WhisperModel
model_size = "distil-large-v3"
model = WhisperModel(model_size, device="cuda", compute_type="float16")
segments, info = model.transcribe("audio.mp3", beam_size=5, language="en", condition_on_previous_text=False)
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
词级时间戳
可以启用词级时间戳以获取更精确的转录结果:
segments, _ = model.transcribe("audio.mp3", word_timestamps=True)
for segment in segments:
for word in segment.words:
print("[%.2fs -> %.2fs] %s" % (word.start, word.end, word.word))
VAD 过滤
通过集成 Silero VAD 模型,可以过滤掉音频中无语音的部分:
segments, _ = model.transcribe("audio.mp3", vad_filter=True)
结论
Faster Whisper 提供了一种高效的解决方案,使得 Whisper 模型在保证精度的前提下,显著提升了推理速度并降低了内存消耗。无论是在学术研究还是工业应用中,这一改进都具有重要的实际意义。
通过安装和配置 Faster Whisper,研究人员和开发者可以更加灵活和高效地处理大量音频数据,从而推动语音识别技术的进一步发展。
总结
**文章总结**:本文以“**使用 CTranslate2 实现 Faster Whisper 的加速转录**”为主题,介绍了通过 Faster Whisper 这一基于 CTranslate2 的 Whisper 模型重新实现,来加速语音识别任务的技术进展。Faster Whisper 能够显著改善 OpenAI Whisper 模型的推理速度和内存消耗,从而提升其在实际应用中的效率和灵活性。
**关键要点包括**:
1. **问题背景**:OpenAI Whisper 模型尽管具有高精度和强大性能,但其推理时间长、内存消耗高,限制了广泛应用。
2. **Faster Whisper 简介**:Faster Whisper 利用 CTranslate2 技术,以相同的精度提供了最多四倍的推理速度提升,显著减少了内存消耗。通过 8 位量化进一步提升了 CPU 和 GPU 上的效率。
3. **基准测试对比**:数据表明,在 GPU 上使用 Large-v2 模型时,Faster Whisper 相比于原版模型在 fp16 精度下的推理时间缩短至 54 秒,GPU 内存消耗减半;在 int8 量化后更是进一步降低至 59 秒与 3091 MB。CPU 上的 Small 模型测试也展示了类似的大幅改进。
4. **安装与使用**:Faster Whisper 可以通过 PyPI 快速安装,无需额外 FFmpeg 安装,且支持灵活的设备选择和量化精度配置。
5. **扩展功能**:支持 Distil-Whisper 简化模型,提供了词级时间戳和 VAD (语音活动检测) 过滤等增强功能,满足多样化的应用需求。
**结论**:Faster Whisper 为使用 Whisper 模型的研究人员和开发者提供了更高效的工具,推动了语音识别技术在学术和工业领域的发展。通过安装和配置 Faster Whisper,可以显著提高处理大规模音频数据的能力和效率。