Что такое квантизация нейросетей?
Квантизация – это метод сжатия весов нейронной сети, который позволяет хранить веса моделей в более компактном виде. Этот подход необходим для уменьшения требований алгоритмов к вычислительным ресурсам и сжатия нейросетей так, чтобы их можно было запускать на менее мощных GPU с меньшим объемом памяти.
Зачем нужно квантизировать модели?
Квантизация в первую очередь необходима, когда полноразмерная модель не помещается в память GPU. Качественно квантизованная модель может дать практически такой же результат, как неквантизованная модель того же семейства. Кроме того, квантизованные модели потенциально могут работать быстрее, поскольку требуют копировать меньшие объёмы данных в память GPU.
Квантизация - это процесс преобразования весов модели из формата вещественных чисел (float32) в целые числа с фиксированной точкой (int8, int4 и т. д.). Это позволяет уменьшить размер весов модели и улучшить производительность, но также может привести к потере точности. Теоретически, потеря точности при квантизации зависит от количества битов, используемых для представления весов модели. В общем случае, чем меньше количество битов, тем больше теряется точность.
Например, квантизация в 8 бит (int8) приводит к тому, что размер весов модели уменьшается примерно на 75% по сравнению с оригинальной моделью. Теоретическая потеря точности при этом составляет примерно 1-2%. При квантизации в 4 бита (int4) размер весов сократится уже на 87% при потере точности примерно в 5%. Квантизация в 3 и менее бит на вес сокращает размер модели более чем на 90%.
Какой практический предел у квантизации?
Предел квантизации моделей не является фиксированным и постоянно развивается с появлением новых методов. В последнее время были представлены методы квантизации в 2-3 бита, которые показывают хорошие результаты. Однако, стоит отметить, что сами модели становятся лучше и эффективнее используют свои веса.
Можно ли сразу обучать заранее квантизованные модели? Какие плюсы и минусы у такого подхода?
Обучение квантизованных моделей возможно, но имеет ряд ограничений. Основная проблема заключается в том, что квантизация градиентов (векторов изменений весов) затрудняет качественное обучение. Однако, существуют методы, совмещающие обычные и квантизованные веса при обучении, которые могут быть полезны для дообучения моделей пользователями с ограниченными ресурсами.
Есть ли смысл использовать не квантизованные модели?
Да, если есть достаточно вычислительных ресурсов и/или важно не рисковать даже малейшими потерями в качестве. Кроме того, для неквантизованных моделей существуют ускоренные реализации (vLLM, CTranslate2), которые могут быть полезны для задач с высокими требованиями к производительности.