Skip to content

fropych/edl-proj

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Оптимизация Whisper: Real-Time обработка на CPU

Автор: Романенко Ярослав

Проект для курса "Эффективные модели глубокого обучения". Содержит код для ускорения инференса модели openai/whisper-large-v3 на CPU

Запуск

  • Весь код находится в main.ipynb
  • Для установки зависимостей использовался uv
  • Для эксперимента с onnx нужно конвертировать модель
optimum-cli export onnx --model openai/whisper-large-v3-turbo whisper-turbo/ --task automatic-speech-recognition-with-past --opset 18

Цель проекта

  • Real Time обработка на CPU: Достижение показателя RTF (Real Time Factor) < 1.0
  • Сохранение качества
  • Сравнение подходов

Hardware

Все эксперименты проводились на следующей конфигурации:

  • CPU: AMD EPYC 7302 16-Core Processor (ограничение на 16 потоков через torch.set_num_threads)
  • RAM: DDR4 3200 MHz
  • GPU (для сравнения): NVIDIA RTX 3090

Метрики

Для оценки эффективности использовались две ключевые метрики:

  1. WER (Word Error Rate): Метрика качества распознавания
    • $WER = \frac{S + D + I}{N}$ (ошибки / всего слов). Чем ниже, тем лучше
  2. RTF (Real Time Factor): Метрика скорости
    • $RTF = \frac{\text{Inference Time}}{\text{Audio Length}}$
    • RTF < 1.0 означает, что система работает быстрее реального времени (Real Time)

Методология

Были исследованы следующие подходы и их комбинации:

  1. Baseline: Оригинальная модель transformers (FP32/FP16) на CPU и GPU
  2. Quantization (Квантование):
    • PyTorch Dynamic Quantization (Int8)
    • TorchAO (Int8, Int4, IntX)
  3. Pruning (Прунинг): Magnitude Pruning (удаление 10%, 20%, 30% весов)
  4. Compilation: torch.compile с различными режимами
  5. Alternative Frameworks:
    • Faster-Whisper (CTranslate2)
    • ONNX Runtime

Результаты экспериментов

1. Baseline

Метод Device DType WER RTF
Baseline GPU FP32 0.010 0.106 Самый быстрый вариант
Baseline CPU FP32 0.010 1.472 Медленнее реального времени

2. Quantization

Наилучший результат на CPU показало динамическое квантование PyTorch. Библиотека torchao в данной конфигурации показала значительное замедление

Метод WER RTF
Dynamic Quant (Int8) 0.013 0.877 Real Time
TorchAO Int8 Only 0.018 3.373 Замедление
TorchAO Dynamic Int4 0.018 4.416 Замедление

3. Pruning и Компиляция

Сам по себе прунинг дает незначительный прирост скорости, но ухудшает WER. torch.compile на CPU для данной архитектуры не дал ощутимого прироста

Метод WER RTF
Magnitude Pruning 0.1 0.013 1.429
Magnitude Pruning 0.2 0.013 1.462
Torch Compile (FP32) 0.010 1.466

4. Альтернативные фреймворки

Фреймворк DType WER RTF
CTranslate2 (Faster-Whisper) Int8 0.021 1.386
ONNX Runtime fp32 0.005 2.235

Итоговый лидер: Комбинированный подход

Наилучший баланс скорости и качества был достигнут при комбинации методов

Эксперимент WER RTF
Dynamic Quant + Pruning 0.2 + Compile 0.021 0.874

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors