疯狂快速的Whisper
一个有态度的命令行界面,用于在设备上使用Whisper转录音频文件!由🤗 Transformers、Optimum和flash-attn提供支持
简而言之 - 在不到98秒内转录150分钟(2.5小时)的音频 - 使用OpenAI的Whisper Large v3。闪电般快速的转录现在成为现实!⚡️
pipx install insanely-fast-whisper==0.0.15 --force
还不相信?以下是我们在Nvidia A100 - 80GB上运行的一些基准测试 👇
优化类型 | 转录时间 (150分钟音频) |
---|---|
large-v3 (Transformers) (fp32 ) | ~31 (31分1秒) |
large-v3 (Transformers) (fp16 + batching [24] + bettertransformer ) | ~5 (5分2秒) |
large-v3 (Transformers) (fp16 + batching [24] + Flash Attention 2 ) | ~2 (1分38秒) |
distil-large-v2 (Transformers) (fp16 + batching [24] + bettertransformer ) | ~3 (3分16秒) |
distil-large-v2 (Transformers) (fp16 + batching [24] + Flash Attention 2 ) | ~1 (1分18秒) |
large-v2 (Faster Whisper) (fp16 + beam_size [1] ) | ~9.23 (9分23秒) |
large-v2 (Faster Whisper) (8-bit + beam_size [1] ) | ~8 (8分15秒) |
附:我们还在Google Colab T4 GPU实例上运行了基准测试!
附2:这个项目最初是为了展示Transformers的基准测试而开始的,但后来演变成一个轻量级的CLI供人们使用。这完全是社区驱动的。我们添加社区似乎有强烈需求的任何功能!
🆕 通过终端进行闪电般快速的转录! ⚡️
我们添加了一个CLI来实现快速转录。以下是使用方法:
使用pipx
安装insanely-fast-whisper
(pip install pipx
或brew install pipx
):
pipx install insanely-fast-whisper
⚠️ 如果您安装了python 3.11.XX,pipx
可能会错误解析版本并安装一个非常旧的insanely-fast-whisper
版本,而不会通知您(版本0.0.8
,这将无法与当前的BetterTransformers
一起使用)。在这种情况下,您可以通过向pip
传递--ignore-requires-python
来安装最新版本:
pipx install insanely-fast-whisper --force --pip-args="--ignore-requires-python"
如果您使用pip
安装,可以直接传递参数:pip install insanely-fast-whisper --ignore-requires-python
。
从计算机上的任何路径运行推理:
insanely-fast-whisper --file-name <文件名或URL>
注意:如果您在macOS上运行,还需要添加--device-id mps
标志。
🔥 您也可以通过这个CLI运行Whisper-large-v3和Flash Attention 2:
insanely-fast-whisper --file-name <文件名或URL> --flash True
🌟 您还可以直接从这个CLI运行distil-whisper:
insanely-fast-whisper --model-name distil-whisper/large-v2 --file-name <文件名或URL>
不想安装insanely-fast-whisper
?只需使用pipx run
:
pipx run insanely-fast-whisper --file-name <文件名或URL>
[!注意] 这个CLI非常有态度,只在NVIDIA GPU和Mac上工作。请确保查看默认设置和您可以调整的选项列表,以最大化您的转录吞吐量。运行
insanely-fast-whisper --help
或pipx run insanely-fast-whisper --help
可以获取所有CLI参数及其默认值。
CLI选项
insanely-fast-whisper
仓库为在各种设置下运行 Whisper 提供全面支持。请注意,截至今天(11月26日),insanely-fast-whisper
可在支持 CUDA 和 mps(mac)的设备上运行。
-h, --help 显示此帮助信息并退出
--file-name FILE_NAME
要转录的音频文件的路径或 URL。
--device-id DEVICE_ID
GPU 的设备 ID。使用 CUDA 时只需传递设备号,对于搭载 Apple Silicon 的 Mac 则传递 "mps"。(默认值:"0")
--transcript-path TRANSCRIPT_PATH
保存转录输出的路径。(默认值:output.json)
--model-name MODEL_NAME
用于执行 ASR 的预训练模型/检查点名称。(默认值:openai/whisper-large-v3)
--task {transcribe,translate}
要执行的任务:转录或翻译成其他语言。(默认值:transcribe)
--language LANGUAGE
输入音频的语言。(默认值:"None"(Whisper 自动检测语言))
--batch-size BATCH_SIZE
要计算的并行批次数。如果遇到内存不足问题,请减小此值。(默认值:24)
--flash FLASH
使用 Flash Attention 2。请阅读常见问题了解如何正确安装 FA2。(默认值:False)
--timestamp {chunk,word}
Whisper 支持分块级和词级时间戳。(默认值:chunk)
--hf-token HF_TOKEN
提供 hf.co/settings/token 以使用 Pyannote.audio 进行音频说话人分离
--diarization_model DIARIZATION_MODEL
用于执行说话人分离的预训练模型/检查点名称。(默认值:pyannote/speaker-diarization)
--num-speakers NUM_SPEAKERS
指定音频文件中确切的说话人数量。当已知对话中参与者的确切数量时很有用。必须至少为 1。不能与 --min-speakers 或 --max-speakers 一起使用。(默认值:None)
--min-speakers MIN_SPEAKERS
设置系统在说话人分离过程中应考虑的最少说话人数量。必须至少为 1。不能与 --num-speakers 一起使用。如果同时指定了 --max-speakers,则必须小于或等于该值。(默认值:None)
--max-speakers MAX_SPEAKERS
定义系统在说话人分离中应考虑的最大说话人数量。必须至少为 1。不能与 --num-speakers 一起使用。如果同时指定了 --min-speakers,则必须大于或等于该值。(默认值:None)
常见问题
如何正确安装 flash-attn 以使其与 insanely-fast-whisper
配合使用?
确保通过 pipx runpip insanely-fast-whisper install flash-attn --no-build-isolation
安装。非常感谢 @li-yifei 在这方面的帮助。
如何解决 Windows 上的 AssertionError: Torch not compiled with CUDA enabled
错误?
这个问题的根本原因尚不清楚,但您可以通过在虚拟环境中手动安装 torch 来解决,如 python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
。感谢 @pto2k 对此进行的所有调试。
如何避免 Mac 上的内存不足(OOM)异常?
mps 后端的优化程度不如 CUDA,因此更加耗费内存。通常,您可以使用 --batch-size 4
运行而不会出现任何问题(大约使用 12GB GPU VRAM)。别忘了设置 --device-id mps
。
如何在不使用命令行界面的情况下使用 Whisper?
您只需运行以下代码片段:
pip install --upgrade transformers optimum accelerate
import torch
from transformers import pipeline
from transformers.utils import is_flash_attn_2_available
pipe = pipeline(
"automatic-speech-recognition",
model="openai/whisper-large-v3", # 从 https://huggingface.co/openai/whisper-large-v3#model-details 选择检查点
torch_dtype=torch.float16,
device="cuda:0", # 或 Mac 设备使用 mps
model_kwargs={"attn_implementation": "flash_attention_2"} if is_flash_attn_2_available() else {"attn_implementation": "sdpa"},
)
outputs = pipe(
"<FILE_NAME>",
chunk_length_s=30,
batch_size=24,
return_timestamps=True,
)
outputs
致谢
- 感谢 OpenAI Whisper 团队开源了如此出色的检查点。
- 感谢 Hugging Face Transformers 团队,特别是 Arthur、Patrick、Sanchit 和 Yoach(按字母顺序排列),他们持续维护 Transformers 中的 Whisper。
- 感谢 Hugging Face Optimum 团队使 BetterTransformer API 变得如此易于使用。
- 感谢 Patrick Arminio 在构建这个命令行界面方面给予我的巨大帮助。
社区展示
- @ochen1 为命令行界面创建了一个出色的最小可行产品:https://github.com/ochen1/insanely-fast-whisper-cli(现在就试试吧!)
- @arihanv 使用 NextJS(前端)和 Modal(后端)创建了一个应用程序(Shush):https://github.com/arihanv/Shush(快去看看!)
- @kadirnar 在 transformers 的基础上创建了一个带有优化的 Python 包:https://github.com/kadirnar/whisper-plus(快去试试!)