<C/> loading...

<section id="saiga">

Saiga LLM

Многопользовательский LLM-сервис на Saiga Nemo 12B (семейство Llama, GGUF Q4_K_M): модель работает локально на 2× NVIDIA P104-100, слои распределены через llama.cpp. Распределённый деплой: веб-интерфейс, OpenAI-совместимый API, Telegram-бот и полный стек мониторинга.

saiga.vaibkod.ru @saiga_ai_bot github.com/KondrashovDenis/saiga

</section>

12B
Параметров
Saiga Nemo
8K
Контекстное
окно
15-18
Токенов/с
при контексте 8K
~7.5GB
VRAM всего
2× P104-100

О проекте

Русскоязычная LLM на своём сервере с полным ML-пайплайном

Что такое Saiga?

Saiga — одна из самых популярных open-source LLM для русского языка. Её автор — Илья Гусев, Senior ML Engineer в Booking.com. Большинство открытых моделей заточены под английский и токенизируют русский текст неэффективно — Saiga решает эту проблему.

В этом проекте Saiga Nemo 12B работает локально на двух майнинговых NVIDIA P104-100 (по 8 ГБ VRAM), слои распределены через llama.cpp. Третья P104 на том же хосте отдана под Stable Diffusion + ControlNet в соседнем RAG-проекте — железо делится между ML-задачами. Рабочая производительность на доступном железе, которое стоит малую долю облачного инференса.

Полный ML-пайплайн: от инференса на GPU до мониторинга. Деплой разнесён на две физические машины: Telegram-бот живёт на отдельном VDS и подключается через SSH-туннель с restricted-key — так обходится блокировка Telegram API у российских провайдеров.

Железо

# Hardware configuration
GPU_0: NVIDIA P104-100 · 8 GB VRAM (LLM layers)
GPU_1: NVIDIA P104-100 · 8 GB VRAM (LLM layers)
GPU_2: NVIDIA P104-100 · 8 GB VRAM (Stable Diffusion · sibling project)
# Layer split via llama.cpp
USED: ~7.5 GB total (model layers across 2 GPUs)
SHM: 64 GB
MODEL: Saiga-nemo-12b-Q4_K_M.gguf
ENGINE: llama.cpp + CUDA 11.8
CONTEXT: 8 192 tokens
SPEED: 15-18 tok/s · 99%+ uptime

Возможности сервиса

GPU-кластер

2× P104-100 mining GPUs (Pascal, без tensor cores) с layer-split через llama.cpp. CUDA 11.8 в контейнере, host driver 535.x, nvidia-container-toolkit runtime для proper library forwarding. Третья P104 в том же хосте — под Stable Diffusion для соседнего RAG-проекта.

Распределённый деплой

GPU-сервер с моделью + Telegram-бот на изолированном VDS. Бот ходит к Postgres через SSH-туннель с restricted-key (permitopen=127.0.0.1:5432), к LLM — через HTTPS+Bearer. Решает блокировку api.telegram.org. Single account web↔bot через custom Telegram deep-link auth (без Widget) — диалоги и настройки общие.

Мониторинг в продакшене

Sentry на web и боте, Prometheus + Grafana с custom dashboards: GPU memory/util/temp/power через NVIDIA DCGM-exporter, контейнеры через cAdvisor v0.51, host metrics через node-exporter. Доступ через metrics.vaibkod.ru с basic-auth.

CI/CD и тесты

GitHub Actions с ruff (strict) + pytest. 62 unit-теста с 99% coverage на тестируемых модулях (markdown converter, database URL converter, env validators, TelegramLinkToken model). Coverage artifact upload.

Архитектура

2 физических хоста · 5 поддоменов с разными политиками доступа

// GPU host

  • Debian 12 · 2× P104-100 (LLM)
  • Web UI (Flask + Gunicorn)
  • LLM inference (llama.cpp)
  • PostgreSQL 16 · Redis 7
  • Caddy reverse-proxy
  • Prometheus + Grafana stack

// VDS (telegram bot)

  • python-telegram-bot 20.7 async
  • aiohttp (LLM client + retry)
  • Async SQLAlchemy 2.0 + asyncpg
  • SSH-туннель к Postgres
  • autossh systemd service
  • Bearer-auth to llm.vaibkod.ru

// Caddy subdomains

  • saiga.vaibkod.ru — публичный веб
  • llm.vaibkod.ru — Bearer-auth API
  • saigaui.vaibkod.ru — basic-auth
  • metrics.vaibkod.ru — basic-auth
  • 10+ сервисов на 2 хостах
  • auto Let's Encrypt

Технологии

// ИНФЕРЕНС LLM

text-generation-webui (форк oobabooga), llama-cpp-python с GGML_CUDA=on, PyTorch 2.7 + cu126, квантизация GGUF Q4_K_M

// GPU-ИНФРАСТРУКТУРА

2× NVIDIA P104-100 (Pascal, без tensor cores), CUDA 11.8 в контейнере, драйвер хоста 535.x, runtime nvidia-container-toolkit

// БЭКЕНД (AI-СЦЕНАРИИ)

Python 3.11, Flask + Gunicorn (веб со стримингом чата), python-telegram-bot 20.7 async, aiohttp (клиент LLM API с retry и Bearer), async SQLAlchemy 2.0 + asyncpg

// ХРАНЕНИЕ

PostgreSQL 16 (общая для веба и бота через единый SQLAlchemy-пакет saiga_shared), Alembic для миграций с разделением ролей DDL/DML (_migrator для Alembic, _app для runtime — в runtime нельзя DROP/ALTER), Redis 7 для состояния бота

// МОНИТОРИНГ

Sentry SDK (интеграция с Flask + ручная инициализация в боте), Prometheus 2.55, Grafana 11.3, DCGM-exporter 3.3.7, cAdvisor v0.51, node-exporter 1.8

// CI/CD И ИНФРА

GitHub Actions (ruff strict + pytest с coverage), Caddy 2 как reverse-proxy с автоматическим Let's Encrypt, Docker Compose (10+ сервисов), systemd-юниты autossh для туннелей

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

Выберите модель под своё железо

Модель Параметры Контекст Основа VRAM (Q4)
Saiga LLaMA 2 7B7B4 096Meta LLaMA 2~6 GB
Saiga Mistral 7B7B8 192Mistral 7B~6 GB
Saiga LLaMA 3 8B8B8 192Meta LLaMA 3~7 GB
Saiga LLaMA 2 13B13B4 096Meta LLaMA 2~10 GB
★ Saiga Nemo 12B12.2B128 000Mistral NeMo / NVIDIA~9 GB (split)
Saiga LLaMA 2 70B70B4 096Meta LLaMA 2~48 GB

Методы обучения

SFT

Supervised fine-tuning на русскоязычных парах «инструкция — ответ»

DPO / SimPO

Оптимизация по предпочтениям на парных сравнениях

SLERP

Слияние моделей сферической линейной интерполяцией

LoRA

Экономное по параметрам дообучение под конкретные задачи

Уровни квантизации

Формат GGUF через llama.cpp. Баланс между качеством и объёмом VRAM:

Q2_K — 2-bit Q3_K_M — 3-bit Q4_K_M — 4-bit ★ Q5_K_M — 5-bit Q6_K — 6-bit Q8_0 — 8-bit

★ Рекомендую Q4_K_M — лучшее соотношение качества и VRAM

Фреймворки для запуска

llama.cpp
Инференс на CPU и GPU, нативный GGUF — используется здесь
Ollama
Простой локальный запуск, REST API
vLLM
Высокая пропускная способность, нужны tensor cores
Transformers
Нативно для HuggingFace, полная точность

Хотите внедрить локальный ИИ?

Разверну локальную LLM для вашего бизнеса: данные остаются у вас, полный контроль, никаких расходов на облако. Обсудим вашу задачу.

Оставить заявку