Запускаем LLaMa 2 70B GPTQ на двух GPU 24 Gb (для новичков)

Из-за огромного размера GPT-моделей даже для вывода требуется несколько производительных GPU. Для ускорения созданы разные методы квантизации (простыми словами - сжатия), которые существенно снижают требования к видеопамяти.

Сгенерировано DALL·E 3
Сгенерировано DALL·E 3

В данной публикации будет приведен код с Hugging Face для запуска квантизированной версии - Llama 2 70B GPTQ. Также этот код подойдет для любых других моделей с меньшим количеством параметров 7B, 13B и т.д. Прежде чем перейти к коду предоставлю несколько заметок про нюансы, связанные с квантизированными моделями.

  • Нужна ли 70B?
  • Снижается ли качество при квантизации
  • Требования к видеопамяти
  • Выбор конкретной модели
  • Запускаем Llama 2 70B GPTQ

Нужна ли 70B?

Из таблицы ниже видно, что прогресс Llama 2 кажется не существенным по сравнению с меньшими моделями. 70B от 13B лучше в разных сравнениях примерно от 5 до 20%. Как это ощутимо на практике сложно оценить.

Запускаем LLaMa 2 70B GPTQ на двух GPU 24 Gb (для новичков)

В каждой специализированной задаче лучше сравнивать конкретные результаты, чтобы не бить из золотой пушки по мухам. Во многих задачах может хватить 7B и 13B.

По моему опыту тестирования в задачах анализа текса 13B предпочтительнее 7B. Квантизированная 70B может в чем-то уступать даже 13B. У 70B часто замечается более богатый язык.

Многое зависит от конкретных моделей, как они были модифицированы на каких-то датасетах. Один и тот же промт может отлично работать в 13B, но в 70B потребуется корректировка, и наоборот.

Наглядный пример вывода моделей разного размера Llama 2.

Запускаем LLaMa 2 70B GPTQ на двух GPU 24 Gb (для новичков)

Лидерборд Chat Arena

В лидерборде Chat Arena Llama 2 70B модель занимает верхние места. Хотя видно, что количество параметров не гарантирует топ.

Запускаем LLaMa 2 70B GPTQ на двух GPU 24 Gb (для новичков)

Снижается ли качество при квантизации

Качество заметно снижается при квантизации ниже 8-бит. В дополнении к битности, появилась еще версия квантизации с k-quants, такие модели имеют в названии K. В итоге имеем большой зоопарк квантизированных моделей, которые можно использовать в разных обстоятельствах. Из справки llama.cpp для 7B модели приводили такую таблицу:

Запускаем LLaMa 2 70B GPTQ на двух GPU 24 Gb (для новичков)

Перплексия (качество генерации)

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

Влияние инструмента квантизации

Квантизированные модели, сделанные для разных инструментов, таких как llama.cpp, AutoGPTQ, ExLlama, bitsandbytes будут отличаться по качеству и скорости работы. Например, в некоторых сравнениях GGML в llama.cpp показал более низкую перплексию, чем AutoGPTQ, ExLlama.

Запускаем LLaMa 2 70B GPTQ на двух GPU 24 Gb (для новичков)

Для моделей GGML подойдет llama.cpp с моделями Q4_K_M. Для моделей GPTQ у нас есть два варианта: AutoGPTQ или ExLlama.

Влияние длины контекста

Пользователь предоставил факты, указывающие что от длины контекста перплекисити изменяется.

Запускаем LLaMa 2 70B GPTQ на двух GPU 24 Gb (для новичков)

Есть интересные графики сравнения перплексии LlaMa-2 и LLaMa-1 в разных битно, один из них.

Comparison between 13B LLaMA-1 and LLaMA-2 perplexity for a context size of 512 using different quantizations.
Comparison between 13B LLaMA-1 and LLaMA-2 perplexity for a context size of 512 using different quantizations.

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

Требования Llama 2 к видеопамяти и оперативке

Чтобы запустить Llama 2 70B без квантизации в fp16 потребуется 2 x 80GB GPU or 4 x 48GB GPU or 6 x 24GB GPU. В 4-bit требования следующие:

Запускаем LLaMa 2 70B GPTQ на двух GPU 24 Gb (для новичков)

Оперативка. Файл с квантизированной моделью занимает на диске примерно 37 Гб. Примерно столько потребуется оперативной памяти на этапе загрузки модели в GPU, а на этапе вывода около 3-4 Гб памяти. Это значит, что если у вас оперативной памяти 16 или 32 Гб всего, то обязательно нужен swap файл и все запустится. Ну и вообще если памяти не хватает - просто увеличивайте swap. Само собой если диск медленный, то на этапе загрузки придется подождать. Но это не критично.

Выбор конкретной модели

Для запуска через стандартный pipeline требуется модель в формате GPTQ. Все доступные модели GPTQ Llama 2 70B можно найти через поиск. Если в названии модели указано GPTQ - значит подходит для нашего кода. Можно сконвертировать fp16 модель в GPTQ из этого лидерборда.

Я остановился на модели в формате GPTQ - TheBloke/Llama-2-70B-Orca-200k-GPTQ. Часто в опубликованной модели есть разные версии квантования, которые описаны на странице. Они отличаются качеством и скоростью. Мы коде будем использовать - gptq-4bit-32g-actorder_True.

В столбце Size - примерный ориентир сколько потребуется видеопамяти для запуска.
В столбце Size - примерный ориентир сколько потребуется видеопамяти для запуска.

Запускаем Llama 2 70B GPTQ

C августа 2023 года библиотека AutoGPTQ стала интегрирована в HF, поэтому можно упрощенно запускать квантизированные модели со стандартным pipeline с наименьшими телодвижениями.

Полный список требуемых модулей питона пока не приведу, по ошибкам обнаружите. Потребуются самые свежие bitsandbytes, auto-gptq. Скорее всего нужно будет проапгрейдить все трансформеры и торчи, если не запускается. Если что-то не запускается, то чаще всего из-за устаревшей версии пакетов.

import torch from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline,BitsAndBytesConfig,GPTQConfig

Прописываем модель и конфиг, указываем нужную версию - gptq-4bit-32g-actorder_True

model_id = "TheBloke/Llama-2-70B-Orca-200k-GPTQ" model_kwargs = {"load_in_4bit": True} q_tokenizer = AutoTokenizer.from_pretrained(model_id) q_model = AutoModelForCausalLM.from_pretrained(model_id, revision="gptq-4bit-32g-actorder_True", device_map="auto" ) qtq_pipe = pipeline("text-generation", model=q_model, model_kwargs=model_kwargs, tokenizer=q_tokenizer, max_new_tokens=1000,temperature=0)

Добавляем контекст из 600 слов (800+ токенов примерно) и вопрос для суммаризации

context = """ For more than a century, researchers have known that people are generally very good at eyeballing quantities of four or fewer items. But performance at sizing up numbers drops markedly — becoming slower and more prone to error — in the face of larger numbers. Now scientists have discovered why: the human brain uses one mechanism to assess four or fewer items and a different one for when there are five or more. The findings, obtained by recording the neuron activity of 17 human participants, settle a long-standing debate on how the brain estimates how many objects a person sees. The results were published in Nature Human Behaviour1 on 2 October. The finding is relevant to the understanding of the nature of thinking, says psychologist Lisa Feigenson, the co-director of the Johns Hopkins University Laboratory for Child Development in Baltimore, Maryland. “Fundamentally, the question is one of mental architecture: what are the building blocks that give rise to human thought?” A century-old debate The limits of the human ability to estimate large quantities have puzzled many generations of scientists. In an 1871 Nature article2, economist and logician William Stanley Jevons described his investigations into his own counting skills and concluded “that the number five is beyond the limit of perfect discrimination, by some persons at least”. Some researchers have argued that the brain uses a single estimation system, one that is simply less precise for higher numbers. Others hypothesize that the performance discrepancy arises from there being two separate neuronal systems to quantify objects. But experiments have failed to determine which model is correct. Then, a team of researchers had a rare opportunity to record the activity of individual neurons inside the brains of people who were awake. All were being treated for seizures at the University Hospital Bonn in Germany, and had microelectrodes inserted in their brains in preparation for surgery. The authors showed 17 participants images of anywhere from zero to nine dots on a screen for half a second, and asked them whether they had seen an odd or even number of items. As expected, the participants’ answers were much more precise when they saw four or fewer dots. The researchers had already learned from previous research3 that there are specialized neurons associated with specific numbers of items. Some fire primarily when presented with one object, others when presented with two objects and so forth. Analysis of the participants’ neuronal activity showed that neurons specializing in numbers of four or less responded very specifically and selectively to their preferred number. Neurons that specialize in five through nine, however, responded strongly to their preferred number but also to numbers immediately adjacent to theirs. Question: Provide an abstract with max length 50 words for Context """

Чем больше контекст, тем больше памяти жрет. Запускаем вывод.

prompt = f"Context: {context} Response:\n" print(qtq_pipe(prompt ))

Итого было затрачено примерно 44 Гб памяти и 13.5 секунд. Результат:

Scientists have discovered that the human brain uses two different mechanisms to estimate the number of objects a person sees. The first mechanism is used for four or fewer items and the second for five or more. The findings, obtained by recording the neuron activity of 17 human participants, settle a long-standing debate on how the brain estimates how many objects a person sees. The results were published in Nature Human Behaviour on 2 October. The finding is relevant to the understanding of the nature of thinking and the building blocks that give rise to human thought.

Если нашли неточность в описании - буду рад поправкам. Если есть вопросы - пишите, чем смогу помогу. Замечу, что я лишь энтузиаст-исследователь, а не профессиональный ИИ-программист. Также вы можете подписаться на мой ТГ-канал, где я делюсь своими находками и опытом.

33
3 комментария

Впервые вижу что кто-то затрагивает тему что интеллект модели падает при кванте, хоть и говорят об этом. Есть какие-то примерные данные сколько теряется в процентах интеллекта у модели? От q8 до q4 к примеру. Если не ошибаюсь, это 10% до q4, и чем цифра ниже, тем сильнее падает производительность по схеме лавины.

Так же слышал что чем крупнее модель, тем её квант в более компактные варианты вредит ей меньше. Типо, квантовка 70b до q2 превращает её в овоща, а нового 180b Falcon страдает от этого на много меньше.

Речь в целом идёт об ggml и gguf. Только такие и могу запускать

Ответить

По таблицам лидербордов и разным преплексити, там действительно малый процент отклонения. На мой субьективный взгляд, все эти значения метрик и тестов никогда не отвечают, а в какой момент модель просядет. Подозреваю, что даже 0.1% отклонения может где-то выстрелить плачевно в самом неожиданном месте. Нужно проводить тестирование в конкретных задачах.

Ответить

Он жрет столько памяти только за один промт? Или структура сама весит столько?

Ответить