denciaopin

Saiga: полная история и технические характеристики русскоязычной LLM

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

История создания и разработчик

Илья Гусев — создатель Saiga

Saiga была разработана Ильей Гусевым (известен в сообществе как Takagi), Senior Machine Learning Engineer в Booking.com и одним из ведущих российских специалистов в области NLP (Natural Language Processing).

Профессиональный путь: Илья Гусев — это не просто разработчик одной модели. За его плечами целый ряд значимых open-source проектов в области обработки естественного языка:

  • RNNMorph — морфологический анализатор для русского языка
  • Summarus — модели для автоматического реферирования текстов
  • Rupo — библиотека для анализа и генерации стихотворений
  • Russ — система определения ударений в русских словах
  • Purano — система кластеризации новостей

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

Предпосылки создания

До появления Saiga русскоязычное сообщество сталкивалось с серьезной проблемой: большинство открытых языковых моделей были оптимизированы для английского языка. LLaMa от Meta, GPT-Neo, Mistral — все они показывали посредственные результаты на русском языке из-за особенностей токенизации и недостаточного представления русскоязычных данных в обучающих выборках.

Основные вызовы:

  • Токенизация русского текста в моделях, обученных на английском, была неэффективной
  • Один русский токен мог занимать 2-3 английских токена, увеличивая длину контекста
  • Качество понимания русского языка значительно уступало английскому
  • Отсутствие знаний о русской культуре и контексте

Илья Гусев увидел потенциал в базовых моделях LLaMa и Mistral, но понимал, что им нужна адаптация для русского языка. Так началась история Saiga.

Философия проекта

Saiga создавалась как некоммерческий проект энтузиаста с четкими принципами:

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

Технологическая основа и архитектура

Базовые модели

Saiga — это не отдельная архитектура, а семейство точно настроенных моделей на основе ведущих open-source LLM (языковых моделей с открытым кодом). Принцип работы: взять лучшую базовую модель и адаптировать ее для русского языка через дообучение.

Базовые архитектуры, использованные в разных версиях:

LLaMa 2 (Meta AI):

  • Transformer-архитектура с улучшениями
  • Групповая нормализация запросов (Grouped Query Attention)
  • Эффективная обработка длинных контекстов
  • Оптимизированная производительность

LLaMa 3 (Meta AI):

  • Улучшенная токенизация с расширенным словарем
  • Оптимизированная архитектура механизма внимания
  • Лучшее понимание контекста и инструкций
  • Повышенная стабильность генерации

Mistral 7B:

  • Механизм скользящего окна внимания — позволяет эффективно обрабатывать длинные тексты
  • Групповое внимание к запросам — оптимизирует использование памяти
  • Очень эффективное соотношение размер/качество
  • Высокая скорость генерации

Mistral NeMo 12B:

  • Современная архитектура от Mistral AI и NVIDIA
  • 128K контекстное окно
  • Оптимизация для работы на видеокартах NVIDIA
  • Баланс между производительностью и качеством

Процесс адаптации для русского языка

Этап 1: Сборка обучающих датасетов

Илья Гусев создал уникальную коллекцию русскоязычных датасетов для обучения:

ru_turbo_saiga: Синтетический датасет, сгенерированный с помощью GPT-4, содержащий высококачественные диалоги на русском языке. Специально созданные сценарии охватывают широкий спектр тем и стилей общения.

ru_sharegpt_cleaned: Очищенная и отфильтрованная версия диалогов, собранных из публичных источников. Удалены некачественные примеры, дубликаты и проблемный контент.

oasst1_ru_main_branch: Русскоязычная часть датасета Open Assistant, содержащая инструкции и диалоги, созданные сообществом. Особенно ценна для обучения следованию инструкциям.

gpt_roleplay_realm: Датасет для обучения ролевым диалогам, содержит 200+ сгенерированных персонажей с по 20 диалогов для каждого. Это обучает модель адаптироваться под различные стили общения.

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

Этап 2: Supervised Fine-Tuning (SFT)

Дообучение на специально подготовленных диалогах и инструкциях

Первая фаза дообучения, где базовая модель учится:

  • Понимать русскоязычные инструкции
  • Генерировать связные ответы на русском языке
  • Следовать формату диалога «пользователь-ассистент»
  • Применять знания из базовой модели к русскому контексту
Этап 3: Preference Optimization (SimPO/DPO)

Метод обучения, при котором модель учится генерировать предпочтительные ответы на основе сравнения «хороших» и «плохих» примеров

Вторая фаза обучения, где модель учится предпочтениям:

  • Выбирать более качественные формулировки
  • Избегать токсичного и нежелательного контента
  • Генерировать более полезные и точные ответы
  • Улучшать структуру и логику текста

Используется метод SimPO (Simple Preference Optimization) или DPO (Direct Preference Optimization), где модель обучается на парах ответов с предпочтениями.

Этап 4: Слияние и оптимизация

Финальный этап включает:

  • SLERP (Spherical Linear Interpolation) — метод объединения моделей
  • Объединение нескольких чекпоинтов для улучшения стабильности
  • Тестирование на бенчмарках
  • Создание квантизованных версий

Технология LoRA (Low-Rank Adaptation)

Для эффективного дообучения используется LoRA — метод, позволяющий обучать только небольшую часть параметров:

Преимущества LoRA:

  • Требуется в 10-100 раз меньше VRAM для обучения
  • Быстрое обучение (часы вместо дней)
  • Легко комбинировать разные адаптеры
  • Возможность вернуться к базовой модели

Семейство моделей Saiga

Saiga LLaMa 2 7B (ранняя версия)

Базовая модель: LLaMa 2 7B от Meta AI

Характеристики:

  • Параметры: 7 миллиардов
  • Контекст: 4096 токенов
  • Точность: FP16/BF16
  • Размер: ~14 GB (FP16), ~7 GB (8-bit)

Требования к оборудованию:

Минимальная конфигурация:

  • GPU: NVIDIA RTX 3060 12GB или аналог
  • RAM: 16 GB
  • Storage: 20 GB SSD
  • Производительность: 10-15 токенов/сек

Рекомендуемая конфигурация:

  • GPU: NVIDIA RTX 4070 Ti 16GB / RTX 4080
  • RAM: 32 GB
  • Storage: 50 GB NVMe SSD
  • Производительность: 25-35 токенов/сек

С квантизацией (4-bit):

  • GPU: от 6 GB VRAM
  • Размер модели: ~4 GB
  • Производительность: немного ниже, но работает на потребительских GPU

Особенности:

  • Первая версия Saiga, доказавшая концепцию
  • Хорошее понимание русского языка
  • Подходит для большинства офисных задач
  • Может работать даже на ноутбуках с дискретной GPU
Saiga LLaMa 2 13B

Базовая модель: LLaMa 2 13B от Meta AI

Характеристики:

  • Параметры: 13 миллиардов
  • Контекст: 4096 токенов
  • Размер: ~26 GB (FP16), ~13 GB (8-bit), ~7 GB (4-bit)

Требования к оборудованию:

Минимальная конфигурация (8-bit):

  • GPU: NVIDIA RTX 3090 24GB
  • RAM: 32 GB
  • Storage: 30 GB SSD
  • Производительность: 12-18 токенов/сек

Рекомендуемая конфигурация (FP16):

  • GPU: 2x RTX 3090 24GB или 1x RTX A5000 24GB
  • RAM: 64 GB
  • Storage: 100 GB NVMe SSD
  • Производительность: 20-30 токенов/сек

С квантизацией (4-bit):

  • GPU: от 10 GB VRAM (RTX 3080)
  • Размер модели: ~7 GB
  • Производительность: 15-20 токенов/сек

Особенности:

  • Значительно лучшее понимание сложных запросов
  • Более качественная генерация длинных текстов
  • Хорошо подходит для профессионального использования
  • Идеальное соотношение между производительностью и качеством
Saiga Mistral 7B

Базовая модель: Mistral 7B от Mistral AI

Характеристики:

  • Параметры: 7 миллиардов
  • Контекст: 8192 токена (в некоторых версиях до 32K)
  • Размер окна диалога: 4096
  • Размер: ~14 GB (FP16), ~7 GB (8-bit), ~4 GB (4-bit)

Требования к оборудованию:

Минимальная конфигурация (8-bit):

  • GPU: NVIDIA RTX 3060 12GB
  • RAM: 16 GB
  • Storage: 20 GB SSD
  • Производительность: 15-20 токенов/сек

Рекомендуемая конфигурация:

  • GPU: NVIDIA RTX 4070 12GB / RTX 4080
  • RAM: 32 GB
  • Storage: 50 GB NVMe SSD
  • Производительность: 30-40 токенов/сек

Особенности:

  • Самая быстрая модель среди 7B
  • Отличное понимание инструкций
  • Эффективная работа с длинными контекстами
  • Оптимальна для чат-ботов и онлайн приложений
  • Лучшее соотношение скорость/качество
Saiga LLaMa 3 8B

Базовая модель: LLaMa 3 8B от Meta AI

Характеристики:

  • Параметры: 8 миллиардов
  • Контекст: 8192 токена
  • Улучшенная токенизация (128K словарь)
  • Размер: ~16 GB (FP16), ~8 GB (8-bit), ~4.5 GB (4-bit)

Требования к оборудованию:

Минимальная конфигурация (8-bit):

  • GPU: NVIDIA RTX 3060 Ti 12GB / RTX 4060 Ti 16GB
  • RAM: 16 GB
  • Storage: 25 GB SSD
  • Производительность: 15-22 токенов/сек

Рекомендуемая конфигурация:

  • GPU: NVIDIA RTX 4070 Ti 16GB / RTX 4080
  • RAM: 32 GB
  • Storage: 50 GB NVMe SSD
  • Производительность: 28-38 токенов/сек

Особенности:

  • Новейшая архитектура LLaMa 3
  • Значительно улучшенное понимание контекста
  • Лучшая генерация творческого контента
  • Более точное следование сложным инструкциям
  • Хорошая работа с кодом и техническими задачами
Saiga NeMo 12B (флагман)

Базовая модель: Mistral NeMo 12B от Mistral AI и NVIDIA

Характеристики:

  • Параметры: 12.2 миллиарда
  • Контекст: 128000 токенов (128K!)
  • Архитектура: оптимизирована для NVIDIA GPU
  • Размер: ~24 GB (BF16), ~12 GB (8-bit), ~7 GB (4-bit)

Требования к оборудованию:

Минимальная конфигурация (8-bit):

  • GPU: NVIDIA RTX 3090 24GB / RTX 4090 24GB
  • RAM: 32 GB
  • Storage: 30 GB SSD
  • Производительность: 18-25 токенов/сек

Рекомендуемая конфигурация (BF16):

  • GPU: 2x RTX 4090 24GB или 2x RTX A5000 24GB
  • RAM: 64 GB
  • Storage: 100 GB NVMe SSD
  • Производительность: 30-40 токенов/сек

Оптимальная конфигурация для продакшена:

  • GPU: 2-3x NVIDIA A100 40GB или 3x RTX 4090
  • RAM: 128 GB
  • Storage: 500 GB NVMe RAID
  • Производительность: 40-60 токенов/сек

С квантизацией (4-bit):

  • GPU: от 8 GB VRAM (RTX 3070)
  • Размер модели: ~7 GB
  • Производительность: 20-28 токенов/сек
  • Некоторое снижение качества, но приемлемо

Особенности:

  • Флагманская модель семейства Saiga
  • Огромное контекстное окно (128K токенов)
  • Лучшее качество генерации среди всех Saiga
  • Отличное понимание сложных многоэтапных задач
  • Хорошая работа с документами и кодом
  • Оптимизация для NVIDIA GPU через TensorRT-LLM
  • Подходит для корпоративных внедрений

Версии и варианты:

  • saiga_nemo_12b — базовая версия
  • saiga_nemo_12b_gguf — квантизованная версия для llama.cpp
  • Множество чекпоинтов с разными комбинациями обучения
Saiga LLaMa 2 70B (экспериментальная)

Базовая модель: LLaMa 2 70B от Meta AI

Характеристики:

  • Параметры: 70 миллиардов
  • Контекст: 4096 токенов
  • Размер: ~140 GB (FP16), ~70 GB (8-bit), ~35 GB (4-bit)

Требования к оборудованию:

Минимальная конфигурация (4-bit):

  • GPU: 2x RTX 4090 24GB (48GB total)
  • RAM: 128 GB
  • Storage: 100 GB NVMe SSD
  • Производительность: 8-12 токенов/сек

Рекомендуемая конфигурация (8-bit):

  • GPU: 4x A100 40GB (160GB total) или 8x RTX 4090
  • RAM: 256 GB
  • Storage: 200 GB NVMe RAID
  • Производительность: 15-25 токенов/сек

Особенности:

  • Максимальное качество среди всех версий
  • Требует серьезной инфраструктуры
  • Подходит только для специализированных задач
  • Лучше всего работает с исследовательскими и сложными аналитическими задачами
  • Ограниченная поддержка из-за высоких требований к ресурсам

Методы обучения и оптимизации

Supervised Fine-Tuning (SFT)

Основной метод дообучения базовых моделей на русскоязычных данных.

Процесс:

  1. Загрузка предобученной базовой модели (LLaMa, Mistral)
  2. Подготовка датасетов в формате инструкция-ответ
  3. Обучение с использованием LoRA адаптеров
  4. Валидация на отложенной выборке
  5. Сохранение чекпоинтов каждые N шагов
Preference Optimization

Второй этап обучения для улучшения качества ответов.

Методы:

DPO (Direct Preference Optimization):

  • Прямая оптимизация предпочтений без reward model
  • Обучение на парах (лучший ответ, худший ответ)
  • Стабильнее чем RLHF
  • Быстрее сходится

SimPO (Simple Preference Optimization):

  • Упрощенная версия DPO
  • Не требует reference model
  • Меньше вычислительных ресурсов
  • Используется в последних версиях Saiga

ORPO (Odds Ratio Preference Optimization):

  • Новейший метод оптимизации
  • Объединяет SFT и preference learning
  • Более эффективное использование данных
  • Использован в некоторых версиях Saiga NeMo
Model Merging

Техника объединения нескольких чекпоинтов или моделей.

SLERP (Spherical Linear Interpolation):

  • Интерполяция в сферическом пространстве
  • Сохраняет свойства обеих моделей
  • Часто дает лучшие результаты чем простое усреднение
  • Используется для финальных версий Saiga

Task Arithmetic:

  • Арифметические операции над весами моделей
  • Можно «вычитать» нежелательное поведение
  • «Добавлять» новые способности
  • Экспериментальная техника
Квантизация

Методы сжатия моделей для экономии памяти.

GGUF формат (llama.cpp): Популярнейший формат квантизации для локального использования.

Доступные уровни квантизации:

Q2_K (2-bit):

  • Размер: ~3-4 GB для 12B модели
  • Качество: заметное снижение
  • Использование: только для экспериментов

Q3_K_M (3-bit):

  • Размер: ~5-6 GB для 12B модели
  • Качество: приемлемое
  • Использование: для очень ограниченных ресурсов

Q4_K_M (4-bit) — РЕКОМЕНДУЕТСЯ:

  • Размер: ~7-8 GB для 12B модели
  • Качество: минимальная потеря (95-98% от оригинала)
  • Использование: оптимальный выбор для большинства случаев
  • Скорость: быстрая генерация

Q5_K_M (5-bit):

  • Размер: ~8.5-9 GB для 12B модели
  • Качество: почти без потерь (98-99%)
  • Использование: когда важно качество, но память ограничена

Q6_K (6-bit):

  • Размер: ~10 GB для 12B модели
  • Качество: минимальные отличия от оригинала
  • Использование: когда есть память, но нужна скорость

Q8_0 (8-bit):

  • Размер: ~13 GB для 12B модели
  • Качество: практически идентично FP16
  • Использование: максимальное качество при квантизации

GPTQ (GPU-ориентированная квантизация):

  • 4-bit квантизация с сохранением качества
  • Оптимизирована для NVIDIA GPU
  • Требует CUDA
  • Быстрее GGUF на GPU

AWQ (Activation-aware Weight Quantization):

  • Учитывает важность разных весов при квантизации
  • Лучшее качество при 4-bit
  • Поддержка меньшего количества фреймворков

Форматы промптов и использование

Параметры генерации

Temperature:

  • 0.1-0.3: Факт-ориентированные ответы, высокая детерминированность
  • 0.6-0.8: Сбалансированная генерация (рекомендуется)
  • 0.9-1.2: Креативная генерация, больше разнообразия

Top P (nucleus sampling):

  • 0.9-0.95: Рекомендуемые значения
  • Более стабильная генерация чем чистая температура ответа

Top K:

  • 40-50: Ограничивает выбор токенов
  • Предотвращает выбор очень маловероятных токенов

Repetition Penalty:

  • 1.1-1.15: Предотвращает повторения
  • Важно для длинных генераций

Max Tokens:

  • Зависит от задачи
  • Для коротких ответов: 256-512
  • Для статей: 2048-4096
  • Для документов: до лимита контекста

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

llama.cpp

Самый популярный фреймворк для локального использования.

Преимущества:

  • Работает на CPU и GPU
  • Поддержка Apple Silicon (M1/M2/M3)
  • Минимальные зависимости
  • Отличная производительность
  • Квантизация на лету
text-generation-webui (oobabooga)

Полнофункциональный веб-интерфейс.

Особенности:

  • Удобный веб-интерфейс
  • Поддержка множества форматов
  • Расширения и плагины
  • Chat и Notebook режимы
  • API для интеграции
vLLM

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

Преимущества:

  • Максимальная производительность
  • PagedAttention для эффективной работы с памятью
  • Continuous batching
  • OpenAI-совместимое API
  • Мониторинг и метрики
Transformers (HuggingFace)

Стандартная библиотека для работы с трансформерами.

Ollama

Простейший способ запуска локальных моделей.