𝕏 Подпишитесь на меня в X •
🤗 Hugging Face •
💻 Блог •
📙 Руководство инженера LLM
Курс по LLM разделен на три части:
- 🧩 Основы LLM — необязательный раздел, охватывающий базовые знания по математике, Python и нейронным сетям.
- 🧑🔬 Ученый LLM — фокусируется на создании наиболее эффективных LLM с использованием новейших техник.
- 👷 Инженер LLM — фокусируется на создании приложений на основе LLM и их развертывании.
[!NOTE]
На основе этого курса я соавтором Руководства инженера LLM — практической книги, охватывающей создание LLM-приложения от начала до конца, от проектирования до развертывания. Курс по LLM всегда будет бесплатным, но вы можете поддержать мою работу, приобретя эту книгу.
Для более полной версии этого курса ознакомьтесь с DeepWiki.
📝 Ноутбуки
Список ноутбуков и статей, которые я написал о LLM.
Развернуть/свернуть раздел (необязательно)
Инструменты
| Ноутбук |
Описание |
Ноутбук |
| 🧐 LLM AutoEval |
Автоматическая оценка ваших LLM с использованием RunPod |
 |
| 🥱 LazyMergekit |
Простое объединение моделей с помощью MergeKit в один клик. |
 |
| 🦎 LazyAxolotl |
Тонкая настройка моделей в облаке с помощью Axolotl в один клик. |
 |
| ⚡ AutoQuant |
Квантизация LLM в форматы GGUF, GPTQ, EXL2, AWQ и HQQ в один клик. |
 |
| 🌳 Model Family Tree |
Визуализация семейного дерева объединенных моделей. |
 |
| 🚀 ZeroSpace |
Автоматическое создание чат-интерфейса Gradio с использованием бесплатного ZeroGPU. |
 |
| ✂️ AutoAbliteration |
Автоматическая аблитерация моделей с пользовательскими наборами данных. |
 |
| 🧼 AutoDedup |
Автоматическое дедуплицирование наборов данных с использованием библиотеки Rensa. |
 |
Тонкая настройка
| Ноутбук |
Описание |
Статья |
Ноутбук |
| Тонкая настройка Llama 3.1 с Unsloth |
Сверхэффективная управляемая тонкая настройка в Google Colab. |
Статья |
 |
| Тонкая настройка Llama 3 с ORPO |
Более дешевая и быстрая тонкая настройка в один этап с ORPO. |
Статья |
 |
| Тонкая настройка Mistral-7b с DPO |
Улучшение производительности моделей после управляемой тонкой настройки с помощью DPO. |
Статья |
 |
| Тонкая настройка Mistral-7b с QLoRA |
Управляемая тонкая настройка Mistral-7b в бесплатном Google Colab с TRL. |
|
 |
| Тонкая настройка CodeLlama с помощью Axolotl |
Пошаговое руководство по использованию передового инструмента для тонкой настройки. |
Статья |
 |
| Тонкая настройка Llama 2 с QLoRA |
Пошаговое руководство по управляемой тонкой настройке Llama 2 в Google Colab. |
Статья |
 |
Квантизация
| Ноутбук |
Описание |
Статья |
Ноутбук |
| Введение в квантизацию |
Оптимизация больших языковых моделей с помощью 8-битной квантизации. |
Статья |
 |
| 4-битная квантизация с GPTQ |
Квантизация ваших собственных открытых LLM для запуска на пользовательском оборудовании. |
Статья |
 |
| Квантизация с GGUF и llama.cpp |
Квантизация моделей Llama 2 с помощью llama.cpp и загрузка GGUF-версий в HF Hub. |
Статья |
 |
| ExLlamaV2: Самая быстрая библиотека для запуска LLM |
Квантизация и запуск моделей EXL2 и их загрузка в HF Hub. |
Статья |
 |
Прочее
| Ноутбук | Описание | Статья | Ноутбук |
|---------------------------------------|-------------------------------------------------------------------------|---------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|
| Объединение LLM с MergeKit | Создавайте собственные модели легко, без необходимости в GPU! | Статья |
|
| Создание MoEs с MergeKit | Объедините несколько экспертов в один «франкен-модель» (frankenMoE) | Статья |
|
| Расцензурирование любой LLM с помощью abliteration | Тонкая настройка без переобучения | Статья |
|
| Улучшение ChatGPT с помощью графов знаний | Расширьте ответы ChatGPT с использованием графов знаний. | Статья |
|
| Стратегии декодирования в больших языковых моделях | Руководство по генерации текста: от поиска по лучу до выбора ядра (nucleus sampling) | Статья |
|
🧩 Основы LLM
Этот раздел знакомит с основными знаниями в области математики, Python и нейронных сетей. Вы можете не начинать с него, но при необходимости обращайтесь к нему.
Развернуть раздел (по желанию)

1. Математика для машинного обучения
Прежде чем осваивать машинное обучение, важно понять фундаментальные математические концепции, лежащие в основе этих алгоритмов.
- Линейная алгебра: Критически важна для понимания многих алгоритмов, особенно используемых в глубоком обучении. Ключевые концепции включают векторы, матрицы, определители, собственные значения и собственные векторы, векторные пространства и линейные преобразования.
- Математический анализ: Многие алгоритмы машинного обучения связаны с оптимизацией непрерывных функций, что требует понимания производных, интегралов, пределов и рядов. Многомерный анализ и概念ия градиентов также важны.
- Теория вероятностей и статистика: Критически важны для понимания того, как модели обучаются на данных и делают прогнозы. Ключевые концепции: теория вероятностей, случайные величины, распределения вероятностей, математическое ожидание, дисперсия, ковариация, корреляция, проверка гипотез, доверительные интервалы, оценка максимального правдоподобия и байесовский вывод.
📚 Ресурсы:
2. Python для машинного обучения
Python — мощный и гибкий язык программирования, особенно подходящий для машинного обучения благодаря своей читаемости, согласованности и богатой экосистеме библиотек для работы с данными.
- Основы Python: Программирование на Python требует хорошего понимания базового синтаксиса, типов данных, обработки ошибок и объектно-ориентированного программирования.
- Библиотеки для науки о данных: Включает знакомство с NumPy для числовых операций, Pandas для обработки и анализа данных, Matplotlib и Seaborn для визуализации данных.
- Предварительная обработка данных: Включает масштабирование и нормализацию признаков, обработку пропущенных данных, обнаружение выбросов, кодирование категориальных данных и разделение данных на обучающую, валидационную и тестовую выборки.
- Библиотеки машинного обучения: Необходимо владение Scikit-learn, библиотекой, предоставляющей широкий выбор алгоритмов обучения с учителем и без учителя. Важно понимать, как реализовать такие алгоритмы, как линейная регрессия, логистическая регрессия, деревья решений, случайные леса, метод k-ближайших соседей (k-NN) и кластеризация k-means. Методы снижения размерности, такие как PCA и t-SNE, также полезны для визуализации многомерных данных.
📚 Ресурсы:
3. Нейронные сети
Нейронные сети являются фундаментальной частью многих моделей машинного обучения, особенно в области глубокого обучения. Для их эффективного использования необходимо глубокое понимание их устройства и механизмов.
- Основы: Включает понимание структуры нейронной сети, такой как слои, веса, смещения и функции активации (сигмоид, tanh, ReLU и т.д.)
- Обучение и оптимизация: Ознакомьтесь с обратным распространением ошибки и различными типами функций потерь, такими как среднеквадратичная ошибка (MSE) и кросс-энтропия. Поймите различные алгоритмы оптимизации, такие как градиентный спуск, стохастический градиентный спуск, RMSprop и Adam.
- Переобучение: Понимайте концепцию переобучения (когда модель хорошо работает на обучающих данных, но плохо — на новых данных) и изучите различные методы регуляризации (дропаут, регуляризация L1/L2, ранняя остановка, аугментация данных) для его предотвращения.
- Реализация многослойного перцептрона (MLP): Создайте MLP, также известную как полностью связанная сеть, с использованием PyTorch.
📚 Ресурсы:
4. Обработка естественного языка (NLP)
NLP — это увлекательная область искусственного интеллекта, которая соединяет разрыв между человеческим языком и машинным пониманием. От простой обработки текста до понимания лингвистических нюансов, NLP играет важную роль во многих приложениях, таких как перевод, анализ тональности, чат-боты и многом другом.
- Предобработка текста: Изучите различные этапы предобработки текста, такие как токенизация (разбиение текста на слова или предложения), стемминг (сведение слов к их корневой форме), лемматизация (аналогично стеммингу, но с учётом контекста), удаление стоп-слов и другие.
- Методы извлечения признаков: Ознакомьтесь с методами преобразования текстовых данных в формат, понятный алгоритмам машинного обучения. Основные методы включают «мешок слов» (Bag-of-words, BoW), частоту термина — обратную частоту документа (TF-IDF) и n-граммы.
- Словесные эмбеддинги: Словесные эмбеддинги — это тип представления слов, который позволяет словам со схожими значениями иметь похожие представления. Основные методы: Word2Vec, GloVe и FastText.
- Рекуррентные нейронные сети (RNNs): Поймите, как работают RNN — тип нейронной сети, разработанный для работы с последовательными данными. Изучите LSTM и GRU — два варианта RNN, способных улавливать долгосрочные зависимости.
📚 Ресурсы:
🧑🔬 Учёный по LLM
Этот раздел курса сосредоточен на изучении того, как создавать как можно более качественные LLM, используя новейшие техники.

1. Архитектура LLM
Глубокое знание архитектуры трансформеров не требуется, но важно понять основные этапы работы современных LLM: преобразование текста в числа через токенизацию, обработку этих токенов слоями, включая механизмы внимания, и, наконец, генерацию нового текста с помощью различных стратегий сэмплирования.
- Архитектурный обзор: Поймите эволюцию от трансформеров типа «кодировщик-декодер» к архитектурам только с декодером, таким как GPT, которые лежат в основе современных LLM. Сосредоточьтесь на том, как эти модели на высоком уровне обрабатывают и генерируют текст.
- Токенизация: Изучите принципы токенизации — как текст преобразуется в числовые представления, которые могут обрабатывать LLM. Исследуйте различные стратегии токенизации и их влияние на производительность модели и качество выходных данных.
- Механизмы внимания: Освойте ключевые концепции механизмов внимания, в особенности само-внимание (self-attention) и его варианты. Поймите, как эти механизмы позволяют LLM обрабатывать долгосрочные зависимости и сохранять контекст на протяжении последовательностей.
- Методы сэмплирования: Исследуйте различные подходы к генерации текста и их компромиссы. Сравните детерминированные методы, такие как жадный (greedy) поиск и поиск по лучам (beam search), со вероятностными подходами, такими как сэмплирование с температурой (temperature sampling) и ядерное сэмплирование (nucleus sampling).
📚 Справочные материалы:
* Visual intro to Transformers от 3Blue1Brown: Визуальное введение в трансформеры для абсолютных новичков.
* LLM Visualization от Brendan Bycroft: Интерактивная 3D-визуализация внутренней работы LLM.
* nanoGPT от Andrej Karpathy: Часовой видеоурок по воссозданию GPT с нуля (для программистов). Он также создал видео о токенизации.
* Attention? Attention! от Lilian Weng: Исторический обзор, объясняющий необходимость механизмов внимания.
* Decoding Strategies in LLMs от Maxime Labonne: Предоставляет код и визуальное введение в различные стратегии декодирования для генерации текста.
2. Предобучение моделей
Предобучение — это вычислительно интенсивный и дорогостоящий процесс. Хотя оно не является основным фокусом этого курса, важно иметь твёрдое понимание того, как модели предобучаются, особенно в плане данных и параметров. Предобучение также может быть выполнено энтузиастами в небольшом масштабе с моделями <1B.
- Подготовка данных: Предобучение требует огромных наборов данных (например, Llama 3.1 была обучена на 15 триллионах токенов), которые требуют тщательной курирования, очистки, дедупликации и токенизации. Современные конвейеры предобучения реализуют сложную фильтрацию для удаления некачественного или проблемного контента.
- Распределённое обучение: Комбинируйте различные стратегии параллелизации: параллелизм по данным (распределение батчей), конвейерный (пайплайновый) параллелизм (распределение слоев) и тензорный параллелизм (разбиение операций). Эти стратегии требуют оптимизированного сетевого взаимодействия и управления памятью на кластерах GPU.
- Оптимизация обучения: Используйте адаптивные скорости обучения с разогревом (warm-up), обрезку градиентов и нормализацию для предотвращения их «взрывов», смешанно-точностное (mixed-precision) обучение для экономии памяти и современные оптимизаторы (AdamW, Lion) с настроенными гиперпараметрами.
- Мониторинг: Отслеживайте ключевые метрики (потери, градиенты, статистика GPU) с помощью информационных панелей, реализуйте целевое логирование для проблем распределённого обучения и настройте профилирование производительности для выявления узких мест в вычислениях и коммуникации между устройствами.
📚 Справочные материалы:
* FineWeb от Penedo и др.: Статья о воссоздании крупномасштабного набора данных для предобучения LLM (15T), включая FineWeb-Edu,高质量子集.
* RedPajama v2 от Weber и др.: Еще одна статья и документ о крупномасштабном наборе данных для предобучения с множеством интересных фильтров качества.
* nanotron от Hugging Face: Минималистичная кодовая база для обучения LLM, использованная для создания SmolLM2.
* Parallel training от Chenyan Xiong: Обзор техник оптимизации и параллелизма.
* Distributed training от Duan и др.: Обзор эффективного обучения LLM на распределённых архитектурах.
* OLMo 2 от AI2: Open-source языковая модель с кодом модели, данных, обучения и оценки.
* LLM360 от LLM360: Фреймворк для open-source LLM с кодом для обучения и подготовки данных, данными, метриками и моделями.
3. Датасеты для постобучения
Датасеты для постобучения имеют точную структуру с инструкциями и ответами (контролируемая тонкая настройка, SFT) или инструкциями и выбранными/отвергнутыми ответами (выравнивание по предпочтениям). Разговорные структуры встречаются гораздо реже, чем сырой текст, используемый для предобучения, поэтому нам часто необходимо обрабатывать исходные данные и уточнять их для повышения точности, разнообразия и сложности примеров. Дополнительную информацию и примеры можно найти в моем репозитории 💾 LLM Datasets.
- Хранение и шаблоны чатов: Из-за разговорной структуры датасеты для постобучения хранятся в специальном формате, таком как ShareGPT или OpenAI/HF. Затем эти форматы сопоставляются с шаблоном чата, например ChatML или Alpaca, для создания финальных примеров, на которых обучается модель.
- Генерация синтетических данных: Создание пар «инструкция-ответ» на основе исходных данных с использованием передовых моделей, таких как GPT-4o. Этот подход позволяет гибко и масштабно создавать датасеты с качественными ответами. Ключевые соображения включают проектирование разнообразных исходных задач и эффективных системных промптов.
- Улучшение данных: Улучшение существующих примеров с помощью таких методов, как проверенные выводы (с использованием модульных тестов или решателей), несколько ответов с отбором отрицанием (rejection sampling), Auto-Evol, цепочка рассуждений (Chain-of-Thought), раздели-реши-объедини (Branch-Solve-Merge), персонажи (personas) и другие.
- Фильтрация по качеству: Традиционные методы включают фильтрацию на основе правил, удаление дубликатов или почти дубликатов (с помощью MinHash или эмбеддингов) и дегоменизацию n-грамм. Модели вознаграждения и судейские LLM дополняют этот шаг тонкой и настраиваемой проверкой качества.
📚 Ссылки:
* Synthetic Data Generator от Argilla: Простой для начинающих способ создания наборов данных с помощью естественного языка в пространстве Hugging Face.
* LLM Datasets от Maxime Labonne: Отобранный список наборов данных и инструментов для пост-тренировки.
* NeMo-Curator от Nvidia: Фреймворк подготовки и курирования данных для пред- и пост-тренировки.
* Distilabel от Argilla: Фреймворк для генерации синтетических данных. Также включает интересные воспроизведения статей, таких как UltraFeedback.
* Semhash от MinishLab: Минималистичная библиотека для почти-дедупликации и дегоменизации с использованием дистиллированной модели эмбеддингов.
* Chat Template от Hugging Face: Документация Hugging Face о шаблонах для чатов.
4. Контролируемое дообучение (Supervised Fine-Tuning)
Контролируемое дообучение (SFT) превращает базовые модели в полезных ассистентов, способных отвечать на вопросы и следовать инструкциям. В процессе они учатся структурировать ответы и реактивировать часть знаний, полученных во время предобучения. Усвоение новых знаний возможно, но поверхностно: его нельзя использовать для изучения совершенно нового языка. Всегда отдавайте предпочтение качеству данных, а не оптимизации параметров.
- Техники тренировки: Полное дообучение обновляет все параметры модели, но требует значительных вычислительных ресурсов. Параметр-эффективные техники дообучения, такие как LoRA и QLoRA, снижают требования к памяти, обучая небольшое количество параметров адаптеров, при этом базовые веса остаются замороженными. QLoRA сочетает 4-битную квантизацию с LoRA для снижения использования VRAM. Все эти техники реализованы в самых популярных фреймворках для дообучения: TRL, Unsloth и Axolotl.
- Параметры тренировки: Ключевые параметры включают скорость обучения с планировщиками, размер батча, кумуляцию градиентов, количество эпох, оптимизатор (например, 8-битный AdamW), весовое затухание для регуляризации и шаги прогрева для стабильности тренировки. LoRA также добавляет три параметра: ранг (обычно 16-128), альфу (1-2x ранга) и целевые модули.
- Распределенная тренировка: Масштабируйте тренировку на несколько GPU с помощью DeepSpeed или FSDP. DeepSpeed предоставляет три этапа оптимизации ZeRO с возрастающим уровнем эффективности памяти через секционирование состояния. Оба метода поддерживают контрольные точки градиентов для эффективности памяти.
- Мониторинг: Отслеживайте метрики тренировки, включая кривые потерь, расписания скорости обучения и нормы градиентов. Контролируйте распространенные проблемы, такие как всплески потерь, взрывы градиентов или деградация производительности.
📚 Ссылки:
* Fine-tune Llama 3.1 Ultra-Efficiently with Unsloth от Maxime Labonne: Практическое руководство о том, как дообучить модель Llama 3.1 с использованием Unsloth.
* Axolotl - Документация от Wing Lian: Много интересной информации, связанной с распределенной тренировкой и форматами наборов данных.
* Mastering LLMs от Hamel Husain: Коллекция образовательных ресурсов о дообучении (а также RAG, оценке, приложениях и проектировании промптов).
* LoRA insights от Sebastian Raschka: Практические инсайты о LoRA и том, как выбирать лучшие параметры.
5. Выравнивание по предпочтениям
Выравнивание по предпочтениям — это второй этап в пайплайне пост-тренировки, сосредоточенный на соответствии сгенерированных ответов предпочтениям человека. Этот этап был разработан для настройки тона LLM и снижения токсичности и галлюцинаций. Однако он также стал все более важен для повышения их производительности и полезности. В отличие от SFT, существует множество алгоритмов выравнивания по предпочтениям. Здесь мы сосредоточимся на трех наиболее важных: DPO, GRPO и PPO.
- Отбор методом отклонения (Rejection sampling): Для каждого промпта используйте обученную модель для генерации нескольких ответов и оцените их, чтобы определить выбранные/отвергнутые ответы. Это создает данные "со своей политики", где оба ответа поступают от обучаемой модели, что повышает стабильность выравнивания.
- Оптимизация прямых предпочтений (Direct Preference Optimization) Напрямую оптимизирует политику для максимизации вероятности выбранных ответов по сравнению с отвергнутыми. Она не требует моделирования вознаграждения, что делает ее более вычислительно эффективной, чем методы обучения с подкреплением, но немного хуже по качеству. Отлично подходит для создания моделей для чата.
- Модель вознаграждения (Reward model): Обучите модель вознаграждения на обратной связи человека для предсказания таких метрик, как человеческие предпочтения. Она может использовать фреймворки, такие как TRL, verl и OpenRLHF для масштабируемой тренировки.
- Обучение с подкреплением (Reinforcement Learning): Методы обучения с подкреплением (RL), такие как GRPO и PPO, итеративно обновляют политику для максимизации вознаграждений, сохраняя близость к начальному поведению. Они могут использовать модель вознаграждения или функции вознаграждения для оценки ответов. Они обычно требуют больших вычислительных затрат и тщательной настройки гиперпараметров, включая скорость обучения, размер батча и диапазон обрезки. Идеальны для создания моделей рассуждения.
📚 Ссылки:
* Illustrating RLHF от Hugging Face: Введение в RLHF с обучением модели вознаграждения и дообучением с обучением с подкреплением.
* LLM Training: RLHF and Its Alternatives от Sebastian Raschka: Обзор процесса RLHF и альтернатив, таких как RLAIF.
* Preference Tuning LLMs от Hugging Face: Сравнение алгоритмов DPO, IPO и KTO для выполнения выравнивания по предпочтениям.
* Fine-tune with DPO от Maxime Labonne: Руководство по дообучению модели Mistral-7b с DPO и воспроизведению NeuralHermes-2.5.
* Fine-tune with GRPO от Maxime Labonne: Практическое упражнение по дообучению маленькой модели с GRPO.
* DPO Wandb logs от Alexander Vishnevskiy: Показывает основные метрики DPO для отслеживания и тенденции, которые следует ожидать.
6. Оценка
Надежная оценка LLM — сложная, но необходимая задача, направляющая генерацию данных и тренировку. Она предоставляет бесценную обратную связь о направлениях для улучшения, которую можно использовать для изменения состава данных, их качества и параметров тренировки. Однако всегда полезно помнить закон Гудхарта: "Когда мера становится целью, она перестает быть хорошей мерой".
- Автоматизированные бенчмарки: Оценивайте модели на конкретных задачах с использованием отобранных наборов данных и метрик, таких как MMLU. Хорошо работает для конкретных задач, но испытывает трудности с абстрактными и творческими способностями. Также подвержен загрязнению данных.
- Оценка человеком (Human evaluation): Подразумевает, что люди дают промпты моделям и оценивают ответы. Методы варьируются от проверки "по настроению" до систематических аннотаций с конкретными инструкциями и крупномасштабного голосования сообщества (арена). Более подходит для субъективных задач и менее надежна для проверки фактической точности.
- Оценка на основе моделей (Model-based evaluation): Используйте судейские и модели вознаграждения для оценки выходов моделей. Сильно коррелирует с человеческими предпочтениями, но страдает от предвзятости в отношении собственных выходов и непоследовательности в оценке.
- Сигнал обратной связи: Анализируйте паттерны ошибок для выявления конкретных слабых мест, таких как ограничения в следовании сложным инструкциям, недостаток специфических знаний или подверженность враждебным промптам. Это можно улучшить за счет более качественной генерации данных и параметров тренировки.
📚 Ссылки:
* LLM evaluation guidebook от Hugging Face: Всеобъемлющее руководство об оценке с практическими инсайтами.
* Open LLM Leaderboard от Hugging Face: Основная таблица лидеров для сравнения LLM открытым и воспроизводимым способом (автоматизированные бенчмарки).
* Language Model Evaluation Harness от EleutherAI: Популярный фреймворк для оценки LLM с использованием автоматизированных бенчмарков.
* Lighteval от Hugging Face: Альтернативный фреймворк оценки, который также включает оценки на основе моделей.
- Чатбот Арена от LMSYS: Elo-рейтинг универсальных языковых моделей, основанный на сравнениях, сделанных людьми (оценка человеком).
7. Квантизация
Квантизация — это процесс преобразования параметров и активаций модели в представление с меньшей точностью. Например, веса, хранимые с использованием 16 бит, могут быть преобразованы в 4-битное представление. Эта техника приобретает всё большее значение для снижения вычислительных и памятных затрат, связанных с языковыми моделями.
- Базовые техники: Изучите различные уровни точности (FP32, FP16, INT8 и т.д.) и то, как выполнять наивную квантизацию с использованием техник absmax и zero-point.
- GGUF & llama.cpp: Изначально разработанные для запуска на CPU, llama.cpp и формат GGUF стали самыми популярными инструментами для запуска языковых моделей на.consumer-grade оборудовании. Он поддерживает хранение специальных токенов, словаря и метаданных в одном файле.
- GPTQ & AWQ: Техники такие как GPTQ/EXL2 и AWQ вводят послойную калибровку, которая сохраняет производительность при экстремально низких разрядностях. Они уменьшают катастрофические выбросы с помощью динамического масштабирования, избирательно пропуская или центрируя наиболее тяжелые параметры.
- SmoothQuant & ZeroQuant: Новые трансформации, удобные для квантизации (SmoothQuant), и оптимизации на основе компилятора (ZeroQuant) помогают смягчить выбросы перед квантизацией. Они также снижают аппаратные накладные расходы за счет слияния некоторых операций и оптимизации потока данных.
📚 Ссылки:
* Введение в квантизацию от Maxime Labonne: Обзор квантизации, квантизации absmax и zero-point, а также LLM.int8() с кодом.
* Квантизация моделей Llama с помощью llama.cpp от Maxime Labonne: Руководство по квантизации модели Llama 2 с использованием llama.cpp и формата GGUF.
* 4-битная квантизация языковых моделей с GPTQ от Maxime Labonne: Руководство по квантизации языковой модели с использованием алгоритма GPTQ и AutoGPTQ.
* Понимание квантизации весов с учетом активаций (AWQ) от FriendliAI: Обзор техники AWQ и ее преимуществ.
* SmoothQuant для Llama 2 7B от MIT HAN Lab: Руководство по использованию SmoothQuant с моделью Llama 2 в 8-битной точности.
* Сжатие моделей DeepSpeed от DeepSpeed: Руководство по использованию ZeroQuant и экстремального сжатия (XTC) с DeepSpeed Compression.
8. Новые тенденции
Вот заметные темы, которые не вписались в другие категории. Некоторые из них — устоявшиеся техники (слияние моделей, мультимодальность), но другие более экспериментальные (интерпретируемость, масштабирование вычислений во время тестирования) и являются предметом многочисленных научных работ.
- Слияние моделей: Слияние обученных моделей стало популярным способом создания производительных моделей без дообучения. Популярная библиотека mergekit реализует наиболее распространенные методы слияния, такие как SLERP, DARE и TIES.
- Мультимодальные модели: Эти модели (такие как CLIP, Stable Diffusion или LLaVA) обрабатывают несколько типов входов (текст, изображения, аудио и т.д.) с использованием единого пространства встраивания, что открывает мощные приложения, такие как текст-в-изображение.
- Интерпретируемость: Техники механистической интерпретируемости, такие как разреженные автоэнкодеры (SAEs), добились заметного прогресса в предоставлении представлений о внутреннем устройстве языковых моделей. Это также было применено в техниках вроде аблитерации, которые позволяют изменять поведение моделей без обучения.
- Вычисления во время тестирования: Модели рассуждения, обученные с использованием методов обучения с подкреплением, могут быть进一步 улучшены за счет масштабирования вычислительного бюджета во время тестирования. Это может включать множественные вызовы, MCTS или специализированные модели, такие как модель вознаграждения за процесс (PRM). Итеративные шаги со скрупулезным подсчетом баллов значительно повышают производительность для сложных задач рассуждения.
📚 Ссылки:
* Слияние LLM с mergekit от Maxime Labonne: Руководство по слиянию моделей с использованием mergekit.
* Smol Vision от Merve Noyan: Коллекция блокнотов и скриптов, посвященных небольшим мультимодальным моделям.
* Большие мультимодальные модели от Chip Huyen: Обзор мультимодальных систем и недавней истории этой области.
* Снятие цензуры с любой LLM с помощью аблитерации от Maxime Labonne: Прямое применение техник интерпретируемости для изменения стиля модели.
* Интуитивное объяснение SAEs от Adam Karvonen: Статья о том, как работают SAEs и почему они имеют смысл для интерпретируемости.
* Масштабирование вычислений во время тестирования от Beeching и др.: Руководство и эксперименты по превосхождению Llama 3.1 70B на MATH-500 с моделью 3B.
👷 Инженер языковых моделей
Этот раздел курса сосредоточен на изучении того, как создавать приложения на основе языковых моделей, которые можно использовать в продакшене, с акцентом на расширение возможностей моделей и их развертывание.

1. Запуск языковых моделей
Запуск языковых моделей может быть сложным из-за высоких аппаратных требований. В зависимости от вашего варианта использования, вы можете просто потреблять модель через API (например, GPT-4) или запускать ее локально. В любом случае, дополнительные техники промптинга и управления могут улучшить и ограничить вывод для ваших приложений.
- API для языковых моделей: API — это удобный способ развертывания языковых моделей. Это пространство разделено между проприетарными языковыми моделями (OpenAI, Google, Anthropic и т.д.) и моделями с открытым исходным кодом (OpenRouter, Hugging Face, Together AI и т.д.).
- Языковые модели с открытым исходным кодом: Hugging Face Hub — отличное место для поиска языковых моделей. Вы можете запустить некоторые из них напрямую в Hugging Face Spaces или скачать и запустить их локально в приложениях вроде LM Studio или через CLI с помощью llama.cpp или ollama.
- Инженерия промптов: Распространенные техники включают zero-shot промптинг, few-shot промптинг, цепочку мыслей (Chain of Thought) и ReAct. Они работают лучше с большими моделями, но могут быть адаптированы для较小ых.
- Структурирование вывода: Многие задачи требуют структурированного вывода, например, строгого шаблона или формата JSON. Библиотеки вроде Outlines могут использоваться для управления генерацией и соблюдения заданной структуры. Некоторые API также поддерживают генерацию структурированного вывода нативно с использованием JSON-схем.
📚 Ссылки:
* Запуск языковой модели локально с LM Studio от Nisha Arya: Краткое руководство по использованию LM Studio.
* Руководство по инженерии промптов от DAIR.AI: Исчерпывающий список техник промптинга с примерами.
* Outlines - Быстрый старт: Список техник управляемой генерации, поддерживаемых Outlines.
* LMQL - Обзор: Введение в язык LMQL.
2. Создание векторного хранилища
Создание векторного хранилища — это первый шаг к построению пайплайна RAG (Retrieval Augmented Generation, генерация с усилением извлечением). Документы загружаются, разделяются, и релевантные фрагменты используются для создания векторных представлений (эмбеддингов), которые сохраняются для последующего использования при выводе.
- Загрузка документов: Загрузчики документов — это удобные обертки, которые могут обрабатывать множество форматов: PDF, JSON, HTML, Markdown и т.д. Они также могут напрямую извлекать данные из некоторых баз данных и API (GitHub, Reddit, Google Drive и т.д.).
- Разделение документа: Разделители текста разбивают документы на более мелкие, семантически осмысленные фрагменты. Вместо разделения текста после n символов, часто лучше разделять по заголовкам или рекурсивно, с некоторыми дополнительными метаданными.
- Модели эмбеддингов (Embedding models): Модели эмбеддингов преобразуют текст в векторные представления. Выбор моделей, специфичных для конкретной задачи, значительно повышает производительность при семантическом поиске и генеративном расширении контекста (RAG).
- Векторные базы данных: Векторные базы данных (такие как Chroma, Pinecone, Milvus, FAISS, Annoy и др.) предназначены для хранения векторных эмбеддингов. Они обеспечивают эффективный поиск данных, наиболее 'похожих' на запрос на основе векторного сходства.
📚 Ссылки:
* LangChain - Разделители текста: Список различных разделителей текста, реализованных в LangChain.
* Библиотека Sentence Transformers: Популярная библиотека для моделей эмбеддингов.
* Таблица лидеров MTEB: Таблица лидеров для моделей эмбеддингов.
* Топ-7 векторных баз данных от Моеза Али: Сравнение лучших и самых популярных векторных баз данных.
3. Генеративное расширение контекста (RAG)
С RAG языковые модели (LLM) извлекают контекстуальные документы из базы данных для повышения точности своих ответов. RAG — это популярный способ расширения знаний модели без дообучения.
- Оркестраторы: Оркестраторы, такие как LangChain и LlamaIndex, являются популярными фреймворками для связывания ваших LLM с инструментами и базами данных. Протокол контекста модели (Model Context Protocol, MCP) вводит новый стандарт передачи данных и контекста моделям от разных провайдеров.
- Извлекатели: Переписыватели запросов и генеративные извлекатели, такие как CoRAG и HyDE, улучшают поиск, трансформируя пользовательские запросы. Мультивекторные и гибридные методы извлечения комбинируют эмбеддинги с ключевыми словами для повышения полноты и точности.
- Память: Чтобы помнить предыдущие инструкции и ответы, LLM и чат-боты, такие как ChatGPT, добавляют эту историю в свое контекстное окно. Этот буфер можно улучшить с помощью суммаризации (например, с использованием较小шей LLM), векторного хранилища + RAG и т.д.
- Оценка: Нам необходимо оценивать как этап извлечения документов (точность и полнота контекста), так и этап генерации (добросовестность и релевантность ответа). Это может быть упрощено с помощью инструментов Ragas и DeepEval (для оценки качества).
📚 Ссылки:
* LlamaIndex - Основные концепции: Основные концепции, которые необходимо знать при построении RAG-конвейеров.
* Протокол контекста модели: Введение в MCP: мотивация, архитектура и быстрый старт.
* Pinecone - Расширение контекста для извлечения: Обзор процесса расширения контекста для извлечения.
* LangChain - Q&A с RAG: Пошаговое руководство по созданию типичного RAG-конвейера.
* LangChain - Типы памяти: Список различных типов памяти с примерами их использования.
* RAG-конвейер - Метрики: Обзор основных метрик, используемых для оценки RAG-конвейеров.
4. Продвинутый RAG
Реальные приложения могут требовать сложных конвейеров, включающих SQL или графовые базы данных, а также автоматический выбор релевантных инструментов и API. Эти продвинутые методы могут улучшить базовое решение и предоставить дополнительные функции.
- Построение запросов (Query construction): Структурированные данные, хранящиеся в традиционных базах данных, требуют специального языка запросов, такого как SQL, Cypher, метаданные и т.д. Мы можем напрямую перевести инструкцию пользователя в запрос для доступа к данным с помощью построения запросов.
- Инструменты (Tools): Агенты расширяют возможности LLM, автоматически выбирая наиболее релевантные инструменты для предоставления ответа. Эти инструменты могут быть такими простыми, как использование Google или Википедии, или более сложными, как интерпретатор Python или Jira.
- Постобработка (Post-processing): Финальный этап, который обрабатывает входные данные, подаваемые в LLM. Он повышает релевантность и разнообразие извлеченных документов с помощью переранжирования, RAG-fusion и классификации.
- Программные LLM (Program LLMs): Фреймворки, такие как DSPy, позволяют оптимизировать промпты и веса на основе автоматизированных оценок программным способом.
📚 Ссылки:
* LangChain - Построение запросов: Блог-пост о различных типах построения запросов.
* LangChain - SQL: Руководство по взаимодействию с SQL базами данных с помощью LLM, включая Text-to-SQL и опциональный SQL-агент.
* Pinecone - LLM-агенты: Введение в агенты и инструменты различных типов.
* Автономные агенты на базе LLM от Лилиан Венг: Более теоретическая статья об агентах на базе LLM.
* LangChain - RAG от OpenAI: Обзор стратегий RAG, используемых OpenAI, включая постобработку.
* DSPy за 8 шагов: Универсальное руководство по DSPy, включающее модули, сигнатуры и оптимизаторы.
5. Агенты
Агент LLM может выполнять задачи автономно, совершая действия на основе рассуждений о своей среде, как правило, с помощью инструментов или функций для взаимодействия с внешними системами.
- Основы агентов: Агенты работают, используя мысли (внутренние рассуждения для решения, что делать дальше), действие (выполнение задач, часто через взаимодействие с внешними инструментами) и наблюдение (анализ обратной связи или результатов для уточнения следующего шага).
- Протоколы агентов: Протокол контекста модели (Model Context Protocol, MCP) является отраслевым стандартом для подключения агентов к внешним инструментам и источникам данных с помощью MCP-серверов и клиентов. Более недавно Agent2Agent (A2A) пытается стандартизировать общий язык для совместной работы агентов.
- Вендорные фреймворки: Каждый крупный облачный провайдер моделей имеет собственный агентный фреймворк: OpenAI SDK, Google ADK и Claude Agent SDK, если вы особенно привязаны к одному поставщику.
- Другие фреймворки: Разработку агентов можно упростить с помощью различных фреймворков, таких как LangGraph (дизайн и визуализация рабочих процессов), LlamaIndex (агенты с расширением данных через RAG) или собственные решения. Более экспериментальные фреймворки включают взаимодействие между разными агентами, например CrewAI (рабочие процессы команд на основе ролей) и AutoGen (мультиагентные системы на основе диалогов).
📚 Ссылки:
* Курс по агентам: Популярный курс об ИИ-агентах от Hugging Face.
* LangGraph: Обзор того, как создавать ИИ-агентов с помощью LangGraph.
* Агенты LlamaIndex: Примеры использования и ресурсы для создания агентов с LlamaIndex.
6. Оптимизация вывода (Inference optimization)
Генерация текста — это ресурсоемкий процесс, требующий дорогого оборудования. Помимо квантизации, были предложены различные методы для максимального увеличения пропускной способности и снижения стоимости вывода.
- Flash Attention: Оптимизация механизма внимания для преобразования его сложности из квадратичной в линейную, ускоряющая как обучение, так и вывод.
- Кэш ключ-значение (Key-value cache): Разберите кэш ключ-значение и улучшения, введенные в Multi-Query Attention (MQA) и Grouped-Query Attention (GQA).
- Спекулятивное декодирование (Speculative decoding): Использование较小шей модели для создания черновиков, которые затем проверяются较大шей моделью для ускорения генерации текста. EAGLE-3 — это особенно популярное решение.
📚 Ссылки:
* Вывод на GPU от Hugging Face: Объясняет, как оптимизировать вывод на GPU.
* Вывод LLM от Databricks: Лучшие практики по оптимизации вывода LLM в продакшене.
* Оптимизация LLM по скорости и памяти от Hugging Face: Объясняет три основных метода оптимизации скорости и памяти, а именно квантизацию, Flash Attention и инновации в архитектуре.
* Ассистированная генерация от Hugging Face: версия HF для спекулятивного декодирования. Это интересная статья о том, как это работает, с кодом для реализации.
* Статья EAGLE-3: представляет EAGLE-3 и сообщает об ускорении до 6,5×.
* Speculators: библиотека от vLLM для создания, оценки и хранения алгоритмов спекулятивного декодирования (например, EAGLE-3) для вывода LLM.
7. Развертывание LLM
Масштабное развертывание LLM — это инженерное достижение, которое может потребовать нескольких кластеров GPU. В других сценариях демо и локальные приложения можно реализовать с гораздо меньшей сложностью.
- Локальное развертывание: Конфиденциальность — это важное преимущество открытых LLM перед приватными. Локальные серверы LLM (LM Studio, Ollama, oobabooga, kobold.cpp и т.д.) используют это преимущество для питания локальных приложений.
- Демо-развертывание: Такие фреймворки, как Gradio и Streamlit, помогают создавать прототипы приложений и делиться демо. Их также легко разместить онлайн, например, с помощью Hugging Face Spaces.
- Развертывание на серверах: Масштабное развертывание LLM требует облачной (см. также SkyPilot) или локальной инфраструктуры и часто использует оптимизированные фреймворки для генерации текста, такие как TGI, vLLM и т.д.
- Развертывание на edge-устройствах: В ограниченных условиях высокопроизводительные фреймворки, такие как MLC LLM и mnn-llm, могут развернуть LLM в веб-браузерах, Android и iOS.
📚 Ссылки:
* Streamlit - Постройте базовое приложение для LLM: Руководство по созданию базового приложения, похожего на ChatGPT, с использованием Streamlit.
* HF LLM Inference Container: Развертывание LLM на Amazon SageMaker с использованием контейнера для вывода от Hugging Face.
* Блог Philschmid от Philipp Schmid: Коллекция качественных статей о развертывании LLM с использованием Amazon SageMaker.
* Оптимизация задержки от Hamel Husain: Сравнение TGI, vLLM, CTranslate2 и mlc по пропускной способности и задержке.
8. Обеспечение безопасности LLM
Помимо традиционных проблем безопасности, связанных с программным обеспечением, LLM имеют уникальные уязвимости из-за способа их обучения и взаимодействия с промптами.
- Атаки на промпты: Различные техники, связанные с конструированием промптов, включая инъекцию промпта (дополнительная инструкция для перехвата ответа модели), утечку данных/промпта (получение его исходных данных/промпта) и джейлбрейкинг (создание промптов для обхода функций безопасности).
- Скрытые уязвимости (Backdoors): Векторы атак могут быть нацелены на сами обучающие данные, путем отравления обучающих данных (например, ложной информацией) или создания скрытых триггеров (секретных триггеров для изменения поведения модели во время вывода).
- Защитные меры: Лучший способ защитить ваши приложения, основанные на LLM — тестировать их на предмет этих уязвимостей (например, с помощью red teaming и проверок, таких как garak) и наблюдать за ними в продакшене (с использованием фреймворка, такого как langfuse).
📚 Ссылки:
* OWASP Top 10 для LLM-приложений от HEGO Wiki: Список 10 наиболее критических уязвимостей, обнаруженных в LLM-приложениях.
* Руководство по инъекции промптов от Joseph Thacker: Краткое руководство по инъекции промптов для инженеров.
* Безопасность LLM от @llm_sec: Обширный список ресурсов, связанных с безопасностью LLM.
* Red teaming для LLM от Microsoft: Руководство о том, как проводить red teaming с LLM.
Благодарности
Эта дорожная карта была вдохновлена отличной Дорожной картой DevOps от Милана Милановича и Романо Рота.
Особая благодарность:
- Томасу Телену за мотивацию создать дорожную карту
- Андре Фраде за его вклад и рецензирование первого черновика
- Дино Данн за предоставление ресурсов о безопасности LLM
- Магдалене Куэн за улучшение раздела «человеческая оценка»
- Odoverdose за предложение видео от 3Blue1Brown о трансформерах
- Всем, кто внёс вклад в учебные материалы этого курса :)
Дисклеймер: я не связан ни с одним из перечисленных здесь источников.
