Автор: Романенко Ярослав
Проект для курса "Эффективные модели глубокого обучения". Содержит код для ускорения инференса модели 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
- Сохранение качества
- Сравнение подходов
Все эксперименты проводились на следующей конфигурации:
- CPU: AMD EPYC 7302 16-Core Processor (ограничение на 16 потоков через torch.set_num_threads)
- RAM: DDR4 3200 MHz
- GPU (для сравнения): NVIDIA RTX 3090
Для оценки эффективности использовались две ключевые метрики:
-
WER (Word Error Rate): Метрика качества распознавания
-
$WER = \frac{S + D + I}{N}$ (ошибки / всего слов). Чем ниже, тем лучше
-
-
RTF (Real Time Factor): Метрика скорости
$RTF = \frac{\text{Inference Time}}{\text{Audio Length}}$ - RTF < 1.0 означает, что система работает быстрее реального времени (Real Time)
Были исследованы следующие подходы и их комбинации:
- Baseline: Оригинальная модель
transformers(FP32/FP16) на CPU и GPU - Quantization (Квантование):
- PyTorch Dynamic Quantization (Int8)
- TorchAO (Int8, Int4, IntX)
- Pruning (Прунинг): Magnitude Pruning (удаление 10%, 20%, 30% весов)
- Compilation:
torch.compileс различными режимами - Alternative Frameworks:
- Faster-Whisper (CTranslate2)
- ONNX Runtime
| Метод | Device | DType | WER | RTF | |
|---|---|---|---|---|---|
| Baseline | GPU | FP32 | 0.010 | 0.106 | Самый быстрый вариант |
| Baseline | CPU | FP32 | 0.010 | 1.472 | Медленнее реального времени |
Наилучший результат на 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 | Замедление |
Сам по себе прунинг дает незначительный прирост скорости, но ухудшает 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 |
| Фреймворк | 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 |