Автор: Александр Гончаренко, СТО enot.ai
Ха-ха, попались? На самом деле, не существует какой-то одной вещи, которую можно применить, чтобы нейросеть ускорилась на 1000% процентов. Зато существует много мест, из-за которых ускорения может не случиться. В этой статье подсветим такие места и покажем, какие вопросы можно задать себе, чтобы не потратить много времени впустую.
В целом, пайплайн ускорения сети выглядит следующим образом:
Как правило, эти пункты сильно связаны между собой. Изменения в одном пункте могут повлечь пересмотр других. Разберём по шагам каждый из четырёх пунктов и укажем на их особенности.
Конечное устройство определяет всё, и нужно применять алгоритмы ускорения с оглядкой на него. Применили неструктурированный прунинг?
Все эти вопросы требуют грамотного осмысления особенностей устройств.
Например, нет смысла применять неструктурированный прунинг на android-телефоне, потому что на нём не поддерживаются разреженные вычисления.
Под бейслайном для ускорения мы понимаем конкретную архитектуру: resnet-50, effnet-b2, etc. Выбор бейслайна очень тесно связан с предыдущим пунктом.
Ваш фреймворк для инференса не поддерживает функцию активации swish? Тогда вы не запустите у себя EfficientNet, да и запуск более сложных сетей будет проблемой.
Более того, иногда имеет смысл взять бейслайн полегче, чтобы потратить меньше ресурсов на тюнинг после различных алгоритмов ускорения. Об этом мы рассказывали в предыдущей статье.