Как стать автором
Обновить
10
0

Пользователь

Отправить сообщение

Давайте рассмотрим вообще от чего зависит время выполнения какого-либо алгоритма (модели). В данном контексте мы не рассматриваем всю систему, а только моделью В этом случае ограничивающие факторы это железо, софт и сама модель. Если стоит цель сократить время вывода не трогая модель, тогда надо либо улучшать железо, либо софт. Под софтом я имею в виду ускорение посредствам оптимизации библиотек на более низком уровне и использование графовых компиляторов. Эти методы очень эффективны, но сложны в реализации.

Оптимизация библиотек на низком уровне (cuDNN) позволяет сократить время выполнения операции на необходимых слоях, тем самым сокращая общее время вывода. В стабильных релизах библиотек преобладают стандартные методы, но они не так эффективны как методы которые предоставляет научное сообщество. Регулярно выходят статьи которые описывают разные слои и операции (свертки, пулинги нормрлизации) которые превосходят стандартные по той или иной мере.

Второе возможное решение это компиляторы графов. В данном случае из основной модели стоится граф и он оптимизируется под конкретное железо. Например, TensorRT™ — это SDK для высокопроизводительного вывода на основе глубокого обучения для видиокарт NVIDIA. Другой пример Apache TVM.

Доброго времени суток. Есть несколько решений данной проблемы, но важно понимать что ускорить модель без потерь в accuracy довольно сложно.

Популярный метод который доказывает свою эффективность на практике это Квантование (Quantization https://arxiv.org/pdf/2103.13630.pdf), поскольку сразу решает две проблемы: облегчает модель и ускоряет время вывода. Осуществляется по принципу округления значений весов на более низкий уровень. Например, использовать числа половинной точности вместо чисел двойной точности.

Prouning - термин знакомый еще с оптимизации деревьев решений. В нейронных сетях мы сокращаем число параметров посредствам удаления незначительных нейронов. Часто нужно дообучать модель чтобы получить хороший accuracy.

Методы выше можно применять без обучения, но если рассматривать возможность обучения новых моделей то Knowledge distillation стоит рассмотреть обязательно. Эта техника подразумевает использование тяжёлой модели в роли "учителя" и тренировки легкой модели как "ученика". Преимуществом данного метода является возможность использования неразмеченных данных в обучении.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность