Бенчмарк CPU-инференса
PyTorch, ONNX Runtime и OpenVINO на одном ноутбучном CPU, FP32 и INT8, с контролируемой методикой измерений.
- 3,48×ResNet-18 INT8 против FP32, OpenVINO
- 2,6 мсOpenVINO INT8, batch 1
Задача
Сравнивать фреймворки на ноутбучном CPU легко неправильно: ограничения по мощности и температуре меняют частоту прямо во время замеров. Мне нужны были цифры INT8 и FP32 для PyTorch, ONNX Runtime и OpenVINO, которым можно доверять и которые можно воспроизвести.
Что я сделал
Измерил ResNet-18 и две небольшие BERT-подобные модели для SST-2 (DistilBERT и BERT-mini) на Intel i7-12650H, используя только 6 P-ядер с фиксированной частотой 2,6 ГГц. Применил INT8 post-training quantization (статическую и динамическую) в ONNX Runtime, OpenVINO NNCF и PyTorch и провёл профилирование через torch.profiler, профилирование ONNX Runtime и OpenVINO PERF_COUNT. Область работы: инференс, квантизация и профилирование, а не обучение.
Методика
Первая, неконтролируемая попытка оказалась непригодной: у 12 из 18 повторных строк два одинаковых запуска отличались более чем на 5%. Пилот на 3000 МГц всё равно увеличил счётчики термического троттлинга в 2 из 4 строк. В итоговых запусках частота фиксирована, ядра закреплены, перед каждым повтором есть охлаждение, а строка считается стабильной, только если разброс ниже 5% и счётчики троттлинга не выросли. Ускорение указано только между стабильными строками. Изменение точности оценивается парным бутстрэпом и критерием Мак-Немара, для BERT добавлена поправка Бонферрони.
Результаты
- ResNet-18, batch 1, INT8 против FP32: PyTorch 2,34×, ONNX Runtime 2,74×, OpenVINO 3,48×. OpenVINO INT8 — 2,6 мс на изображение.
- Изменение top-1 для ResNet-18: от −0,6 до −0,9 п.п., статистически незначимо на 1000 изображениях.
- DistilBERT и BERT-mini (SST-2): INT8 быстрее в 1,10–3,12×. Различия в точности незначимы после поправки Бонферрони.
Ограничения
- Сравниваются стандартные INT8-пути каждого фреймворка, а не идентичная квантизация. Например, в BERT OpenVINO дополнительно квантизует MatMul в блоках внимания.
- Причину ускорения (например, VNNI) я не проверял; по названиям ядер это не определить.
- Один ноутбук, один CPU, устойчивая частота 2,6 ГГц, а не пиковая. Точность ResNet-18 измерена на выборке из 1000 изображений.
- Во время всех запусков работал VPN-клиент; его влияние не измерялось.
Участие ИИ
Код написан с помощью Claude Code; методология, решения и проверка результатов — мои.