Группы для квантования могут быть различного размера - можно зафиксировать один масштаб на весь тензор, но так как разные измерения тензора могут сильно отличаться масштабом, то шаг квантования (разность между ближайшими возможными значениями) может быть слишком велик для точного представления весов, посему выгодно брать меньшие группы, фиксируя масштаб для одной размености, скажем, либо даже для меньшей группы соседних весов. Однако, если брать слишком маленькие группы - то память, выделяемая на хранение scale, cтановится довольно существенной. Скажем, если хранить scale в fp32, то для при квантовании в группы из 64 весов, скейлы уже будут давать дополнительные 32 / 64 = 0.5 бита в среднем.
Возникает идея - а почему бы и не заквантовать сами скейлы (и так до бесконечности, но авторы решили ограничиться двумя квантованиями). В данной работе scale квантуется группами по 256 весов в 8 бит, что снижает накладные расходы на их использование до 8 / 64 + 32 / (64 * 256) = 0.127 бит в среднем на параметр. Данная процедура не приводит к просадке качества, но дает существенную экономию по памяти.
Возникает идея - а почему бы и не заквантовать сами скейлы (и так до бесконечности, но авторы решили ограничиться двумя квантованиями). В данной работе scale квантуется группами по 256 весов в 8 бит, что снижает накладные расходы на их использование до 8 / 64 + 32 / (64 * 256) = 0.127 бит в среднем на параметр. Данная процедура не приводит к просадке качества, но дает существенную экономию по памяти.
3) И еще одно нововведение - так называемые paged optimizers. У Нвидиевских GPU есть опция автоматической перекачки памяти с GPU на CPU RAM, если память видеокарты забивается. Причем данная перекачка не приводит к заметному замедлению процесса обучения. Весьма полезная фича, учитывая сколько нейронов в голове программистов и исследователей убивает ежесекудно сообщение
Низкоранговый Адаптер (LoRA, заслуживающая отдельного выпуска) не квантуется и хранится в bf16. Но учитывая его мизерный вес по сравнению со всей моделью - это и не требуется. Итого, в конечном виде обученный на целевой задаче имеет следующий вид:
CUDA error: out of memory
. ☠️Низкоранговый Адаптер (LoRA, заслуживающая отдельного выпуска) не квантуется и хранится в bf16. Но учитывая его мизерный вес по сравнению со всей моделью - это и не требуется. Итого, в конечном виде обученный на целевой задаче имеет следующий вид:
Где первый член - это дважды квантованный вес, а второй - низкоранговая добавка. Double dequant - расквантование скейлов с последующим расквантованием весов.
4) Отдельного упоминания и уважения заслуживает валидация их модели и конкуретных на ряде бенчмарков.
Сначала авторы демонстрируют, что при finetuning, QLoRA имеет примерно такое же качество, как и дообучение всей модели и LoRA для модели с весами с плавающей точкой (без квантования).
Сначала авторы демонстрируют, что при finetuning, QLoRA имеет примерно такое же качество, как и дообучение всей модели и LoRA для модели с весами с плавающей точкой (без квантования).
Далее авторы дообучают квантованную сеть на различных датасетах, и замеряют качество работы на бенчмарках, тестирующих language understanding и качество ответов модели на чатбот-бенчмарках, замеренное с помощью GPT-4 и человеками. Среди датасетов берутся доступные публично данные:
- Self-Instruct
- Longform
- Chip2
- HH-RLHF
- Unnatural Instruct
- OASST1 (и конечная модель Guanaco обучается именно на нем)
- Alpaca
- Flan v2
- Self-Instruct
- Longform
- Chip2
- HH-RLHF
- Unnatural Instruct
- OASST1 (и конечная модель Guanaco обучается именно на нем)
- Alpaca
- Flan v2
Для замеров способности модели понимать языки используется стандартный MMLU бенчмарк. При обучении на датасете FLAN v2 (здоровенная смесь из множества разнообразных задач на инструкции) конечная модель выдает наилучшее качество (вероятно из-за количества данных и их структуры).
Потом авторы проводят замеры на Vicuna Benchmark (наборе инструкций) против ChatGPT используя в качестве арбитра GPT4. В этом случае небольшой OASST1 оказывается наилучшим для instruction finetuning. Самая большая модель практически сравнивается по качеству с ChatGPT.
Однако делается примечание, что разброс довольно существеннен от запуска к запуски и ранжирование у GPT-4 и людей не всегда совпадает, хоть корреляция и существенна.
Далее качество работы оценивается на запросах из Vicuna и OpenAssistant с агреграцией оценок через Elo Score (методики, придуманной для шамхатных турниров) уже непосредственно “кожаными мешками”. И версии Guanaco-{33B,65B} опережают конкуретные open-source модели и ChatGPT.
Далее качество работы оценивается на запросах из Vicuna и OpenAssistant с агреграцией оценок через Elo Score (методики, придуманной для шамхатных турниров) уже непосредственно “кожаными мешками”. И версии Guanaco-{33B,65B} опережают конкуретные open-source модели и ChatGPT.
Таким образом, с одной стороны авторы получают довольно качественного чатбота. И заодно делают вывод про то, что в разные датасеты заточены под разные свойства модели. Скажем, FLANv2, лучший для прокачки модели под понимание языка, не столь хорош для создания чатбота, и наоборот для OpenAssistant.
И самое приятное, для обучения самой большой версии Guanaco не требуется значительных ресурсов. Всего день на одной RTX A6000 (хоть и много больше бесплатного колаба).
Есть демка модели на huggingface и несколько нотбуков на странице проекта. Примечателен ноутбук с файнтьюном GPTNeoX-20B на колабовской T4 c 16GIB, которая так-то весит 40 Гигов (или 20 в 8-битной квантизации).
Введеный в работе формат квантизации имплементирован в библиотеке bitsandbytes и некоторые модели (не только лишь все) можно подгружать в данном формате
И самое приятное, для обучения самой большой версии Guanaco не требуется значительных ресурсов. Всего день на одной RTX A6000 (хоть и много больше бесплатного колаба).
Есть демка модели на huggingface и несколько нотбуков на странице проекта. Примечателен ноутбук с файнтьюном GPTNeoX-20B на колабовской T4 c 16GIB, которая так-то весит 40 Гигов (или 20 в 8-битной квантизации).
Введеный в работе формат квантизации имплементирован в библиотеке bitsandbytes и некоторые модели (не только лишь все) можно подгружать в данном формате
model_id = "EleutherAI/gpt-neox-20b"
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True, # квантовать ли скейлы
bnb_4bit_quant_type="nf4", # использовать NF4
bnb_4bit_compute_dtype=torch.bfloat16 # тип в котором проводятся вычисления
)
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=bnb_config, device_map={"":0})
Ах, да, маленький нюанс. 😅 Формат используется для хранения весов, а в момент вычислений веса материализуется в обычный тип с плавающей точкой (fp16, bf16). Потому ускорения пока нет, и даже некоторые накладные расходы на квантизацию и деквантизацию, но в будущем, вероятно, с развитием карточек и разработкой ядер, возможно, и добавится еще и ускорение.
В общем, весьма сильный и практически полезный результат.
В общем, весьма сильный и практически полезный результат.
Memory-Efficient Fine-Tuning of Compressed Large Language Models via sub-4-bit Integer Quantization
TL;DR в данной работе авторы предложили простой и дешевый эффективный по памяти способ дообучения квантованной модели для восстановления качества и под instruction finetuning.
https://teletype.in/@spiridon_sun_rotator/UJ6lixASXjN
TL;DR в данной работе авторы предложили простой и дешевый эффективный по памяти способ дообучения квантованной модели для восстановления качества и под instruction finetuning.
https://teletype.in/@spiridon_sun_rotator/UJ6lixASXjN
Teletype
Memory-Efficient Fine-Tuning of Compressed Large Language Models via sub-4-bit Integer Quantization
Значится, есть у нас квантованная модель, скажем, в 4-бита с некоторой просадкой в качестве на целевой задаче. И мы хотим каким-то...
Intriguing Properties of Quantization at Scale
TL;DR В данной статье авторы исследуют влияние факторов и гиперпараметров обучения на изменение качества квантованной модели по сравнению с ее исходной версией в числах с плавающей точкой.
https://teletype.in/@spiridon_sun_rotator/yBDfCaCH98R
TL;DR В данной статье авторы исследуют влияние факторов и гиперпараметров обучения на изменение качества квантованной модели по сравнению с ее исходной версией в числах с плавающей точкой.
https://teletype.in/@spiridon_sun_rotator/yBDfCaCH98R
Teletype
Intriguing Properties of Quantization at Scale
[Статья]
🔥2