paint-brush
Запустите Llama без графического процессора! Квантованный LLM с LLMWare и Quantized Dragonк@shanglun
3,225 чтения
3,225 чтения

Запустите Llama без графического процессора! Квантованный LLM с LLMWare и Quantized Dragon

к Shanglun Wang12m2024/01/07
Read on Terminal Reader

Слишком долго; Читать

Поскольку ресурсы графических процессоров становятся все более ограниченными, миниатюризация и специализированные программы LLM постепенно приобретают все большее значение. Сегодня мы исследуем квантование — передовой метод миниатюризации, который позволяет нам запускать модели с высокими параметрами без специального оборудования.
featured image - Запустите Llama без графического процессора! Квантованный LLM с LLMWare и Quantized Dragon
Shanglun Wang HackerNoon profile picture
0-item

Введение

По мере того как технологии LLM получают все более широкое распространение и экосистема начинает развиваться, организации начинают осознавать ограничения и затраты на использование технологий LLM. Многие предприятия, изначально с энтузиазмом относившиеся к применению технологий LLM , отказались от централизованных инициатив, вместо этого придерживаясь стратегии поощрения децентрализованных усилий по включению таких сервисов, как ChatGPT и Claude, в свои рабочие процессы.


Причин этого явления несколько. Отсутствие опыта LLM, требований MLOps и зависимость от специализированной инфраструктуры графических процессоров — все это препятствия для реализации крупномасштабных инициатив в области искусственного интеллекта. Однако из них самым сложным вопросом является зависимость от графических процессоров.


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

Доступность графического процессора как ограничение для LLM


Большинство общедоступных и высокопроизводительных моделей, таких как GPT-4, Llama 2 и Claude, используют узкоспециализированную инфраструктуру графических процессоров. GPT-4, одна из крупнейших моделей, доступных на рынке, как известно, работает на кластере из 8 графических процессоров A100. Модель Llama 2 70B, которая намного меньше, по-прежнему требует как минимум графического процессора A40 для работы на разумной скорости.


Такой уровень требований к графическому процессору практически исключает возможность локального запуска этих моделей — графический процессор A100, если вы сможете найти продавца, стоит около 25 000 долларов. После приобретения графических процессоров вам потребуются специальные навыки для настройки и обслуживания серверов. Очень немногие организации готовы пойти на такие затраты, чтобы экспериментировать с технологиями LLM.


Чтобы решить эту проблему, несколько стартапов и облачных провайдеров разработали обширные предложения PaaS. Некоторые сервисы, такие как Replication, которые я использовал в прошлых статьях и проектах, позволяют пользователям арендовать серверы с графическим процессором и платить за использованное вычислительное время. Другие поставщики, такие как OpenAI и Anthropic, предлагают свои модели в виде API для каждого токена, что еще больше абстрагирует инфраструктурные сложности. Однако эти службы требуют отправки данных во внешнюю сеть, что делает использование этих служб бесполезным для организаций, заботящихся о конфиденциальности. Кроме того, многие из этих сервисов страдают от нехватки во время пиков спроса, поскольку использование графических процессоров превышает доступность, что делает их ненадежными вариантами для критически важных рабочих нагрузок.


Кроме того, время графического процессора, независимо от того, как за него взимается плата, для больших вычислительных задач обходится дорого — в конце концов, компаниям, которые владеют и эксплуатируют эти графические процессоры, нужна отдача от своих инвестиций. Хотя эти затраты практически незначительны для экспериментальных вариантов использования, случаи коммерческого использования часто требуют внедрения больших контекстов, точной настройки или многоэтапных примеров. Эти затраты представляют собой серьезное препятствие для внедрения, особенно для организаций с большими наборами данных или тех, которым не хватает финансовых ресурсов, как у крупных фирм США.


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


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

Квантование (дополнительное чтение)

В этом разделе мы кратко рассмотрим основы квантования. Однако, если вы просто ищете способ запуска мощных LLM локально на своем компьютере, вы можете пока пропустить этот раздел и вернуться к нему позже. LLMWare, компания, чью технологию мы будем использовать сегодня, создала несколько замечательных инструментов, которые позволяют вам начать работу с квантованными моделями без необходимости вникать в мельчайшие реализации C/C++, стоящие за всем этим.

Что такое квантование?

Квантование — это метод, направленный на снижение требований к вычислениям и памяти для запуска LLM за счет использования числовых типов с более низкой точностью. Многие популярные модели с открытым исходным кодом, такие как Llama, Falcon и Alpaca, используют PyTorch в качестве базовой платформы. По умолчанию модели PyTorch используют 32-битные числа с плавающей запятой, то есть один параметр занимает 32 «бита» в памяти графического процессора. Квантование направлено на замену этих параметров 16-битными числами с плавающей запятой, 8-битными целыми числами или даже 4-битными целыми числами. Успешное квантование приводит к значительному увеличению скорости вычислений и сокращению использования памяти, а это означает, что большие модели становятся работоспособными на младших графических процессорах, встроенных графических чипах или даже центральных процессорах. Эта идея существует уже некоторое время — в PyTorch добавлена поддержка 16-битных плавающих запятых и компиляций моделей по мере развития технологии, но прогресс был медленным из-за ранних проектных решений в среде PyTorch.

Ухудшает ли квантование производительность?

На этом этапе естественно задаться вопросом, не ухудшит ли это серьезно точность модели? Короткий ответ: да, но только если вы делаете это небрежно. Любая оптимизация сопряжена с неизбежными компромиссами, но с помощью некоторых специализированных методов исследователи смогли добиться невероятно стабильной производительности из моделей с высокой степенью квантования. Хотя мы не будем вдаваться в крайние технические детали, давайте рассмотрим в общих чертах наиболее распространенные стратегии, используемые сейчас. Если вы хотите узнать больше, вы можете узнать больше об этом в руководстве от HuggingFace.


Калиброванное квантование

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


С учетом квантования

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

Llama.cpp и GGUF

Хотя квантование и оптимизация PyTorch долгое время блокировались структурой разработки, две недавние технологии с открытым исходным кодом преодолели эти барьеры и сделали технологии квантования гораздо более доступными для широкой публики. Давайте кратко рассмотрим их ниже.


Лама.cpp

Llama.cpp — проект Георгия Герганова по портированию модели Llama на C/C++. Это избавило от сложности, привнесенной PyTorch, а собственная реализация позволила реализовать квантование напрямую. Таким образом, полученная модель может работать с 4-битным целочисленным квантованием, что позволяет запускать модели Llama с большим количеством параметров без специализированного графического процессора.


С тех пор сообщество расширило проект, включив в него список моделей с открытым исходным кодом, включая такие популярные, как Falcon и Mistral.


ГГУФ

GGUF — это формат файла Llama.cpp для хранения и передачи информации о модели. Квантованные модели хранятся в этом формате, поэтому конечный пользователь может их загрузить и запустить. GGUF является форматом, пришедшим на смену GGML, и направлен на улучшение GGML, обеспечивая большую расширяемость, обратную совместимость и стабильность, сохраняя при этом возможность быстрой разработки.


Разработка универсального формата файлов открыла сообществу разработчиков открытого исходного кода возможность расширить Llama.cpp для оптимизации других моделей, а такие новаторы, как TheBloke и LLMWare, в течение последних нескольких месяцев работали над миниатюризацией популярных моделей с открытым исходным кодом.

Модель квантового дракона от LLMWare

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

Кто такой LLMWare?

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


Ранее я писал об их моделях BLING, оптимизированных для RAG, которые выжимают невероятную производительность из моделей с числом от 1 до 3 миллиардов параметров для специализированных задач, таких как проверка контрактов и финансовый анализ. Хотя большинство моделей с открытым исходным кодом с таким количеством параметров, как правило, полезны только для решения игрушечных задач, LLMWare способна обеспечить готовую к использованию производительность этих моделей, обучая их решению узкоцелевых задач. Эти миниатюрные модели могут работать без внешнего графического процессора, что обеспечивает повышенную конфиденциальность и масштабируемость.

Что такое Дракон?

Dragon — это коллекция LLM, которые можно рассматривать как более мощные версии своих собратьев BLING. Первоначальной целью Dragon было обучение модели с более высокими параметрами, используя те же методы точной настройки инструкций, предоставляя возможность пользователям, которым требуется более высокая производительность и которые имеют доступ к графическим процессорам более низкого уровня.


Добавленное количество параметров привело к появлению более мощных моделей, которые могли использовать более крупные контекстные окна и генерировать более сложные выходные данные, но требовали от пользователя более специализированного оборудования, такого как ноутбук со встроенным графическим процессором или контейнер облачных вычислений с подключенным графическим процессором. Тем не менее, они по-прежнему представляют собой улучшение по сравнению с чрезвычайно большими моделями, которым придется ждать доступа к дефицитным графическим процессорам A40 или A100.

Квантованный дракон, лучшее из обоих миров

Учитывая вышесказанное, легко понять, почему квантование дало значительный импульс развитию набора инструментов искусственного интеллекта LLMWare. Благодаря квантованию пользователь может запускать модели уровня Dragon в той же среде, что и модели BLING, что позволяет проводить гораздо более мощный анализ на обычных компьютерах.


За последний месяц LLMWare опубликовала квантовые версии нескольких моделей Dragon. Сегодня мы оценим модель Dragon от LLMWare, построенную на основе Llama, с помощью проблемы юридического анализа RAG и сравним ее с аналогичной моделью BLING. Заинтересованные пользователи могут также изучить другие модели: модель на базе Mistral и модель на базе Yi доступны в LLMWare на момент написания этой статьи. Кроме того, LLMWare упростила выполнение выводов по моделям Llama.cpp благодаря тесной интеграции с библиотекой ctransformers, которая позволяет беспрепятственно заменять модели gguf моделями на основе PyTorch.


Для этого эксперимента мы будем использовать Macbook Air с чипом M1, то есть для этого упражнения мы будем использовать только широко доступное оборудование.

Тестирование Quantized Dragon

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


Чтобы сосредоточиться на сравнении моделей и уменьшить объем необходимых предварительных знаний, мы будем выполнять большую часть анализа PDF-файлов и векторного поиска вручную. Это дает дополнительное преимущество, заключающееся в том, что проблема искусственно усложняется для модели: встроенный поиск LLMWare по умолчанию разбивает исходный материал примерно на 1000 токенов, но обработка синтаксического анализа вручную позволяет нам увеличить контекст примерно до 3000 токенов. Это поможет нам наглядно продемонстрировать разницу между моделями Dragon и BLING.


Однако вы сможете легко интегрироваться с остальной частью экосистемы LLMWare, если хотите использовать их инструменты, выполнив шаги по настройке из моей последней статьи о LLMWare. Фактически, если вы просто замените название моделей BLING на квантованную модель Дракона из этой статьи, все должно работать без проблем.


Без лишних слов, давайте начнем!


Сначала давайте импортируем необходимые зависимости:


 import sklearn import sklearn.metrics # for cosine similarity from llmware.prompts import Prompt import time import os from openai import OpenAI from PyPDF2 import PdfReader client = OpenAI() # the library now loads the key automatically as an environment variable.


Теперь мы можем загрузить PDF-файл. В предыдущем примере мы загрузили несколько крупных законодательных актов, но сегодня мы сосредоточимся только на PDF-версии Закона о сокращении налогов и создании рабочих мест от 2017 года.

 reader = PdfReader([path to PDF of tax cuts and jobs act])


Теперь мы можем генерировать вложения для каждой страницы:

 embeddings = [] for pg in reader.pages: text = pg.extract_text() embeddings.append(client.embeddings.create( input=text, model="text-embedding-ada-002" ).data[0].embedding)


Давайте также сгенерируем вложения для вопроса, который мы собираемся задать:

 question = 'What is a qualified opportunity zone partnership interest?' q_embed = client.embeddings.create( input=question, model="text-embedding-ada-002" ).data[0].embedding


Имея в виду встраивание, мы можем выполнить векторный поиск. Поскольку наше пространство поиска невелико, мы можем просто сделать это вручную.


 cos_sim = [(idx, sklearn.metrics.pairwise.cosine_similarity([e], [q_embed])[0][0]) for idx, e in enumerate(embeddings)]


Теперь мы можем взять наиболее релевантную страницу (это индекс 132 или страница 133, если вы хотите проверить результаты):

 most_relevant = sorted(cos_sim, key=lambda x: x[1], reverse=True)[0][0]


И вот мы подошли к самому важному шагу. Мы создадим экземпляр объекта LLMWare Prompter с квантованной моделью Llama Dragon. Класс Prompter здесь является ключевым, поскольку он выполняет за нас разработку подсказок и следит за тем, чтобы наша подсказка соответствовала структуре обучающих данных Dragon. Класс приглашения также автоматически обрабатывает привязку llamacpp, поэтому вы можете использовать квантованную модель Дракона точно так же, как и другие модели.


 model_name = "llmware/dragon-llama-7b-gguf" prompter = Prompt().load_model(model_name) response = prompter.prompt_main(question, context='\n\n'.join([reader.pages[132].extract_text()]), prompt_name="default_with_context", temperature=0.3)


Подождите немного, и вы должны увидеть возврат вызова функции. Теперь распечатайте результаты:

 print(response['llm_response'])


И вы должны увидеть что-то вроде следующего:

 • A capital or profits interest acquired by the qualified opportunity fund after December 31, 2017, from the partnership solely in exchange for cash; •As of the time such interest was acquired, the partnership was a qualified opportunity zone business (or, in the case of a new partnership, it was being organized for purposes of being a qualified opportunity zone business); •During substantially all of the qualified opportunity fund's holding period for such interest, the partnership qualified as a qualified opportunity zone business.


Это очень хороший ответ!


Для сравнения давайте посмотрим, как модель BLING справится с той же задачей. Одна из проблем, которую мы можем ожидать, заключается в том, что большой размер контекста может «подавить» модель с меньшими параметрами и привести к менее информативному ответу. В моих предыдущих экспериментах стриженая лама 2.7b лучше всего справилась с этой задачей, поэтому я решил использовать ее как представителя моделей BLING.

 model_name_2 = "llmware/bling-sheared-llama-2.7b-0.1" prompter2 = Prompt().load_model(model_name_2) response = prompter2.prompt_main(question, context='\n\n'.join([reader.pages[132].extract_text()]), prompt_name="default_with_context", temperature=0.3)


После некоторой обработки вы должны увидеть что-то вроде этого.


 A qualified opportunity zone partnership interest is a capital or profits interest in a domestic partnership if such interest is acquired by the qualified opportunity fund after December 31, 2017, from the partnership solely in exchange for cash.


Ответ по-прежнему хороший, но упускаются некоторые детали, зафиксированные моделью Дракона. В частности, в ответе не учитываются требования к периоду владения и новое экономическое обоснование. Это соответствует нашим ожиданиям относительно сложности моделей с меньшими параметрами при обработке более крупных контекстов. Заинтересованные читатели могут расширить этот эксперимент, используя модели с еще меньшими параметрами или увеличивая размер данного контекста. Вы должны увидеть, что эффект становится все более выраженным, после чего модель даст короткий, искаженный ответ.


Из этого эксперимента должно быть ясно, что квантованные модели Dragon способны превосходить модели с более низкими параметрами в предполагаемых случаях использования без заметного ущерба для точности модели.


При этом мы использовали квантованную модель для решения реального сценария использования и в процессе узнали о ее характеристиках производительности!

Заключение

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


Фреймворк RAG от LLMWare можно найти на Github , а их модели DRAGON и BLING — в репозитории Hugging Face от LLMWare.


Кстати, я работаю над захватывающим проектом, целью которого является использование языкового искусственного интеллекта и миниатюризации для революционного изменения образования в развивающемся мире. Мы работаем с выдающимися активистами и преподавателями по всему миру и работаем над преодолением глобального цифрового разрыва. Если вы хотите узнать больше о моем проекте или просто поговорить об интересных событиях в сфере LLM, не стесняйтесь обращаться ко мне на Github или LinkedIn .