fast-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 |
더 빠른 속삭임 | 정수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분 4초 | 995MB |
Intel(R) Xeon(R) Gold 6226R에서 8개 스레드로 실행되었습니다.
구현 | 정도 | 빔 크기 | 시간 | 기가스피치 WER |
---|---|---|---|---|
distil-속삭임/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
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의 속삭임-독립형-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
파일로 번역/연마하는 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