Запускаем LLaMa 2 70B GPTQ на двух GPU 24 Gb (для новичков)
Из-за огромного размера GPT-моделей даже для вывода требуется несколько производительных GPU. Для ускорения созданы разные методы квантизации (простыми словами - сжатия), которые существенно снижают требования к видеопамяти.
В данной публикации будет приведен код с Hugging Face для запуска квантизированной версии - Llama 2 70B GPTQ. Также этот код подойдет для любых других моделей с меньшим количеством параметров 7B, 13B и т.д. Прежде чем перейти к коду предоставлю несколько заметок про нюансы, связанные с квантизированными моделями.
- Нужна ли 70B?
- Снижается ли качество при квантизации
- Требования к видеопамяти
- Выбор конкретной модели
- Запускаем Llama 2 70B GPTQ
Нужна ли 70B?
Из таблицы ниже видно, что прогресс Llama 2 кажется не существенным по сравнению с меньшими моделями. 70B от 13B лучше в разных сравнениях примерно от 5 до 20%. Как это ощутимо на практике сложно оценить.
В каждой специализированной задаче лучше сравнивать конкретные результаты, чтобы не бить из золотой пушки по мухам. Во многих задачах может хватить 7B и 13B.
По моему опыту тестирования в задачах анализа текса 13B предпочтительнее 7B. Квантизированная 70B может в чем-то уступать даже 13B. У 70B часто замечается более богатый язык.
Многое зависит от конкретных моделей, как они были модифицированы на каких-то датасетах. Один и тот же промт может отлично работать в 13B, но в 70B потребуется корректировка, и наоборот.
Наглядный пример вывода моделей разного размера Llama 2.
Лидерборд Chat Arena
В лидерборде Chat Arena Llama 2 70B модель занимает верхние места. Хотя видно, что количество параметров не гарантирует топ.
Снижается ли качество при квантизации
Качество заметно снижается при квантизации ниже 8-бит. В дополнении к битности, появилась еще версия квантизации с k-quants, такие модели имеют в названии K. В итоге имеем большой зоопарк квантизированных моделей, которые можно использовать в разных обстоятельствах. Из справки llama.cpp для 7B модели приводили такую таблицу:
Перплексия (качество генерации)
Качество в между разными версиями квантования часто оценивают статистически через перплексию - это распределение вероятностей по целым предложениям или текстам. Чем ниже перплексия, тем выше качество и меньше потерь.
Влияние инструмента квантизации
Квантизированные модели, сделанные для разных инструментов, таких как llama.cpp, AutoGPTQ, ExLlama, bitsandbytes будут отличаться по качеству и скорости работы. Например, в некоторых сравнениях GGML в llama.cpp показал более низкую перплексию, чем AutoGPTQ, ExLlama.
Для моделей GGML подойдет llama.cpp с моделями Q4_K_M. Для моделей GPTQ у нас есть два варианта: AutoGPTQ или ExLlama.
Влияние длины контекста
Пользователь предоставил факты, указывающие что от длины контекста перплекисити изменяется.
Есть интересные графики сравнения перплексии LlaMa-2 и LLaMa-1 в разных битно, один из них.
Чтобы понять какая версия квантизации подходит для конкретной модели потребуется тестирование. Проблема в том, что потери мало сказываться на одних задачах, но могут сильно вылазить в других.
Требования Llama 2 к видеопамяти и оперативке
Чтобы запустить Llama 2 70B без квантизации в fp16 потребуется 2 x 80GB GPU or 4 x 48GB GPU or 6 x 24GB GPU. В 4-bit требования следующие:
Оперативка. Файл с квантизированной моделью занимает на диске примерно 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.
Запускаем Llama 2 70B GPTQ
C августа 2023 года библиотека AutoGPTQ стала интегрирована в HF, поэтому можно упрощенно запускать квантизированные модели со стандартным pipeline с наименьшими телодвижениями.
Полный список требуемых модулей питона пока не приведу, по ошибкам обнаружите. Потребуются самые свежие bitsandbytes, auto-gptq. Скорее всего нужно будет проапгрейдить все трансформеры и торчи, если не запускается. Если что-то не запускается, то чаще всего из-за устаревшей версии пакетов.
Прописываем модель и конфиг, указываем нужную версию - gptq-4bit-32g-actorder_True
Добавляем контекст из 600 слов (800+ токенов примерно) и вопрос для суммаризации
Чем больше контекст, тем больше памяти жрет. Запускаем вывод.
Итого было затрачено примерно 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.
Если нашли неточность в описании - буду рад поправкам. Если есть вопросы - пишите, чем смогу помогу. Замечу, что я лишь энтузиаст-исследователь, а не профессиональный ИИ-программист. Также вы можете подписаться на мой ТГ-канал, где я делюсь своими находками и опытом.
Впервые вижу что кто-то затрагивает тему что интеллект модели падает при кванте, хоть и говорят об этом. Есть какие-то примерные данные сколько теряется в процентах интеллекта у модели? От q8 до q4 к примеру. Если не ошибаюсь, это 10% до q4, и чем цифра ниже, тем сильнее падает производительность по схеме лавины.
Так же слышал что чем крупнее модель, тем её квант в более компактные варианты вредит ей меньше. Типо, квантовка 70b до q2 превращает её в овоща, а нового 180b Falcon страдает от этого на много меньше.
Речь в целом идёт об ggml и gguf. Только такие и могу запускать
По таблицам лидербордов и разным преплексити, там действительно малый процент отклонения. На мой субьективный взгляд, все эти значения метрик и тестов никогда не отвечают, а в какой момент модель просядет. Подозреваю, что даже 0.1% отклонения может где-то выстрелить плачевно в самом неожиданном месте. Нужно проводить тестирование в конкретных задачах.
Он жрет столько памяти только за один промт? Или структура сама весит столько?