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

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

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

Некоторые примеры проектов, использующих LLM:
- Введение в энтропию и индекс Джини
- Графовая наука данных для табличных данных
- Введение в глубокое обучение для последовательных данных
- Notion AI — помогает улучшить качество письма, генерировать контент, исправлять орфографию и грамматику, редактировать голос и интонацию, переводить и многое другое.
- GitHub Copilot — улучшает ваш код, предлагая подсказки в стиле автозаполнения.
- Dropbox Dash — предоставляет функциональность поиска на естественном языке и указывает, из каких файлов был получен ответ.
Если вы хотите более подробно разобраться в работе LLM, я настоятельно рекомендую ознакомиться с отличной статьей “Очень легкое введение в большие языковые модели без лишней помпы” Марка Ридла.
2. Открытые vs Закрытые модели исходного кода
Хотя есть несколько различий, я выделил следующие основные:
- Конфиденциальность — одна из самых важных причин, по которым крупные компании выбирают самостоятельные решения.
- Быстрое прототипирование — прекрасно подходит для малых стартапов для быстрого тестирования своих идей без чрезмерных затрат.
- Качество генерации — либо вы настраиваете модель под свою конкретную задачу, либо используете платный API.
Нет однозначного ответа на то, что лучше или хуже. Я выделил следующие моменты:
Если вас интересуют более подробные детали, я предлагаю вам ознакомиться с моей статьей “Вам не нужны хостинговые LLM, верно?”
Популярные модели с открытым исходным кодом
Популярные модели с закрытым исходным кодом
Исследуйте Коллекцию LLM, чтобы просмотреть все модели.
3. Искусство создания подсказок
Я знаю, я знаю, многие считают это псевдонаукой или просто временным хайпом. Но правда в том, что мы до сих пор не полностью понимаем, как работают LLMs. Почему они иногда предоставляют ответы высокого качества, а иногда фабрикуют факты (галлюцинируют)? Или почему добавление “давайте мыслить шаг за шагом” к подсказке вдруг повышает качество?

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

Я не буду вас утомлять сложными цепочками подсказок; вместо этого, я приведу несколько примеров, которые мгновенно улучшат производительность:
- “Давайте мыслить шаг за шагом” – отлично подходит для логических задач..
- “Глубокий вдох и работа над этой проблемой шаг за шагом” – улучшенная версия предыдущего пункта. Она может добавить несколько процентов к качеству.
- “Это очень важно для моей карьеры” – просто добавьте это в конец вашей подсказки, и вы заметите улучшение качества на 5-20%.
Кроме того, я поделюсь полезным шаблоном подсказки прямо сейчас:
Давайте сочетать нашу команду X и четкое мышление, чтобы быстро и точно расшифровать ответ в шаг за шагом подходе. Предоставьте детали и укажите источники в ответе. Это очень важно для моей карьеры.
Где X – отрасль задачи, которую вы решаете, например, программирование.
Я настоятельно рекомендую потратить несколько вечеров на изучение методов оперативной техники. Это не только позволит вам лучше контролировать поведение модели, но также поможет улучшить качество и снизить галлюцинации. Для этого я рекомендую ознакомиться с Руководством по оперативной технике.
Полезные ссылки:
- prompttools — тестирование и эксперименты с оперативной техникой, с поддержкой как LLMs (например, OpenAI, LLaMA).
- promptfoo — тестирование и оценка качества вывода LLM.
- Awesome ChatGPT Prompts — сборник примеров оперативной техники для использования с моделью ChatGPT.
4. Включение новых данных: Retrieval Augmented Generation (RAG)
RAG — это метод, позволяющий сочетать LLM с внешними базами знаний. Это позволяет модели добавлять релевантную информацию или конкретные данные, не включенные в исходный набор тренировочных данных.
Несмотря на пугающее название (иногда мы добавляем к нему слово “переоценщик”), на самом деле это довольно старая и удивительно простая техника:

- Преобразуйте документы в числа, мы называем их векторы.
- Затем преобразуйте поисковый запрос пользователя в векторы с использованием той же модели.
- Найдите топ-K наиболее близких документов, обычно основываясь на косинусном сходстве.
- Попросите 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)
В реальных приложениях все гораздо сложнее. Как и в любой разработке, вам встретятся множество нюансов. Например, извлеченные документы могут не всегда быть релевантными для вопроса, или могут возникнуть проблемы со скоростью. Однако, даже на этом этапе, вы можете значительно улучшить качество вашей системы поиска.
Что почитать & Полезные ссылки
- Создание приложений на основе RAG для производства — отличная детальная статья о основных компонентах RAG.
- Почему ваш RAG не надежен в производственной среде — отличная статья от Ахмеда Бесбеса, которая в ясной форме объясняет трудности, которые могут возникнуть при использовании RAG.
- 7 стратегий запросов для навигации по графам знаний с использованием LlamaIndex — информативная статья от Вэньки Гланц, которая подробно и вдумчиво рассматривает создание конвейера RAG с использованием LlamaIndex.
- Инструмент поиска OpenAI — используйте RAG от OpenAI, если вы хотите минимальных усилий.
5. Тонкая настройка вашего LLM
Тонкая настройка – это процесс продолжения обучения предварительно обученного LLM на конкретных наборах данных. Вы можете спросить, зачем нам нужно дополнительно обучать модель, если мы уже можем добавлять данные с помощью RAG. Простой ответ в том, что только тонкая настройка может настроить вашу модель на понимание конкретной области или определение ее стиля. Например, я создал копию себя, настроив модель на моей переписке:

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

- Возьмите обученный LLM, иногда называемый базовым LLM. Вы можете их загрузить с помощью HuggingFace.
- Подготовьте ваши тренировочные данные. Вам нужно только составить инструкции и ответы. Вот пример такого набора данных. Вы также можете создать синтетические данные с помощью GPT-4.
- Выберите подходящий метод тонкой настройки. LoRA и QLoRA в настоящее время популярны.
- Проведите тонкую настройку модели на новых данных.
Когда использовать
- Специализированные приложения: Когда приложение работает со специализированными или нестандартными темами. Например, приложения для обработки юридических документов, которым необходимо понимать и обрабатывать юридическую терминологию.
- Пользовательские стили языка: Для приложений, требующих определенного тона или стиля. Например, создание ИИ-персонажа, будь то знаменитость или персонаж из книги.
Когда НЕ использовать
- Широкие приложения: Когда область применения является общей и не требует специализированных знаний.
- Ограниченные данные: Тонкая настройка требует значительного объема связанных данных. Однако вы всегда можете сгенерировать их с помощью другого 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 ГБ памяти.
Конечно, я немного упростил и только задел тему. На самом деле, процесс донастройки модели намного сложнее, и для достижения лучших результатов вам нужно будет разобраться в различных адаптерах, их параметрах и многом другом. Однако даже после такой простой итерации у вас будет новая модель, которая следует вашим инструкциям.
Что почитать и полезные ссылки
- Создайте себе клон с помощью Fine-tuned LLM — моя статья, в которой я рассказываю о сборе наборов данных, используемых параметрах и даю полезные советы по донастройке.
- Понимание эффективной донастройки больших языковых моделей — отличный учебник, если вы хотите понять детали концепции донастройки и популярные альтернативы с эффективным использованием параметров.
- Fine-tuning LLM с LoRA и QLoRA: отзывы после сотен экспериментов — одна из моих любимых статей для понимания возможностей LoRA.
- Fine-tuning OpenAI — если вы хотите донастроить GPT-3.5 с минимальными усилиями.
6. Развертывание вашего приложения LLM
Иногда все, чего мы хотим, это просто нажать кнопку “развернуть”…
К счастью, это вполне реально. Существует огромное количество фреймворков, специализирующихся на развертывании больших языковых моделей. Что делает их такими хорошими?
- Множество готовых оберток и интеграций.
- Большой выбор доступных моделей.
- Множество внутренних оптимизаций.
- Быстрая прототипирование.
Выбор правильного фреймворка
Выбор фреймворка для развертывания приложения LLM зависит от различных факторов, включая размер модели, требования к масштабируемости приложения и окружение развертывания. В настоящее время разнообразие фреймворков не так велико, поэтому не должно быть слишком сложно понять их различия. Вот для вас подготовлен шпаргалка, которая поможет вам быстро начать:
Также в моей статье «7 фреймворков для обслуживания 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 для мониторинга, потоковой передачей токенов, и ваша модель полностью оптимизирована. Не волшебно ли это?

Что почитать и полезные ссылки
- 7 фреймворков для обслуживания LLM – подробное руководство по обслуживанию LLM с детальным сравнением.
- Конечные точки инференса – продукт от HuggingFace, который позволит вам развернуть любые LLM всего в несколько кликов. Хороший выбор, когда вам нужен быстрый прототип.
7. Что остается за кулисами
Несмотря на то, что мы рассмотрели основные концепции, необходимые для разработки приложений на основе LLM, в будущем вы встретите еще некоторые аспекты. Поэтому я хотел бы оставить несколько полезных ссылок:
Оптимизация
Когда вы запускаете свою первую модель, вы непременно обнаружите, что она не так быстра, как вы хотели бы, и потребляет много ресурсов. Если это ваш случай, вам нужно понять, как ее можно оптимизировать.
- 7 способов ускорить инференс ваших хостинговых LLM – техники для ускорения инференса LLM, чтобы увеличить скорость генерации токенов и снизить потребление памяти.
- Оптимизация потребления памяти при обучении LLM в PyTorch – статья предлагает серию техник, которые могут снизить потребление памяти в PyTorch примерно в 20 раз без потери производительности и точности прогнозирования моделирования.
Оценка
Предположим, у вас есть настроенная модель. Но как быть уверенными, что ее качество улучшилось? Какие метрики следует использовать?
- Все о оценке моделей на больших языках – хорошая обзорная статья о бенчмарках и метриках.
- evals – самый популярный фреймворк для оценки LLM и LLM-систем.
Векторные базы данных
Если вы работаете с RAG, рано или поздно вы перейдете от хранения векторов в памяти к базе данных. Для этого важно понимать, что сейчас есть на рынке и какие у них ограничения.
- Все, что вам нужно знать о векторных базах данных – пошаговое руководство от Dominik Polzer для открытия и использования возможностей векторных баз данных.
- Выбор векторной базы данных: сравнение и руководство на 2023 год – сравнение баз данных Pinecone, Weviate, Milvus, Qdrant, Chroma, Elasticsearch и PGvector.
Агенты LLM
По моему мнению, самым многообещающим развитием в области LLM является возможность использования нескольких моделей вместе. Если вы хотите, чтобы несколько моделей работали вместе, рекомендую посмотреть следующие ссылки.
- Обзор LLM-основанных автономных агентов — это, вероятно, самый полный обзор LLM-основанных агентов.
- autogen — это фреймворк, который позволяет разрабатывать приложения LLM, используя несколько агентов, способных общаться друг с другом для решения задач.
- OpenAgents — открытая платформа для использования и хостинга языковых агентов в различных средах.
Обучение с подкреплением на основе обратной связи от людей (RLHF)
Как только вы предоставляете пользователям доступ к вашей модели, вы начинаете нести ответственность. Что, если она будет грубить? Или раскрывать информацию о создании бомб? Чтобы избежать этого, изучите следующие статьи:
- Иллюстрация обучения с подкреплением на основе обратной связи от людей (RLHF) — обзорная статья, которая подробно описывает технологию RLHF.
- RL4LMs — модульная библиотека RL для настройки языковых моделей под предпочтения людей.
- TRL — набор инструментов для обучения трансформерных языковых моделей с использованием обучения с подкреплением, включая шаг проксимальной политической оптимизации (PPO).
Заключение
Несмотря на все шумиху, от которой мы уже немного устали, LLM будут с нами еще долгое время, и умение понимать их структуру и создавать простые приложения может дать вам значительный толчок в карьере. Надеюсь, мне удалось немного погрузить вас в эту область и показать, что здесь нет ничего сложного или пугающего.
Спасибо за внимание, ожидайте новых статей!
Отказ от ответственности: Информация в статье актуальна на ноябрь 2023 года, но помните, что впоследствии могут произойти изменения.
Если не указано иное, все изображения принадлежат автору.
Если у вас есть вопросы или предложения, не стесняйтесь обращаться в LinkedIn.