vak: (Default)
[personal profile] vak
Полезная статья: unify.ai/blog/model-quantization

Перепощу в качестве ликбеза, для тех, кто желает врубиться в тему.
Квантование — это метод сжатия модели, который снижает точность весовых коэффициентов и активаций нейронной сети. Другими словами, он включает в себя представление весов и активаций нейронной сети с использованием меньшего количества битов, чем их исходная точность. Например, вместо использования 32-разрядных чисел с плавающей запятой квантование может использовать 8-разрядные целые числа. Такое преобразование значительно снижает требования к памяти и сложность вычислений. Несмотря на то, что некоторая потеря точности неизбежна, тщательные методы квантования могут обеспечить существенное сжатие модели с минимальным снижением точности.

‍По сути, квантование включает в себя отображение из непрерывного пространства в дискретное пространство таким образом, что значения полной точности преобразуются в новые значения с меньшей разрядностью, называемые уровнями квантования, с помощью функции отображения квантования.

В идеале квантование следует использовать, когда размер модели и требования к вычислительным ресурсам являются проблемой, а также когда снижение точности может быть допустимым без существенной потери производительности. Это часто случается с LLM в таких задачах, как классификация текста, анализ тональности и других задачах NLP, где модели являются массивными и ресурсоемкими. Квантование также лучше всего использовать при развертывании на устройствах с ограниченными ресурсами, таких как мобильные телефоны, Интернет вещей и периферийные устройства. За счет снижения точности весовых коэффициентов и активаций квантование может значительно уменьшить объем памяти и вычислительные требования нейронной сети, что делает ее работу на этих устройствах более эффективной.

Date: 2024-05-12 05:44 (UTC)
sab123: (Default)
From: [personal profile] sab123
Гуглевый TPU использовал 8-битные числа в первых версиях. Потом их вроде сделали 16-битными.

Date: 2024-06-02 21:58 (UTC)
sab123: (Default)
From: [personal profile] sab123
Насколько я понимаю, это в реальности fixed point представления чисел между 0 и 1.

Date: 2024-05-12 06:28 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Хорошая идейка, хотя и очевидная.

Date: 2024-05-12 11:01 (UTC)
From: [personal profile] vakhitov
А там возможен такой трюк, чтобы типа для получения приближенного ответа заквантовать, а потом как-то локально получить точный ответ без квантования, но меньшими ресурсами, чем если бы изначально без квантования действовали?

Date: 2024-05-12 13:30 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Чтобы точный ответ получить, надо знать точные коэффициенты. Квантование делается как раз для того, чтобы не тащить точные коэффициенты, потому что они занимают слишком много места.

Date: 2024-05-12 13:36 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

снижение точности может быть допустимым без существенной потери производительности

Откуда потеря производительности? Количество умножений и сложений же не меняется, превращение 8-битных int в 32-битные не должно занимать много времени, операции над 8-битными целыми тоже не должны быть дольше, чем над 32-битными.

Date: 2024-05-12 20:14 (UTC)
sab123: (Default)
From: [personal profile] sab123
Потеря производительности в потере параллельности. В каждом слое сети есть много-много чисел, которые можно обрабатывать параллельно. При переходе от 8-битных к 32-битным чисел вместо каждых четырех сложителей или умножителей получается один (и тот более дорогой, особенно для умножителей).

Date: 2024-05-12 21:10 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

По контексту от квантизации происходит и снижение точности, и потеря производительности. Вы описываете увеличение производительности от того, что можно параллельно обрабатывать несколько коротких чисел вместо одного длинного.

Date: 2024-05-12 23:01 (UTC)
sab123: (Default)
From: [personal profile] sab123
А, я не понял, что вы говорили обратное. Но да, смысл укорачивания коэффициентов - в увеличении параллельности. Даже в прям в обычных процессорах с SIMD инструкциями.

Date: 2024-05-13 01:36 (UTC)
sobriquet9: (Default)
From: [personal profile] sobriquet9

Это мне как раз понятно. Но утверждение "снижение точности может быть допустимым без существенной потери производительности" намекает на то, что с точностью ниже производительность тоже ниже, а кажется, что должно быть наоборот.

Тридцатидвухбитный процессор за один такт может произвести одно 32-битное сложение или четыре 8-битных (переносами для простоты пренебрежём). Если мы уменьшили точность и вместо 32-битных сложений делаем 8-битные, то производительность должна учетвериться.