Faster-Whisper は、Transformer モデル用の高速推論エンジンである CTranslate2 を使用した OpenAI の Whisper モデルの再実装です。
この実装は、openai/whisper よりも同じ精度でメモリ使用量を減らしながら最大 4 倍高速です。 CPU と GPU の両方で 8 ビット量子化を使用すると、効率がさらに向上します。
参考として、さまざまな実装を使用して13 分間の音声を書き写すのに必要な時間とメモリ使用量を次に示します。
実装 | 精度 | ビームサイズ | 時間 | 最大。 GPUメモリ | 最大。 CPUメモリ |
---|---|---|---|---|---|
オープンナイ/ささやき | FP16 | 5 | 4分30秒 | 11325MB | 9439MB |
より早いささやき声 | FP16 | 5 | 54秒 | 4755MB | 3244MB |
より早いささやき声 | int8 | 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 |
より早いささやき声 | int8 | 5 | 2分04秒 | 995MB |
Intel(R) Xeon(R) Gold 6226R 上の 8 スレッドで実行。
実装 | 精度 | ビームサイズ | 時間 | ギガスピーチ WER |
---|---|---|---|---|
ディスティルウィスパー/ディスティルラージ-v2 | FP16 | 4 | - | 10.36 |
高速蒸留大規模 v2 | FP16 | 5 | - | 10.28 |
distil-wisper/distil-medium.ja | FP16 | 4 | - | 11.21 |
高速蒸留-medium.ja | 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
の最新バージョンは CUDA 12 と cuDNN 9 のみをサポートします。CUDA 11 と cuDNN 8 の場合、現在の回避策はctranslate2
の3.24.0
バージョンにダウングレードし、CUDA 12 と cuDNN 8 の場合は4.4.0
バージョンにダウングレードします。 ctranslate2
の (これはpip install --force-reinstall ctranslate2==4.4.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
クラス実装のその他のモデルと転写オプションを参照してください。
以下は、より高速なウィスパーを使用するオープンソース プロジェクトの完全なリストではありません。あなたのプロジェクトをリストに自由に追加してください。
faster-whisper
を使用する OpenAI 互換サーバーです。 Docker で簡単にデプロイ可能で、OpenAI SDK/CLI と連携し、ストリーミングとライブ文字起こしをサポートします。.lrc
ファイルに翻訳/洗練する Python ライブラリです。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
が使用されていない場合、後でモデルが読み込まれるときにトークナイザー構成が自動的にダウンロードされます。モデルはコードから変換することもできます。変換 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