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

Улучшите свое развитие, используя мощные языковые модели всё, что вам нужно знать

Изображение, созданное стабильным растворением

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

Целью этой статьи является объяснение в простых терминах ключевых технологий, необходимых для начала разработки приложений на основе LLM. Она предназначена для разработчиков программного обеспечения, ученых-данных и энтузиастов искусственного интеллекта, которые имеют базовое представление о концепциях машинного обучения и хотят углубиться в эту тему. В статье также приводятся много полезных ссылок для дальнейшего изучения. Это будет интересно!

1. Введение в большие языковые модели (LLM)

Думаю, вы уже тысячу раз слышали о том, что такое LLM, поэтому я не буду вас перегружать информацией. Все, что нам нужно знать: Большая Языковая Модель (LLM) – это БОЛЬШАЯ нейронная сеть, которая предсказывает следующий токен на основе предыдущего предсказанного. Вот и все.

Сравнение числа параметров моделей. Просто посмотрите, насколько большой GPT-3. И никто не знает о GPT-4...

Популярность LLM обусловлена их универсальностью и эффективностью. Они отлично справляются с такими задачами, как перевод, резюмирование, анализ значений и т. д.

Возможности LLM

Некоторые примеры проектов, использующих LLM:

  • Notion AI — помогает улучшить качество письма, генерировать контент, исправлять орфографию и грамматику, редактировать голос и интонацию, переводить и многое другое.
  • GitHub Copilot — улучшает ваш код, предлагая подсказки в стиле автозаполнения.
  • Dropbox Dash — предоставляет функциональность поиска на естественном языке и указывает, из каких файлов был получен ответ.

Если вы хотите более подробно разобраться в работе LLM, я настоятельно рекомендую ознакомиться с отличной статьей “Очень легкое введение в большие языковые модели без лишней помпы” Марка Ридла.

2. Открытые vs Закрытые модели исходного кода

Хотя есть несколько различий, я выделил следующие основные:

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

Нет однозначного ответа на то, что лучше или хуже. Я выделил следующие моменты:

Если вас интересуют более подробные детали, я предлагаю вам ознакомиться с моей статьей “Вам не нужны хостинговые LLM, верно?”

  • LLaMA-2 от Meta
  • Falcon от Technology Innovation Institute в Абу-Даби
  • Mistral от Mistral AI

Исследуйте Коллекцию LLM, чтобы просмотреть все модели.

3. Искусство создания подсказок

Я знаю, я знаю, многие считают это псевдонаукой или просто временным хайпом. Но правда в том, что мы до сих пор не полностью понимаем, как работают LLMs. Почему они иногда предоставляют ответы высокого качества, а иногда фабрикуют факты (галлюцинируют)? Или почему добавление “давайте мыслить шаг за шагом” к подсказке вдруг повышает качество?

Добавление эмоциональной окраски повышает качество на любых моделях. Источник

Из-за всего этого ученые и энтузиасты могут только экспериментировать с разными подсказками, пытаясь улучшить работу моделей.

Схематическое изображение различных подходов к решению задач с использованием LLMs

Я не буду вас утомлять сложными цепочками подсказок; вместо этого, я приведу несколько примеров, которые мгновенно улучшат производительность:

  1. “Давайте мыслить шаг за шагом” – отлично подходит для логических задач..
  2. “Глубокий вдох и работа над этой проблемой шаг за шагом” – улучшенная версия предыдущего пункта. Она может добавить несколько процентов к качеству.
  3. “Это очень важно для моей карьеры” – просто добавьте это в конец вашей подсказки, и вы заметите улучшение качества на 5-20%.

Кроме того, я поделюсь полезным шаблоном подсказки прямо сейчас:

Давайте сочетать нашу команду X и четкое мышление, чтобы быстро и точно расшифровать ответ в шаг за шагом подходе. Предоставьте детали и укажите источники в ответе. Это очень важно для моей карьеры.

Где X – отрасль задачи, которую вы решаете, например, программирование.

Я настоятельно рекомендую потратить несколько вечеров на изучение методов оперативной техники. Это не только позволит вам лучше контролировать поведение модели, но также поможет улучшить качество и снизить галлюцинации. Для этого я рекомендую ознакомиться с Руководством по оперативной технике.

  • prompttools — тестирование и эксперименты с оперативной техникой, с поддержкой как LLMs (например, OpenAI, LLaMA).
  • promptfoo — тестирование и оценка качества вывода LLM.
  • Awesome ChatGPT Prompts — сборник примеров оперативной техники для использования с моделью ChatGPT.

4. Включение новых данных: Retrieval Augmented Generation (RAG)

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

Несмотря на пугающее название (иногда мы добавляем к нему слово “переоценщик”), на самом деле это довольно старая и удивительно простая техника:

Схематическое представление работы RAG
  1. Преобразуйте документы в числа, мы называем их векторы.
  2. Затем преобразуйте поисковый запрос пользователя в векторы с использованием той же модели.
  3. Найдите топ-K наиболее близких документов, обычно основываясь на косинусном сходстве.
  4. Попросите LLM сгенерировать ответ на основе этих документов.

Когда использовать

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

Когда НЕ использовать

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

Создание приложения с использованием RAG

Отличным стартовым положением является использование библиотеки LlamaIndex. Она позволяет быстро подключить данные к LLM. Для этого вам понадобится всего несколько строк кода:

from llama_index import VectorStoreIndex, SimpleDirectoryReader# 1. Загрузите ваши документы:documents = SimpleDirectoryReader("YOUR_DATA").load_data()# 2. Преобразуйте их в векторы:index = VectorStoreIndex.from_documents(documents)# 3. Задайте вопрос:query_engine = index.as_query_engine()response = query_engine.query("Когда день рождения моего начальника?")print(response)

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

5. Тонкая настройка вашего LLM

Тонкая настройка – это процесс продолжения обучения предварительно обученного LLM на конкретных наборах данных. Вы можете спросить, зачем нам нужно дополнительно обучать модель, если мы уже можем добавлять данные с помощью RAG. Простой ответ в том, что только тонкая настройка может настроить вашу модель на понимание конкретной области или определение ее стиля. Например, я создал копию себя, настроив модель на моей переписке:

Демонстрация тонко настроенной модели на моей переписке

Хорошо, если я вас убедил в ее важности, давайте посмотрим, как это работает (предупреждение – это не так сложно):

Классический подход к тонкой настройке на предметно-ориентированных данных (все иконки из flaticon)
  1. Возьмите обученный LLM, иногда называемый базовым LLM. Вы можете их загрузить с помощью HuggingFace.
  2. Подготовьте ваши тренировочные данные. Вам нужно только составить инструкции и ответы. Вот пример такого набора данных. Вы также можете создать синтетические данные с помощью GPT-4.
  3. Выберите подходящий метод тонкой настройки. LoRA и QLoRA в настоящее время популярны.
  4. Проведите тонкую настройку модели на новых данных.

Когда использовать

  • Специализированные приложения: Когда приложение работает со специализированными или нестандартными темами. Например, приложения для обработки юридических документов, которым необходимо понимать и обрабатывать юридическую терминологию.
  • Пользовательские стили языка: Для приложений, требующих определенного тона или стиля. Например, создание ИИ-персонажа, будь то знаменитость или персонаж из книги.

Когда НЕ использовать

  • Широкие приложения: Когда область применения является общей и не требует специализированных знаний.
  • Ограниченные данные: Тонкая настройка требует значительного объема связанных данных. Однако вы всегда можете сгенерировать их с помощью другого LLM. Например, набор данных Alpaca из 52 тысяч LLM-сгенерированных пар инструкций и ответов был использован для создания первой модели тонкой настройки Llama v1 в начале этого года.

Тонкая настройка вашего LLM

Вы можете найти огромное количество статей, посвященных тонкой настройке модели. Только на VoAGI их тысячи. Поэтому я не хочу углубляться в эту тему и покажу вам библиотеку высокого уровня Lit-GPT, которая скрывает все магию внутри. Да, она не позволяет настраивать процесс обучения, но вы можете быстро проводить эксперименты и получать первичные результаты. Вам понадобится всего несколько строк кода:

# 1. Скачайте модель: python scripts/download.py --repo_id meta-llama/Llama-2-7b# 2. Преобразуйте контрольную точку в формат lit-gpt: python scripts/convert_hf_checkpoint.py --checkpoint_dir checkpoints/llama# 3. Сгенерируйте набор данных для настройки инструкций: python scripts/prepare_alpaca.py  # это должен быть ваш набор данных# 4. Запустите скрипт донастройки моделиpython finetune/lora.py \    --checkpoint_dir checkpoints/llama/    --data_dir your_data_folder/    --out_dir my_finetuned_model/ 

Вот и все! Ваш процесс обучения начнется:

Помните, что процесс может занимать много времени. Для донастройки Falcon-7B на одном графическом процессоре A100 понадобится примерно 10 часов и 30 ГБ памяти.

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

6. Развертывание вашего приложения LLM

Иногда все, чего мы хотим, это просто нажать кнопку “развернуть”…

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

  • Множество готовых оберток и интеграций.
  • Большой выбор доступных моделей.
  • Множество внутренних оптимизаций.
  • Быстрая прототипирование.

Выбор правильного фреймворка

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

Также в моей статье «7 фреймворков для обслуживания LLM» я предоставляю более подробный обзор существующих решений. Рекомендую ознакомиться с ней, если вы планируете развернуть свою модель.

Сравнение фреймворков для вывода LLM

Пример кода для развертывания

Давайте перейдем от теории к практике и попробуем развернуть LLaMA-2 с помощью Text Generation Inference. И, как вы могли догадаться, вам понадобится всего несколько строк кода:

# 1. Создайте папку, в которой будет храниться ваша модель:mkdir data# 2. Запустите контейнер Docker (запустите службу RestAPI):docker run --gpus all --shm-size 1g -p 8080:80 \    -v $volume:/data \    ghcr.io/huggingface/text-generation-inference:1.1.0    --model-id meta-llama/Llama-2-7b# 3. Теперь вы можете отправлять запросы:curl 127.0.0.1:8080/generate \    -X POST \    -d '{"inputs":"Пошути мне!","parameters":{"max_new_tokens":20}}' \    -H 'Content-Type: application/json'

Это все! Вы настроили службу RestAPI с встроенным ведением журнала, конечной точкой Prometheus для мониторинга, потоковой передачей токенов, и ваша модель полностью оптимизирована. Не волшебно ли это?

Документация API

7. Что остается за кулисами

Несмотря на то, что мы рассмотрели основные концепции, необходимые для разработки приложений на основе LLM, в будущем вы встретите еще некоторые аспекты. Поэтому я хотел бы оставить несколько полезных ссылок:

Оптимизация

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

Оценка

Предположим, у вас есть настроенная модель. Но как быть уверенными, что ее качество улучшилось? Какие метрики следует использовать?

Векторные базы данных

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

Агенты LLM

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

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

Обучение с подкреплением на основе обратной связи от людей (RLHF)

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

Заключение

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

Спасибо за внимание, ожидайте новых статей!

Отказ от ответственности: Информация в статье актуальна на ноябрь 2023 года, но помните, что впоследствии могут произойти изменения.

Если не указано иное, все изображения принадлежат автору.

Если у вас есть вопросы или предложения, не стесняйтесь обращаться в LinkedIn.