fast-whisper是使用 CTranslate2 重新實作 OpenAI 的 Whisper 模型,CTranslate2 是 Transformer 模型的快速推理引擎。
此實現速度比 openai/whisper 快 4 倍,但使用的記憶體更少,且具有相同的精度。透過 CPU 和 GPU 上的 8 位元量化,可以進一步提高效率。
作為參考,以下是使用不同實現轉錄13 分鐘音訊所需的時間和記憶體使用:
執行 | 精確 | 光束尺寸 | 時間 | 最大限度。 GPU顯存 | 最大限度。中央處理器記憶體 |
---|---|---|---|---|---|
開放/耳語 | FP16 | 5 | 4分30秒 | 11325MB | 9439MB |
更快的耳語 | FP16 | 5 | 54秒 | 4755MB | 3244MB |
更快的耳語 | 整數8 | 5 | 59秒 | 3091MB | 3117MB |
在 NVIDIA Tesla V100S 上使用 CUDA 11.7.1 執行。
執行 | 精確 | 光束尺寸 | 時間 | 最大限度。記憶 |
---|---|---|---|---|
開放/耳語 | FP32 | 5 | 10分31秒 | 3101MB |
耳語.cpp | FP32 | 5 | 17分42秒 | 1581MB |
耳語.cpp | FP16 | 5 | 12分39秒 | 873MB |
更快的耳語 | FP32 | 5 | 2分44秒 | 1675MB |
更快的耳語 | 整數8 | 5 | 2分04秒 | 995MB |
在 Intel(R) Xeon(R) Gold 6226R 上使用 8 個執行緒執行。
執行 | 精確 | 光束尺寸 | 時間 | 千兆語音WER |
---|---|---|---|---|
distil-whisper/distil-large-v2 | FP16 | 4 | - | 10.36 |
更快-蒸餾-大-v2 | FP16 | 5 | - | 10.28 |
distil-whisper/distil-medium.en | FP16 | 4 | - | 11.21 |
更快的蒸餾介質.en | FP16 | 5 | - | 11.21 |
在 NVIDIA 3090 上使用 CUDA 11.4 執行。
對於distil-whisper/distil-large-v2
,使用連結中的程式碼範例測試了 WER。對於faster-distil-whisper
,WER 透過以下設定進行測試:
from faster_whisper import WhisperModel
model_size = "distil-large-v2"
# model_size = "distil-medium.en"
# Run on GPU with FP16
model = WhisperModel ( model_size , device = "cuda" , compute_type = "float16" )
segments , info = model . transcribe ( "audio.mp3" , beam_size = 5 , language = "en" )
GPU 執行需要安裝以下 NVIDIA 函式庫:
注意:最新ctranslate2
4.4.0
ctranslate2
僅ctranslate2
CUDA 12 和 cuDNN 3.24.0
。這可以透過pip install --force-reinstall ctranslate2==4.4.0
或在requirements.txt
中指定版本來完成)。
有多種方法可以安裝上面提到的 NVIDIA 庫。建議的方式在 NVIDIA 官方文件中進行了描述,但我們也在下面建議了其他安裝方法。
注意:對於下面的所有這些方法,請記住上面有關 CUDA 版本的註釋。根據您的設置,您可能需要安裝與以下說明中列出的 CUDA 12 庫相對應的CUDA 11版本庫。
庫(cuBLAS、cuDNN)安裝在官方 NVIDIA CUDA Docker 映像: nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04
。
pip
安裝(僅限 Linux)在 Linux 上,可以使用pip
安裝這些函式庫。請注意,必須在啟動 Python 之前設定LD_LIBRARY_PATH
。
pip install nvidia-cublas-cu12 nvidia-cudnn-cu12==9. *
export 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__)) ' `
Purfview 的 Whisper-standalone-win 在單一檔案中提供了 Windows 和 Linux 所需的 NVIDIA 函式庫。解壓縮存檔並將庫放入PATH
中包含的目錄中。
該模組可以從 PyPI 安裝:
pip install faster-whisper
pip install --force-reinstall " faster-whisper @ https://github.com/SYSTRAN/faster-whisper/archive/refs/heads/master.tar.gz "
pip install --force-reinstall " faster-whisper @ https://github.com/SYSTRAN/faster-whisper/archive/a4f1cc8f11433e454c3934442b5e1a4ed5e865c3.tar.gz "
from faster_whisper import WhisperModel
model_size = "large-v3"
# Run on GPU with FP16
model = WhisperModel ( model_size , device = "cuda" , compute_type = "float16" )
# or run on GPU with INT8
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
# or run on CPU with 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 ))
警告: segments
是一個生成器,因此只有在迭代它時才會開始轉錄。可以透過將片段收集到列表或for
循環中來運行完成:
segments , _ = model . transcribe ( "audio.mp3" )
segments = list ( segments ) # The transcription will actually run here.
以下程式碼片段說明如何對範例音訊檔案執行批次轉錄。 BatchedInferencePipeline.transcribe
是WhisperModel.transcribe
的直接替代品
from faster_whisper import WhisperModel , BatchedInferencePipeline
model = WhisperModel ( "turbo" , device = "cuda" , compute_type = "float16" )
batched_model = BatchedInferencePipeline ( model = model )
segments , info = batched_model . transcribe ( "audio.mp3" , batch_size = 16 )
for segment in segments :
print ( "[%.2fs -> %.2fs] %s" % ( segment . start , segment . end , segment . text ))
Distil-Whisper 檢查點與 Faster-Whisper 套件相容。特別是,最新的 distil-large-v3 檢查點本質上是為了與 Faster-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 ))
有關 distil-large-v3 模型的更多信息,請參閱原始模型卡。
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 ))
該庫整合了 Silero VAD 模型來過濾掉沒有語音的部分音訊:
segments , _ = model . transcribe ( "audio.mp3" , vad_filter = True )
預設行為是保守的,僅刪除超過 2 秒的靜音。請參閱原始程式碼中可用的 VAD 參數和預設值。它們可以使用字典參數vad_parameters
進行自訂:
segments , _ = model . transcribe (
"audio.mp3" ,
vad_filter = True ,
vad_parameters = dict ( min_silence_duration_ms = 500 ),
)
預設啟用 Vad 過濾器以進行批次轉錄。
庫日誌記錄等級可以這樣配置:
import logging
logging . basicConfig ()
logging . getLogger ( "faster_whisper" ). setLevel ( logging . DEBUG )
在WhisperModel
類別實作中查看更多模型和轉錄選項。
以下是使用 Fast-Whisper 的開源專案的非詳盡清單。請隨意將您的項目添加到清單中!
faster-whisper
OpenAI 相容伺服器。它可以使用 Docker 輕鬆部署,與 OpenAI SDK/CLI 配合使用,支援串流和即時轉錄。.lrc
檔。當從其尺寸載入模型時,例如WhisperModel("large-v3")
,對應的 CTranslate2 模型會自動從 Hugging Face Hub 下載。
我們還提供了一個腳本來轉換與 Transformers 庫相容的任何 Whisper 模型。它們可以是原始的 OpenAI 模型,也可以是使用者微調的模型。
例如,下面的指令轉換原始的「large-v3」Whisper 模型並將權重保存在 FP16 中:
pip install transformers[torch] > =4.23
ct2-transformers-converter --model openai/whisper-large-v3 --output_dir whisper-large-v3-ct2
--copy_files tokenizer.json preprocessor_config.json --quantization float16
--model
接受集線器上的模型名稱或模型目錄的路徑。--copy_files tokenizer.json
,則稍後載入模型時會自動下載 tokenizer 設定。模型也可以從程式碼轉換。請參閱轉換 API。
model = faster_whisper . WhisperModel ( "whisper-large-v3-ct2" )
model = faster_whisper . WhisperModel ( "username/whisper-large-v3-ct2" )
如果您要將效能與其他 Whisper 實作進行比較,您應該確保使用類似的設定進行比較。尤其:
model.transcribe
使用預設的波束大小 1,但這裡我們使用預設的波束大小 5。OMP_NUM_THREADS
,可以在執行腳本時設定該變數: OMP_NUM_THREADS=4 python3 my_script.py