WhisperS2T ⚡
支持多种推理引擎的优化Whisper模型语音转文字流水线!
WhisperS2T是一个优化的闪电般快速的开源语音转文字(ASR)流水线。它专为whisper模型定制,以提供更快的whisper转录。它的设计速度比其他实现更快,比WhisperX快2.3倍,比使用FlashAttention 2的HuggingFace Pipeline(Insanely Fast Whisper)快3倍。此外,它还包含几个启发式方法来提高转录准确性。
Whisper是由OpenAI开发的通用语音识别模型,而不是我开发的。它在大量多样化的音频数据集上进行训练,是一个可以执行多语言语音识别、语音翻译和语言识别的多任务模型。
发布说明
- [2024年2月25日]:添加了预构建的docker镜像和转录导出器,支持
txt, json, tsv, srt, vtt
格式。(查看完整发布说明)
快速入门
查看这里提供的Google Colab笔记本:notebooks
未来路线图
- 可直接使用的docker容器。
- WhisperS2T-Server:优化的端到端部署就绪服务器代码库。
- 深入的文档,使用github pages托管。
- 探索集成Meta的SeamlessM4T模型的可能性。
- 添加更多数据集进行WER基准测试。
基准测试和技术报告
敬请期待将WhisperS2T与其他whisper流水线进行比较的技术报告。同时,查看在A30 GPU上的一些快速基准测试。请参见scripts/
目录中我使用的基准测试脚本。
注意:我进行所有基准测试时将without_timestamps
参数设置为True
。将此参数调整为False
可能会提高HuggingFace流水线的词错误率(WER),但会增加推理时间。值得注意的是,推理速度的提升仅通过更优的流水线设计实现,没有对后端推理引擎(如CTranslate2、FlashAttention2等)进行任何特定优化。例如,WhisperS2T(使用FlashAttention2)相比于HuggingFace流水线(也使用FlashAttention2)展示了明显更快的推理速度,尽管两者都利用了相同的推理引擎—带有FlashAttention2的HuggingFace whisper模型。此外,WER也存在明显差异。
特性
- 🔄 多后端支持: 支持多种Whisper模型后端,包括原始OpenAI模型、带FlashAttention2的HuggingFace模型和CTranslate2模型。
- 🎙️ 轻松集成自定义VAD模型: 无缝添加自定义语音活动检测(VAD)模型,以增强语音识别的控制和准确性。
- 🎧 轻松处理大小音频文件: 智能批处理来自各种文件的较小语音片段,确保最佳性能。
- ⏳ 简化大型音频文件的处理: 在转录分段批次时异步在后台加载大型音频文件,显著减少加载时间。
- 🌐 支持多语言/多任务解码的批处理: 在单个批次中解码多种语言或同时执行转录和翻译,提高灵活性和转录时间。(CTranslate2后端支持最佳)
- 🧠 减少幻觉: 优化参数和启发式方法,减少重复文本输出或幻觉。(某些启发式方法仅适用于CTranslate2后端)
- ⏱️ 动态时间长度支持(实验性): 处理给定输入批次中可变长度的输入,而不是固定的30秒,在转录过程中提供灵活性并节省计算时间。(仅适用于CTranslate2后端)
入门指南
从Docker容器
预构建容器
docker pull shashikg/whisper_s2t:dev-trtllm
Dockerhub仓库: https://hub.docker.com/r/shashikg/whisper_s2t/tags
构建自己的容器
从main
分支构建。
docker build --build-arg WHISPER_S2T_VER=main --build-arg SKIP_TENSORRT_LLM=1 -t whisper_s2t:main .
从特定发布版本v1.3.0
构建。
git checkout v1.3.0
docker build --build-arg WHISPER_S2T_VER=v1.3.0 --build-arg SKIP_TENSORRT_LLM=1 -t whisper_s2t:1.3.0 .
要构建支持TensorRT-LLM的容器:
docker build --build-arg WHISPER_S2T_VER=main -t whisper_s2t:main-trtllm .
本地安装
安装重采样和加载音频文件所需的音频包。
对于Ubuntu
apt-get install -y libsndfile1 ffmpeg
对于MAC
brew install ffmpeg
对于Ubuntu/MAC/Windows/任何其他使用Conda的Python环境
conda install conda-forge::ffmpeg
要安装或更新到WhisperS2T的最新发布版本,请使用以下命令:
pip install -U whisper-s2t
或者从此仓库的最新提交安装:
pip install -U git+https://github.com/shashikg/WhisperS2T.git
注意: 如果您的CUDNN和CUBLAS安装是使用pip wheel完成的,您可以运行以下命令将CUDNN路径添加到LD_LIBRARY_PATH
:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:`python3 -c 'import os; import nvidia.cublas.lib; import nvidia.cudnn.lib; print(os.path.dirname(nvidia.cublas.lib.__file__) + ":" + os.path.dirname(nvidia.cudnn.lib.__file__))'`
使用TensorRT-LLM后端
对于TensorRT-LLM后端,您需要安装TensorRT和TensorRT-LLM。
bash <repo_dir>/install_tensorrt.sh
对于大多数debian系统,给定的bash脚本应该可以工作,如果不行/其他系统,请按照这里的官方TensorRT-LLM说明进行操作。
使用
CTranslate2后端
import whisper_s2t
model = whisper_s2t.load_model(model_identifier="large-v2", backend='CTranslate2')
files = ['data/KINCAID46/audio/1.wav']
lang_codes = ['en']
tasks = ['transcribe']
initial_prompts = [None]
out = model.transcribe_with_vad(files,
lang_codes=lang_codes,
tasks=tasks,
initial_prompts=initial_prompts,
batch_size=32)
print(out[0][0]) # 打印第一个文件的第一个话语
"""
[控制台输出]
{'text': "让我们请Phil Mackie进来,他现在在宫殿。我们看到Teresa和Philip May。Philip,你能看到他是如何从直升机上转移的吗?看起来就像你说的,那辆'野兽'。它的前灯亮着,因为太阳现在开始落山了,肯定正在云层后面下沉。它在大道上大约四分之一英里远的地方",
'avg_logprob': -0.25426941679184695,
'no_speech_prob': 8.147954940795898e-05,
'start_time': 0.0,
'end_time': 24.8}
"""
要使用词对齐功能,请使用以下方式加载模型:
model = whisper_s2t.load_model("large-v2", asr_options={'word_timestamps': True})
TensorRT-LLM后端
import whisper_s2t
model = whisper_s2t.load_model(model_identifier="large-v2", backend='TensorRT-LLM')
files = ['data/KINCAID46/audio/1.wav']
lang_codes = ['en']
tasks = ['transcribe']
initial_prompts = [None]
out = model.transcribe_with_vad(files,
lang_codes=lang_codes,
tasks=tasks,
initial_prompts=initial_prompts,
batch_size=24)
print(out[0][0]) # 打印第一个文件的第一个话语
"""
[控制台输出]
{'text': "让我们请Phil Mackie进来,他现在在宫殿。我们看到Teresa和Philip May。Philip,你能看到他是如何从直升机上转移的吗?看起来就像你说的,那辆'野兽'。它的前灯亮着,因为太阳现在开始落山了,肯定正在云层后面下沉。它在大道上大约四分之一英里远的地方",
'start_time': 0.0,
'end_time': 24.8}
"""
查看这个文档了解更多细节。
注意: 在第一次运行时,模型可能会显示较慢的推理速度。经过1-2次运行后,它将会有更好的推理速度。这是由于VAD模型的JIT跟踪导致的。
致谢
- OpenAI Whisper团队:感谢OpenAI Whisper团队开源whisper模型。
- HuggingFace团队:感谢HuggingFace团队在transformers库中集成FlashAttention2和Whisper模型。
- CTranslate2团队:感谢CTranslate2团队为Transformers架构提供更快的推理引擎。
- NVIDIA NeMo团队:感谢NVIDIA NeMo团队贡献在此管道中使用的开源VAD模型。
- NVIDIA TensorRT-LLM团队:感谢NVIDIA TensorRT-LLM团队的出色LLM推理优化。
许可证
本项目采用MIT许可证 - 详见LICENSE文件。