fast-whisper adalah implementasi ulang model Whisper OpenAI menggunakan CTranslate2, yang merupakan mesin inferensi cepat untuk model Transformer.
Implementasi ini hingga 4 kali lebih cepat dibandingkan openai/whisper untuk akurasi yang sama namun menggunakan lebih sedikit memori. Efisiensi dapat ditingkatkan lebih lanjut dengan kuantisasi 8-bit pada CPU dan GPU.
Sebagai referensi, berikut waktu dan penggunaan memori yang diperlukan untuk menyalin audio berdurasi 13 menit menggunakan implementasi berbeda:
Pelaksanaan | Presisi | Ukuran balok | Waktu | Maks. memori GPU | Maks. memori CPU |
---|---|---|---|---|---|
openai/berbisik | fp16 | 5 | 4 menit 30 detik | 11325MB | 9439MB |
bisikan lebih cepat | fp16 | 5 | 54 detik | 4755MB | 3244MB |
bisikan lebih cepat | int8 | 5 | 59-an | 3091MB | 3117MB |
Dieksekusi dengan CUDA 11.7.1 pada NVIDIA Tesla V100S.
Pelaksanaan | Presisi | Ukuran balok | Waktu | Maks. ingatan |
---|---|---|---|---|
openai/berbisik | fp32 | 5 | 10m31dtk | 3101MB |
berbisik.cpp | fp32 | 5 | 17m42dtk | 1581MB |
berbisik.cpp | fp16 | 5 | 12 menit 39 detik | 873MB |
bisikan lebih cepat | fp32 | 5 | 2m44dtk | 1675MB |
bisikan lebih cepat | int8 | 5 | 2 menit 04 detik | 995MB |
Dieksekusi dengan 8 thread pada Intel(R) Xeon(R) Gold 6226R.
Pelaksanaan | Presisi | Ukuran balok | Waktu | Gigaspeech WS |
---|---|---|---|---|
suling-bisikan/distil-besar-v2 | fp16 | 4 | - | 10.36 |
lebih cepat-distilasi-besar-v2 | fp16 | 5 | - | 10.28 |
suling-bisikan/distil-medium.en | fp16 | 4 | - | 11.21 |
lebih cepat-distilasi-medium.en | fp16 | 5 | - | 11.21 |
Dieksekusi dengan CUDA 11.4 pada NVIDIA 3090.
Untuk distil-whisper/distil-large-v2
, WER diuji dengan contoh kode dari tautan. untuk faster-distil-whisper
, WER diuji dengan pengaturan:
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" )
Eksekusi GPU memerlukan instalasi pustaka NVIDIA berikut:
Catatan : Versi terbaru ctranslate2
hanya mendukung CUDA 12 dan cuDNN 9. Untuk CUDA 11 dan cuDNN 8, solusi saat ini adalah menurunkan versi ctranslate2
ke 3.24.0
, untuk CUDA 12 dan cuDNN 8, turunkan ke versi 4.4.0
dari ctranslate2
, (Ini dapat dilakukan dengan pip install --force-reinstall ctranslate2==4.4.0
atau menentukan versi dalam requirements.txt
).
Ada beberapa cara untuk menginstal perpustakaan NVIDIA yang disebutkan di atas. Cara yang disarankan dijelaskan dalam dokumentasi resmi NVIDIA, tetapi kami juga menyarankan metode instalasi lain di bawah.
Catatan: Untuk semua metode di bawah ini, ingatlah catatan di atas mengenai versi CUDA. Tergantung pada pengaturan Anda, Anda mungkin perlu menginstal pustaka versi CUDA 11 yang sesuai dengan pustaka CUDA 12 yang tercantum dalam petunjuk di bawah.
Pustaka (cuBLAS, cuDNN) dipasang di image Docker NVIDIA CUDA resmi ini: nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04
.
pip
(khusus Linux) Di Linux, perpustakaan ini dapat diinstal dengan pip
. Perhatikan bahwa LD_LIBRARY_PATH
harus disetel sebelum meluncurkan Python.
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__)) ' `
Whisper-standalone-win Purfview menyediakan perpustakaan NVIDIA yang diperlukan untuk Windows & Linux dalam satu arsip. Dekompresi arsip dan tempatkan perpustakaan di direktori yang termasuk dalam PATH
.
Modul ini dapat diinstal dari 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 ))
Peringatan: segments
adalah generator sehingga transkripsi hanya dimulai ketika Anda mengulanginya. Transkripsi dapat dijalankan sampai selesai dengan mengumpulkan segmen dalam daftar atau perulangan for
:
segments , _ = model . transcribe ( "audio.mp3" )
segments = list ( segments ) # The transcription will actually run here.
Cuplikan kode berikut mengilustrasikan cara menjalankan transkripsi batch pada contoh file audio. BatchedInferencePipeline.transcribe
adalah pengganti 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 ))
Pos pemeriksaan Distil-Whisper kompatibel dengan paket Faster-Whisper. Secara khusus, pos pemeriksaan distil-large-v3 terbaru secara intrinsik dirancang untuk bekerja dengan algoritma transkripsi Faster-Whisper. Cuplikan kode berikut menunjukkan cara menjalankan inferensi dengan distil-large-v3 pada file audio tertentu:
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 ))
Untuk informasi lebih lanjut tentang model distil-large-v3, lihat kartu model asli.
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 ))
Pustaka mengintegrasikan model Silero VAD untuk memfilter bagian audio tanpa ucapan:
segments , _ = model . transcribe ( "audio.mp3" , vad_filter = True )
Perilaku defaultnya adalah konservatif dan hanya menghilangkan keheningan yang berdurasi lebih dari 2 detik. Lihat parameter VAD yang tersedia dan nilai default di kode sumber. Mereka dapat dikustomisasi dengan argumen kamus vad_parameters
:
segments , _ = model . transcribe (
"audio.mp3" ,
vad_filter = True ,
vad_parameters = dict ( min_silence_duration_ms = 500 ),
)
Filter Vad diaktifkan secara default untuk transkripsi batch.
Tingkat logging perpustakaan dapat dikonfigurasi seperti ini:
import logging
logging . basicConfig ()
logging . getLogger ( "faster_whisper" ). setLevel ( logging . DEBUG )
Lihat opsi model dan transkripsi lainnya di implementasi kelas WhisperModel
.
Berikut adalah daftar tidak lengkap proyek sumber terbuka yang menggunakan fast-whisper. Jangan ragu untuk menambahkan proyek Anda ke daftar!
faster-whisper
. Ini mudah diterapkan dengan Docker, berfungsi dengan OpenAI SDK/CLI, mendukung streaming, dan transkripsi langsung..lrc
dalam bahasa yang diinginkan menggunakan OpenAI-GPT. Saat memuat model dari ukurannya seperti WhisperModel("large-v3")
, model CTranslate2 yang sesuai secara otomatis diunduh dari Hugging Face Hub.
Kami juga menyediakan skrip untuk mengonversi model Whisper apa pun yang kompatibel dengan perpustakaan Transformers. Ini bisa berupa model OpenAI asli atau model yang disempurnakan oleh pengguna.
Misalnya perintah di bawah ini mengubah model Whisper "besar-v3" asli dan menyimpan bobot di 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
menerima nama model di Hub atau jalur ke direktori model.--copy_files tokenizer.json
tidak digunakan, konfigurasi tokenizer secara otomatis diunduh saat model dimuat nanti.Model juga dapat dikonversi dari kode. Lihat API konversi.
model = faster_whisper . WhisperModel ( "whisper-large-v3-ct2" )
model = faster_whisper . WhisperModel ( "username/whisper-large-v3-ct2" )
Jika Anda membandingkan kinerja dengan implementasi Whisper lainnya, Anda harus memastikan untuk menjalankan perbandingan dengan pengaturan serupa. Secara khusus:
model.transcribe
menggunakan ukuran beam default 1 tetapi di sini kami menggunakan ukuran beam default 5.OMP_NUM_THREADS
, yang dapat disetel saat menjalankan skrip Anda: OMP_NUM_THREADS=4 python3 my_script.py