LLM под капотом: архитектура и механика выбора модели

Выбор LLM сегодня - как покупка автомобиля, когда каждая марка выпускает модели с названиями вроде “Model-7B” или “Model-70B”. Продавцы гордо называют цифры: ‘У нас 93% на MMLU!’ - звучит как ‘двигатель 4.0 с расходом 16л’. Но что это значит для ваших конкретных задач?
Как и при выборе машины, важно понимать назначение:
- для ежедневных городских поездок нужны одни модели,
- для дальних путешествий - другие,
- для перевозки тяжёлых грузов - третьи.
Одни LLM похожи на спортивные купе - быстрые, эффектные, но прожорливые. Другие - на надёжные седаны: без лишнего блеска, зато универсальные и экономичные. А есть и тяжёлые грузовики - медленные, но способные справиться с большими нагрузками.
Написал этот справочник после того, как выбирал LLM для своих проектов. В процессе накопились ответы на практические вопросы: что означают бенчмарки, как оценить требования к железу, какую архитектуру выбрать для конкретных задач. Этот справочник призван помочь ‘заглянуть под капот’ современных языковых моделей и выбрать именно то, что подходит вашему проекту. Здесь - базовые концепции, практические критерии и конкретная система принятия решений.
Основные термины и понятия
Базовые концепции
Parameters (Параметры) - количество обучаемых весов в нейронной сети. Измеряется в миллионах (M) или миллиардах (B). Больше параметров обычно означает лучшее понимание сложных задач, но требует больше вычислительных ресурсов.
Token (Токен) - базовая единица текста для модели. Примерно 1 токен = 0.75 слова в английском языке, 0.5-0.6 слова в русском. Важно для подсчета стоимости API и планирования ресурсов.
Context Window (Контекстное окно) - максимальное количество токенов, которое модель может обработать за один раз. Современные модели поддерживают от 8K до 200K+ токенов. Определяет, сколько текста модель “помнит” в рамках одного диалога.
Embedding (Эмбеддинг) - числовое представление текста в виде векторов, которое модель использует для внутренних вычислений. Позволяет модели работать с семантическим смыслом слов и фраз.
Prompt (Промпт) - входной текст или инструкция, которую вы даете модели. Качество промпта сильно влияет на качество ответа.
Perplexity (Перплексия) - метрика “растерянности” модели. Чем ниже, тем лучше модель предсказывает следующий токен. Используется для сравнения качества моделей на одном датасете.
Процесс обучения
Pre-training (Предобучение) - базовое обучение модели на огромных текстовых корпусах для предсказания следующего слова.
Fine-tuning (Файн-тюнинг) - дообучение готовой модели на специфичных данных для конкретной задачи.
PEFT (Parameter-Efficient Fine-Tuning) - методы дообучения только части параметров модели для экономии ресурсов.
LoRA (Low-Rank Adaptation) - популярный метод PEFT, добавляющий небольшие матрицы к существующим слоям.
RLHF (Reinforcement Learning from Human Feedback) - обучение модели на основе человеческих оценок качества ответов для повышения полезности и безопасности.
Few-shot learning (Обучение на нескольких примерах) - способность модели решать задачи, видя всего несколько примеров в промпте. Zero-shot - решение задач вообще без примеров, только по описанию.
Технические аспекты работы
Inference (Инференс) - процесс получения ответа от обученной модели (в отличие от training).
Batching (Батчинг) - одновременная обработка нескольких запросов для повышения эффективности.
Streaming (Стриминг) - поочередная отдача токенов по мере генерации (как в ChatGPT) вместо ожидания полного ответа.
Latency (Задержка) - время отклика модели на запрос (от отправки промпта до получения ответа). Критично для интерактивных приложений.
Throughput (Пропускная способность) - количество токенов, которое модель может обработать в секунду. Важно для высоконагруженных систем.
Memory footprint (Потребление памяти) - объем оперативной памяти, занимаемый моделью при работе. Отличается от размера файла модели на диске.
Архитектурные элементы
Attention/Self-attention (Внимание/Само-внимание) - механизм, позволяющий модели “обращать внимание” на разные части входного текста при генерации каждого нового токена.
Layers/Heads (Слои/Головы внимания) - структурные элементы трансформера. Layers (слои) - это последовательно расположенные блоки трансформера, каждый содержит механизмы self-attention и feed-forward сети. Heads (головы внимания) - это параллельные вычислительные потоки внутри каждого слоя attention, позволяющие модели одновременно фокусироваться на разных аспектах входных данных.
Пользовательские концепции
Hallucination (Галлюцинации) - генерация ложной, выдуманной или недостоверной информации моделью. Модель может “галлюцинировать” факты, цитаты, ссылки.
Процесс генерации
Temperature (Температура) - параметр, контролирующий предсказуемость ответов модели от 0 до 2. При генерации каждого следующего слова модель выбирает из нескольких вариантов:
- 0.1-0.3: детерминированные, предсказуемые ответы
- 0.7-1.0: сбалансированная креативность
- 1.5+: высокая креативность, но возможна несвязность
Top-p (Nucleus Sampling) - альтернатива temperature. Выбирает токены из топ-X% вероятностей. 0.9 означает выбор из 90% наиболее вероятных вариантов.
Типология архитектур и применений
Архитектурные типы
Decoder-only (Generative Models)
- Принцип: предсказание следующего токена
- Архитектура: трансформер с маскированным self-attention
- Примеры: GPT семейство, LLaMA семейство, Claude, Mistral
- Применение: генерация текста, диалоги, творчество, код
Encoder-only (Understanding Models)
- Принцип: создание контекстуальных представлений текста
- Архитектура: двунаправленный трансформер
- Примеры: BERT семейство, RoBERTa, DeBERTa
- Применение: классификация, поиск, анализ тональности, эмбеддинги
Encoder-Decoder (Sequence-to-Sequence)
- Принцип: преобразование одной последовательности в другую
- Архитектура: комбинация encoder + decoder с cross-attention
- Примеры: T5 семейство, BART, mT5
- Применение: перевод, саммаризация, редактирование текста
Специализированные архитектуры
Mixture of Experts (MoE)
- Принцип: активация только части параметров для каждого запроса
- Примеры: Mixtral семейство, Switch Transformer
- Преимущества: высокое качество при относительно низких вычислительных затратах
Multimodal Models
- Принцип: обработка текста + изображений/аудио
- Примеры: GPT-4V, Claude-3, CLIP, Whisper
- Применение: анализ изображений, генерация по описанию
Принципы выбора архитектуры
| Задача | Рекомендуемая архитектура | Почему |
|---|---|---|
| Чат-бот, генерация контента | Decoder-only | Естественная генерация, диалоговые способности |
| Классификация документов | Encoder-only | Лучшее понимание контекста, эффективность |
| Перевод, саммаризация | Encoder-Decoder | Оптимизация для преобразования текста |
| Поиск по семантике | Encoder-only | Качественные эмбеддинги |
| Анализ кода | Специализированные Decoder | Обучение на кодовых датасетах |
Основные форматы моделей и технические аспекты
Сравнение популярных форматов хранения
| Формат | Описание | Преимущества | Недостатки | Когда использовать |
|---|---|---|---|---|
| PyTorch (.pt, .pth) | Стандартный формат PyTorch для сохранения моделей и данных. Может содержать весы, архитектуру модели, состояния оптимизатора и произвольный Python код. Основной формат для исследований и обучения | Полная совместимость с PyTorch | Большой размер, может содержать код | Разработка, эксперименты |
| SafeTensors | Безопасный формат для хранения только весов модели без исполняемого кода. Разработан Hugging Face для быстрой и безопасной загрузки. Поддерживает lazy loading и memory mapping | Быстрая загрузка, только данные весов | Меньше поддержки в старых инструментах | Продакшн, обмен моделями |
| GGUF | Специализированный формат для эффективного inference на CPU и GPU. Поддерживает встроенную квантизацию и оптимизации для llama.cpp. Предназначен для локального запуска больших моделей | Оптимизация, встроенная квантизация | Специфичный формат | Деплой на устройствах |
| ONNX | Открытый формат для обмена моделями между разными фреймворками. Позволяет использовать модели, обученные в PyTorch, в TensorFlow, TensorRT и других системах. Ориентирован на продакшн inference | Поддержка разных фреймворков | Не все операции поддерживаются | Интеграция в существующие системы |
Примечание: SafeTensors обеспечивает безопасность тем, что содержит только тензорные данные без исполняемого кода, в отличие от PyTorch формата.
Квантизация и оптимизация
Квантизация - процесс уменьшения точности представления весов модели (например, с 16-bit до 4-bit) для снижения размера и ускорения работы. Позволяет запускать большие модели на менее мощном железе с минимальной потерей качества.
| Тип | Размер от оригинала | Скорость | Качество | Рекомендации |
|---|---|---|---|---|
| FP16 | 100% | Базовая | Максимальное | Когда ресурсы не ограничены |
| Q8 | ~50% | +20-30% | 99% от оригинала | Баланс качества и размера |
| Q4_K_M | ~25% | +40-60% | 95-98% от оригинала | Рекомендуемый для большинства задач |
| Q4_K_S | ~23% | +50-70% | 92-95% от оригинала | Когда размер критичен |
| Q3_K_M | ~19% | +60-80% | 88-92% от оригинала | Только при жестких ограничениях |
Примеры расчета требований к железу
Базовая формула для оценки RAM:
- Модель в FP16: размер_модели × 2 байта + 20% буфер
- Модель в Q4: размер_модели × 0.5 байта + 20% буфер
Практические примеры для разных классов моделей:
- Модель 7B в FP16: ~14GB RAM + буфер = ~17GB
- Модель 7B в Q4: ~4GB RAM + буфер = ~5GB
- Модель 70B в Q4: ~40GB RAM + буфер = ~48GB
Варианты размещения:
- Только GPU: быстрый inference, но ограничено VRAM
- Только CPU: медленный inference, но можно использовать всю системную память
- Гибридный режим: часть слоев на GPU, часть на CPU для экономии VRAM
Важно: это приблизительные оценки. Реальное потребление может отличаться в зависимости от реализации и дополнительных оптимизаций.
Расшифровка метрик и бенчмарков
Как интерпретировать основные метрики
MMLU (Massive Multitask Language Understanding) Тестирует эрудицию модели по академическим дисциплинам: от элементарной математики до философии и права.
Как читать результаты:
- 25% = случайность (модель просто угадывает из 4 вариантов)
- 40-50% = базовое понимание отдельных тем
- 60-70% = хорошее понимание для большинства практических задач
- 80%+ = уровень современных топовых моделей
- 90%+ = исключительные результаты (редко достигаются)
📊 Актуальные рейтинги: HuggingFace Open LLM Leaderboard | LMSYS Chatbot Arena
ARC (AI2 Reasoning Challenge) Проверяет научные знания и способность к логическим рассуждениям.
ARC-Easy (элементарная наука):
- 60-70% = базовый уровень
- 80%+ = хорошие результаты
- 90%+ = отличные результаты
ARC-Challenge (сложные научные задачи):
- 30-40% = базовый уровень
- 50-60% = хорошие аналитические способности
- 70%+ = уровень топовых моделей
HellaSwag (здравый смысл) Проверяет понимание контекста и житейской логики.
Интерпретация результатов:
- 40-50% = минимальное понимание контекста
- 60-70% = приемлемое понимание для простых задач
- 80%+ = хорошее понимание здравого смысла
- 90%+ = близко к человеческому уровню (~95%)
GSM8K (математические рассуждения) Текстовые математические задачи уровня средней школы.
Уровни качества:
- 20-30% = может решать простейшие задачи
- 50-60% = справляется с базовой арифметикой
- 70-80% = хорошие навыки пошагового решения
- 85%+ = уровень специализированных моделей
TruthfulQA (правдивость) Содержит вопросы-ловушки и распространенные заблуждения.
Особенности интерпретации:
- 30-40% = типичный результат для больших моделей
- 50%+ = хорошая калибровка между знанием и уверенностью
- 60%+ = отличные результаты (сложно даже для топ-моделей)
Парадокс: более “умные” модели часто показывают худшие результаты, так как генерируют правдоподобные, но ложные ответы вместо честного “не знаю”.
HumanEval (программирование) Генерация Python функций по описанию с проверкой через автотесты.
Уровни навыков:
- 10-20% = может генерировать синтаксически корректный код
- 30-50% = решает простые алгоритмические задачи
- 60-70% = хороший уровень для помощи в программировании
- 80%+ = близко к экспертному уровню
📊 Свежие результаты кодинга: BigCode Leaderboard
Практические рекомендации по анализу бенчмарков
Смотреть на профиль, не на одну цифру - модель может быть сильной в математике (GSM8K 85%), но слабой в программировании (HumanEval 45%). Выбор делать под свои задачи.
Учитывать размер модели - модель 7B с 65% MMLU может быть практичнее модели 70B с 75% для ваших ресурсов.
Учитывать переобучение на бенчмарках - новые модели могли “видеть” эти тесты во время обучения. Всегда дополнительно тестировать на своих данных.
Обращать внимание на соотношения - если модель показывает 90% на MMLU, но 30% на TruthfulQA, она может “галлюцинировать” факты с высокой уверенностью.
Тестировать самостоятельно - создать набор из 10-20 задач для своей области и сравнить кандидатов на реальных примерах.
Decision Framework: как выбрать модель
Как подойти к выбору модели
Фильтр 1: Технические ограничения Оценить доступные вычислительные ресурсы:
- <8GB RAM → модели 1-3B класса
- 8-16GB RAM → модели 7-8B класса
- 32GB+ RAM → модели 13-70B класса
- Есть GPU → приоритет VRAM, рассмотреть квантизацию
- Требования к скорости inference → меньшие модели или специализированные форматы
Фильтр 2: Тип задачи Выбрать архитектуру под вашу основную задачу:
- Генерация (чат, контент, код) → Decoder-only модели
- Анализ/классификация → Encoder модели
- Преобразование текста → Encoder-Decoder модели
- Мультимодальные задачи → специализированные мультимодальные модели
Фильтр 3: Требования к качеству Определить минимально приемлемый уровень:
- Базовые задачи, прототипы → модели 7B класса достаточно
- Сложные рассуждения, продакшн → модели 13B+ класса
- Критически важные задачи → модели 70B+ класса или API решения
- Экспериментальные задачи → можно начать с меньших моделей
Фильтр 4: Специализация Учесть особенности вашей области:
- Код → Code-специализированные модели
- Многоязычность → модели с качественной поддержкой вашего языка
- Безопасность и этика → модели с RLHF обучением
- Научные задачи → модели, показывающие хорошие результаты на ARC
- Конкретная предметная область → поищите fine-tuned варианты
Базовый чек-лист факторов
Технические факторы:
- Размер контекстного окна подходит для ваших данных
- Поддерживаемые языки включают нужные
- Формат модели совместим с вашей инфраструктурой
- Производительность соответствует требованиям
Правовые и этические факторы:
- Лицензия позволяет планируемый тип использования
- Нет ограничений на область применения
- Модель прошла фильтрацию на безопасность
Практические факторы:
- Есть документация и примеры использования
- Активное сообщество и поддержка
- Доступны файн-тюнинг инструменты при необходимости
Как создать собственную систему оценки
Шаг 1: Определить критические метрики для вашей области
- Создать тестовый набор из 20-50 примеров реальных задач
- Включить edge cases и сложные сценарии
- Определить критерии оценки качества ответов
Шаг 2: Сравнить 2-3 кандидата
- Выбрать модели разных размерных классов
- Протестировать на одинаковых промптах
- Измерить не только качество, но и скорость отклика
Шаг 3: Учесть практические аспекты
- Стоимость inference (для API) или требования к железу
- Простота интеграции в существующую систему
- Возможности кастомизации и дообучения
Частые ошибки при выборе
“Больше ≠ лучше” - модель 70B не всегда лучше модели 7B для конкретной задачи. Иногда специализированная маленькая модель работает лучше универсальной большой.
Игнорирование бенчмарков специализации - высокий MMLU не гарантирует хорошую генерацию кода. Лучше смотреть релевантные метрики.
Недооценка инфраструктурных требований - следует учитывать не только размер модели, но и скорость inference, особенно для продакшена.
Выбор по хайпу - новейшая модель не всегда лучший выбор. Проверенные модели часто надежнее для продакшена.
Игнорирование лицензий - некоторые модели имеют ограничения на коммерческое использование или требуют особых условий распространения.
Полезные ресурсы
Актуальные бенчмарки и рейтинги:
- Hugging Face Open LLM Leaderboard - автоматические оценки качества
- LMSYS Chatbot Arena - сравнение моделей в реальных диалогах пользователями
- BigCode Leaderboard - специализированные оценки для программирования
Технические ресурсы:
- Hugging Face Transformers Documentation - для работы с моделями
- llama.cpp GitHub - для локального запуска моделей
- Ollama - простой способ запуска моделей локально
Образовательные материалы:
- The Illustrated Transformer - визуализация архитектуры
- Attention Is All You Need - оригинальная статья о трансформерах
- Hugging Face Course - практический курс по работе с трансформерами
Инструменты для сравнения:
- Hugging Face Model Hub - каталог доступных моделей с фильтрами
- Papers With Code Leaderboards - сравнение по различным задачам