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)
Основной метод дообучения базовых моделей на русскоязычных данных.
Процесс:
- Загрузка предобученной базовой модели (LLaMa, Mistral)
- Подготовка датасетов в формате инструкция-ответ
- Обучение с использованием LoRA адаптеров
- Валидация на отложенной выборке
- Сохранение чекпоинтов каждые 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
Простейший способ запуска локальных моделей.