Ru-Small-Instruct (94.4M): Sovereign Lightweight Language Model

Parameters Hardware Time Language Status

Project Homepage & Dev Blog 🚀


Обновление от 21.09: Произошло обновление модели — она сильно уменьшила свой вес до ~182 МБ, став моделью на 94.4M параметров. Это было сделано для существенного снижения галлюцинаций.


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

Спецификация Значение Описание
Backbone Parameters 94.4M (~182 МБ) Сверхлегкая архитектура
Training Hardware 1x NVIDIA RTX 5060 Ti 16GB Обучение на домашнем железе
Training Time ~4 часа Полный сквозной цикл с нуля
Hidden Dimension ($d_{model}$) 896 Размерность латентного пространства
Intermediate Dimension ($d_{ff}$) 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) с маскированием пользовательского ввода:

  • Инвариантность к регистру: устойчивость к строчным и заглавным запросам (привет, Привет, ПРИВЕТ).
  • Фактологическое якорение: очистка от ложных ассоциаций и деловых писем.
  • Нативный диалоговый протокол: управляющие маркеры <|юзер|>, <|юзерзакончил|>, <|я_начал|>, <|я_закончил|>.

Benchmark & Performance

Оценка производительности на локальном оборудовании (NVIDIA GeForce RTX, FP16/BF16):

Метрика Значение
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 torch
from 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

Параметр Рекомендуемое значение Описание
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

Downloads last month
1,197
Safetensors
Model size
94.4M params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Space using longtimedevs/Ru-Small-Instruct 1