fast-whisper — это повторная реализация модели OpenAI Whisper с использованием CTranslate2, который представляет собой быстрый механизм вывода для моделей Transformer.
Эта реализация до 4 раз быстрее, чем openai/whisper, при той же точности, но использует меньше памяти. Эффективность можно еще больше повысить за счет 8-битного квантования как на процессоре, так и на графическом процессоре.
Для справки, вот время и использование памяти, необходимые для расшифровки 13 минут аудио с использованием различных реализаций:
Выполнение | Точность | Размер луча | Время | Макс. Память графического процессора | Макс. Память процессора |
---|---|---|---|---|---|
опенай/шепот | фп16 | 5 | 4 минуты 30 секунд | 11325 МБ | 9439 МБ |
более быстрый шепот | фп16 | 5 | 54 с | 4755 МБ | 3244 МБ |
более быстрый шепот | int8 | 5 | 59 с | 3091 МБ | 3117 МБ |
Выполнено с помощью CUDA 11.7.1 на NVIDIA Tesla V100S.
Выполнение | Точность | Размер луча | Время | Макс. память |
---|---|---|---|---|
опенай/шепот | фп32 | 5 | 10 минут 31 секунда | 3101 МБ |
шепот.cpp | фп32 | 5 | 17м42с | 1581 МБ |
шепот.cpp | фп16 | 5 | 12 минут 39 секунд | 873 МБ |
более быстрый шепот | фп32 | 5 | 2 минуты 44 секунды | 1675 МБ |
более быстрый шепот | int8 | 5 | 2м04с | 995 МБ |
Выполнено с 8 потоками на процессоре Intel(R) Xeon(R) Gold 6226R.
Выполнение | Точность | Размер луча | Время | Гигаспич WER |
---|---|---|---|---|
дистилляция-шепот/дистилл-большой-v2 | фп16 | 4 | - | 10.36 |
более быстрая дистилляция-большая-v2 | фп16 | 5 | - | 10.28 |
distil-whisper/distil-medium.en | фп16 | 4 | - | 11.21 |
fast-distil-medium.en | фп16 | 5 | - | 11.21 |
Выполнено с помощью CUDA 11.4 на NVIDIA 3090.
Для 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" )
Для выполнения графического процессора необходимо установить следующие библиотеки 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
или указав версию в файле requirements.txt
).
Существует несколько способов установки упомянутых выше библиотек NVIDIA. Рекомендуемый способ описан в официальной документации NVIDIA, но ниже мы также предлагаем другие способы установки.
Примечание. Для всех этих методов, описанных ниже, помните приведенное выше примечание относительно версий CUDA. В зависимости от вашей настройки вам может потребоваться установить версии библиотек CUDA 11 , соответствующие библиотекам CUDA 12, перечисленным в инструкциях ниже.
Библиотеки (cuBLAS, cuDNN) установлены в официальных образах NVIDIA CUDA Docker: nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04
.
pip
(только Linux) В Linux эти библиотеки можно установить с помощью pip
. Обратите внимание, что LD_LIBRARY_PATH
необходимо установить перед запуском 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__)) ' `
Автономное решение Purfview предоставляет необходимые библиотеки NVIDIA для Windows и Linux в одном архиве. Распакуйте архив и поместите библиотеки в каталог, указанный в 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
. Его легко развернуть с помощью Docker, он работает с OpenAI SDK/CLI, поддерживает потоковую передачу и транскрипцию в реальном времени..lrc
на нужном языке с помощью OpenAI-GPT. При загрузке модели по ее размеру, например WhisperModel("large-v3")
, соответствующая модель CTranslate2 автоматически загружается из Hugging Face Hub.
Мы также предоставляем скрипт для преобразования любых моделей Whisper, совместимых с библиотекой Transformers. Это могут быть оригинальные модели OpenAI или модели, настроенные пользователем.
Например, команда ниже преобразует исходную модель Whisper «large-v3» и сохраняет веса в 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