Introduction
Ru-Small-Instruct — экспериментальная компактная русскоязычная языковая модель класса SLM (Small Language Model) с объемом параметров 94.4M (~182 МБ). Разработана с упором на суверенность весов (Zero-Fingerprint): модель обучена с нуля без заимствования базовых чекпоинтов у сторонних корпоративных сетей (Llama 3 от Meta, Qwen от Alibaba, Mistral).
Модель предназначена для исследований локального инференса, работы на маломощном оборудовании, CPU и мобильных чипах, где критичны нулевая задержка (Time-To-First-Token) и полная независимость весов.
⚠️ Текущий статус модели и честный взгляд (Limitations)
Модель находится на ранней стадии и пока далека от совершенства. При компактном объеме в 94.4M параметров она может иногда выдавать неожиданные ассоциации, путать факты или уходить в галлюцинации на коротких или неоднозначных запросах.
Этому не стоит удивляться:
Модель Ru-Small-Instruct была создана с нуля всего за 4 часа на одной домашней видеокарте NVIDIA GeForce RTX 5060 Ti (16GB) — от обучения собственного BPE-токенизатора и фундаментального чтения статей Википедии до финальной диалоговой огранки (SFT).
Пример реального диалога с текущей версией:
Вы: Привет!Бот: Здравствуйте! Чем я могу вам помочь? Вы: Ты кто?Бот: Я искусственный интеллект — русскоязычная языковая модель, которая позволяет компьютерам понимать и интерпретировать человеческий язык. Он включает в себя использование алгоритмов для обучения и прогнозирования будущих событий на основе данных.
Для ультракомпактной модели в 94.4M параметров (~182 МБ), обученной на одном домашнем GPU за 4 часа, способность держать роль, грамотно формулировать сложные термины и помнить синтаксис русского языка — это отличный практический результат.
Architecture & Specifications
Table with columns: Спецификация, Значение, Описание| Спецификация | Значение | Описание |
|---|
| Backbone Parameters | 94.4M (~182 МБ) | Сверхлегкая архитектура |
| Training Hardware | 1x NVIDIA RTX 5060 Ti 16GB | Обучение на домашнем железе |
| Training Time | ~4 часа | Полный сквозной цикл с нуля |
| Hidden Dimension (dmodel) | 896 | Размерность латентного пространства |
| Intermediate Dimension (dff) | 2560 | Размерность слоев SwiGLU MLP |
| Layers | 16 | Глубина трансформерных блоков |
| Attention Heads (Q / KV) | 14 / 2 | Grouped-Query Attention (GQA) |
| Context Length | 512 | Окно внимания с поддержкой RoPE |
| Vocab Size | 28 672 | Чистый русский ByteLevel BPE |
| Native Precision | bfloat16 / float16 | Базовый формат хранения |
| Special Chat Tags | Custom Cyrillic | Нативная разметка без утечек английских токенов |
Training Recipe
1. Pre-training (Фундаментальное чтение)
Модель прошла фундаментальное обучение с нуля на русскоязычном корпусе:
- Энциклопедический блок: срез статей русской Википедии (естественные науки, география, история, технологии).
- Связная речь и аналитика: очищенные новостные тексты открытого корпуса «Газета».
- Упаковка данных: потоковая конкатенация токенов (Data Packing) с удалением паразитных паддингов.
2. SFT & Alignment (Инструкционная доводка)
Для стабилизации ответов проведена диалоговая огранка (Instruction Tuning) с маскированием пользовательского ввода:
- Инвариантность к регистру: устойчивость к строчным и заглавным запросам (
привет, Привет, ПРИВЕТ).
- Фактологическое якорение: очистка от ложных ассоциаций и деловых писем.
- Нативный диалоговый протокол: управляющие маркеры
<|юзер|>, <|юзерзакончил|>, <|я_начал|>, <|я_закончил|>.
Оценка производительности на локальном оборудовании (NVIDIA GeForce RTX, FP16/BF16):
Table with columns: Метрика, Значение| Метрика | Значение |
|---|
| Generation Speed (RTX Desktop) | 180 – 210 t/s |
| Memory Footprint (Inference) | ~200 – 250 MB |
| Cold Start Time | < 0.15 s |
| Supported Hardware | CUDA, Apple Silicon (MPS), CPU, Edge |
Prompt Encoding
Для получения точных и связных ответов структурируйте промпт с переносами строк:
<|юзер|>Кто такой слон?<|юзерзакончил|><|я_начал|>
Генерация завершается моделью на служебном маркере <|я_закончил|>.
Minimal Inference
Запуск инференса на чистом Python через библиотеку transformers:
import torchfrom transformers import PreTrainedTokenizerFast, LlamaForCausalLM MODEL_ID = "longtimedevs/Ru-Small-Instruct"DEVICE = "cuda:0" if torch.cuda.is_available() else "cpu"DTYPE = torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16 # 1. Загрузка модели и токенизатораtokenizer = PreTrainedTokenizerFast.from_pretrained(MODEL_ID)model = LlamaForCausalLM.from_pretrained(MODEL_ID, torch_dtype=DTYPE).to(DEVICE)model.eval() # 2. Подготовка запросаuser_query = "Привет! Кто ты?"prompt = f"<|юзер|>\n{user_query}\n<|юзерзакончил|>\n<|я_начал|>\n"inputs = tokenizer(prompt, return_tensors="pt").to(DEVICE) # 3. Генерация с остановкой по токенуai_end_id = tokenizer.convert_tokens_to_ids("<|я_закончил|>") with torch.no_grad(): output_tokens = model.generate( **inputs, max_new_tokens=120, temperature=0.25, top_p=0.85, repetition_penalty=1.15, eos_token_id=[ai_end_id, tokenizer.eos_token_id], pad_token_id=tokenizer.pad_token_id, do_sample=True ) # 4. Декодирование ответаresponse = tokenizer.decode(output_tokens[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)print(f"Ru-Small-Instruct: {response.strip()}")
Recommended Generation Parameters
Table with columns: Параметр, Рекомендуемое значение, Описание| Параметр | Рекомендуемое значение | Описание |
|---|
temperature | 0.25 | Минимизирует дрейф внимания на компактных весах |
top_p | 0.85 | Отрезает маловероятные токены |
repetition_penalty | 1.15 | Предотвращает зацикливание списков |
max_new_tokens | 120 – 150 | Оптимальная длина реплики |
License
Модель и связанные материалы распространяются под лицензией MIT License. Веса свободны для коммерческого и исследовательского применения.
Author & Project Info
Разработка, поддержка и сопутствующие проекты:
🌐 Официальный сайт автора: https://long-time.ru