Implementação otimizada do reconhecimento de voz Whisper baseada em CTranslate2, 4 vezes mais rápida e com menor consumo de memória do que a original
Detalhes do Projeto Faster-Whisper
Visão Geral do Projeto
Faster-Whisper é uma reimplementação do modelo OpenAI Whisper, utilizando CTranslate2 como um mecanismo de inferência rápido. Em comparação com o openai/whisper original, ele oferece uma velocidade até 4 vezes maior, mantendo a mesma precisão, e com menor consumo de memória. Através da tecnologia de quantização de 8 bits, a eficiência pode ser ainda mais aprimorada em CPUs e GPUs.
Recursos Principais
🚀 Vantagens de Desempenho
- Aumento de Velocidade: Até 4 vezes mais rápido que o Whisper original
- Otimização de Memória: Menor consumo de memória
- Suporte a Quantização: Suporta quantização de 8 bits para maior desempenho
- Processamento em Lote: Suporta transcrição em lote para aumentar o rendimento
🛠️ Características Técnicas
- Baseado no mecanismo de inferência CTranslate2
- Suporta execução em GPU e CPU
- Compatível com os modelos Whisper originais
- Suporta múltiplos modos de precisão (FP16, FP32, INT8)
- Decodificação de áudio integrada (não requer FFmpeg)
Comparação de Desempenho
Teste de Referência de GPU (NVIDIA RTX 3070 Ti 8GB)
Comparação de desempenho para transcrever 13 minutos de áudio:
Implementação | Precisão | Beam Size | Tempo | Uso de VRAM |
---|---|---|---|---|
openai/whisper | fp16 | 5 | 2m23s | 4708MB |
whisper.cpp (Flash Attention) | fp16 | 5 | 1m05s | 4127MB |
faster-whisper | fp16 | 5 | 1m47s | 3244MB |
faster-whisper | int8 | 5 | 1m33s | 2926MB |
Teste de Referência de CPU (Intel Core i7-12700K)
Implementação | Precisão | Beam Size | Tempo | Uso de Memória |
---|---|---|---|---|
openai/whisper | fp32 | 5 | 6m58s | 2335MB |
whisper.cpp | fp32 | 5 | 2m05s | 1049MB |
faster-whisper | fp32 | 5 | 2m37s | 2257MB |
faster-whisper | int8 | 5 | 1m42s | 1477MB |
Instruções de Instalação
Requisitos do Sistema
- Python 3.9 ou superior
- A execução em GPU requer suporte à biblioteca NVIDIA CUDA
Instalação Básica
pip install faster-whisper
Instalação com Suporte a GPU
É necessário instalar as bibliotecas NVIDIA:
- CUDA 12.x
- cuDNN 9.x
- cuBLAS
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__))'`
Método Docker
# Usar a imagem oficial NVIDIA CUDA
docker run --gpus all -it nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04
Guia de Uso
Transcrições Básicas
from faster_whisper import WhisperModel
model_size = "large-v3"
# Execução em GPU (FP16)
model = WhisperModel(model_size, device="cuda", compute_type="float16")
# Ou execução em GPU (INT8)
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
# Ou execução em CPU (INT8)
# model = WhisperModel(model_size, device="cpu", compute_type="int8")
segments, info = model.transcribe("audio.mp3", beam_size=5)
print("Idioma detectado '%s', probabilidade %f" % (info.language, info.language_probability))
for segment in segments:
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
Transcrições em Lote
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))
Marcas de Tempo Nível Palavra
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))
Detecção de Atividade de Voz (VAD)
# Habilitar filtro VAD
segments, _ = model.transcribe("audio.mp3", vad_filter=True)
# Parâmetros VAD personalizados
segments, _ = model.transcribe(
"audio.mp3",
vad_filter=True,
vad_parameters=dict(min_silence_duration_ms=500),
)
Suporte a Distil-Whisper
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))
Conversão de Modelo
A partir de Transformers
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
Carregando Modelos Personalizados
# Carregamento de diretório local
model = WhisperModel("whisper-large-v3-ct2")
# Carregamento do Hugging Face Hub
model = WhisperModel("username/whisper-large-v3-ct2")
Cenários de Aplicação
- Voz para Texto
- Transcrições em Tempo Real
- Geração de Legendas
- Tradução Multilíngue
- Análise de Voz
- Indexação de Conteúdo de Áudio
Configuração e Otimização
Configuração de Log
import logging
logging.basicConfig()
logging.getLogger("faster_whisper").setLevel(logging.DEBUG)
Sugestões de Otimização de Desempenho
- Use aceleração de GPU para obter o melhor desempenho
- Escolha o modo de precisão apropriado de acordo com o hardware
- Processamento em lote para aumentar o rendimento
- Habilite o filtro VAD para reduzir o tempo de processamento
- Defina adequadamente o beam size e o batch size
Configuração de Threads
# Definir o número de threads da CPU
OMP_NUM_THREADS=4 python3 my_script.py
Arquitetura Técnica
Componentes Principais
- CTranslate2: Mecanismo de inferência rápido
- PyAV: Biblioteca de decodificação de áudio
- Silero VAD: Detecção de Atividade de Voz
- Transformers: Suporte à conversão de modelos
Modelos Suportados
- Série OpenAI Whisper (tiny, base, small, medium, large-v1/v2/v3)
- Série Distil-Whisper
- Modelos personalizados ajustados
Comunidade e Suporte
- Repositório GitHub: https://github.com/SYSTRAN/faster-whisper
- Pacote PyPI: https://pypi.org/project/faster-whisper/
- Modelos Hugging Face: https://huggingface.co/Systran
Resumo
Faster-Whisper é uma solução de reconhecimento de voz de alto desempenho que alcança um aumento significativo de velocidade através da otimização do mecanismo de inferência, mantendo a mesma precisão do Whisper original. Seus recursos ricos, bom suporte de ecossistema e API fácil de usar o tornam a escolha ideal para aplicações de processamento de voz. Tanto desenvolvedores quanto pesquisadores podem usar Faster-Whisper para construir rapidamente aplicações eficientes de processamento de voz.