Text Generation
Transformers
Safetensors
Russian
llama
russian
small-language-model
sovereign-ai
instruct
text-generation-inference
Instructions to use longtimedevs/Ru-Small-Instruct with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use longtimedevs/Ru-Small-Instruct with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="longtimedevs/Ru-Small-Instruct")# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("longtimedevs/Ru-Small-Instruct") model = AutoModelForCausalLM.from_pretrained("longtimedevs/Ru-Small-Instruct", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use longtimedevs/Ru-Small-Instruct with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "longtimedevs/Ru-Small-Instruct" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "longtimedevs/Ru-Small-Instruct", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/longtimedevs/Ru-Small-Instruct
- SGLang
How to use longtimedevs/Ru-Small-Instruct with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "longtimedevs/Ru-Small-Instruct" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "longtimedevs/Ru-Small-Instruct", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "longtimedevs/Ru-Small-Instruct" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "longtimedevs/Ru-Small-Instruct", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }' - Docker Model Runner
How to use longtimedevs/Ru-Small-Instruct with Docker Model Runner:
docker model run hf.co/longtimedevs/Ru-Small-Instruct
File size: 11,942 Bytes
a62a583 cbccfd9 d01bbc9 cbccfd9 a62a583 d01bbc9 4161def d32d906 d01bbc9 cbccfd9 d01bbc9 ba5243d cbccfd9 ba5243d cbccfd9 ba5243d cbccfd9 134339d ba5243d cbccfd9 ba5243d d32d906 9f2174d c31dbf2 ba5243d cbccfd9 ba5243d cbccfd9 ba5243d c31dbf2 cbccfd9 d32d906 cbccfd9 9f2174d cbccfd9 9f2174d d32d906 9f2174d c31dbf2 9f2174d d32d906 9f2174d cbccfd9 d32d906 9f2174d c31dbf2 ba5243d cbccfd9 9f2174d cbccfd9 9f2174d ba5243d cbccfd9 9f2174d cbccfd9 9f2174d cbccfd9 9f2174d cbccfd9 9f2174d d32d906 cbccfd9 d01bbc9 9f2174d cbccfd9 d01bbc9 cbccfd9 d01bbc9 cbccfd9 d01bbc9 9f2174d 1fd975a 9f2174d | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | ---
license: mit
library_name: transformers
pipeline_tag: text-generation
language:
- ru
tags:
- llama
- russian
- small-language-model
- sovereign-ai
- text-generation
- instruct
---
<p align="center">
<img src="https://huggingface.co/longtimedevs/Ru-Small-Instruct/resolve/main/RuSmallInstruct.png" alt="RuSmallInstruct" width="100%" />
</p>
# Ru-Small-Instruct (94.4M): Sovereign Lightweight Language Model
<!-- markdownlint-disable first-line-h1 -->
<!-- markdownlint-disable html -->
<!-- markdownlint-disable no-duplicate-header -->
<div align="center" style="line-height: 1.6; margin-bottom: 12px;">
<a href="https://long-time.ru" target="_blank" style="margin: 2px;">
<img alt="Website" src="https://img.shields.io/badge/🌐%20Website-long--time.ru-0284c7?style=for-the-badge&logoColor=white" style="display: inline-block; vertical-align: middle;"/>
</a>
<a href="https://huggingface.co/longtimedevs/Ru-Small-Instruct" target="_blank" style="margin: 2px;">
<img alt="Hugging Face" src="https://img.shields.io/badge/🤗%20Hugging%20Face-Ru--Small--Instruct-ffc107?style=for-the-badge&logoColor=white" style="display: inline-block; vertical-align: middle;"/>
</a>
<a href="https://huggingface.co/longtimedevs/Ru-Small-Instruct/blob/main/LICENSE" target="_blank" style="margin: 2px;">
<img alt="License" src="https://img.shields.io/badge/License-MIT-10b981?style=for-the-badge&logoColor=white" style="display: inline-block; vertical-align: middle;"/>
</a>
</div>
<div align="center" style="line-height: 1.4; margin-bottom: 20px;">
<img alt="Parameters" src="https://img.shields.io/badge/Backbone-94.4M%20(~182MB)-818cf8?style=flat-square"/>
<img alt="Hardware" src="https://img.shields.io/badge/Hardware-RTX%205060%20Ti%20(16GB)-76b900?style=flat-square&logo=nvidia&logoColor=white"/>
<img alt="Time" src="https://img.shields.io/badge/Trained%20in-~4%20Hours-orange?style=flat-square"/>
<img alt="Language" src="https://img.shields.io/badge/Language-Russian%20(ru)-ef4444?style=flat-square"/>
<img alt="Status" src="https://img.shields.io/badge/Zero--Fingerprint-Sovereign%20Weights-emerald?style=flat-square"/>
</div>
<p align="center">
<a href="https://long-time.ru"><b>Project Homepage & Dev Blog</b> 🚀</a>
</p>
---
> **Обновление от 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).
### Пример реального диалога с текущей версией:
```text
Вы: Привет!
Бот: Здравствуйте! Чем я могу вам помочь?
Вы: Ты кто?
Бот: Я искусственный интеллект — русскоязычная языковая модель, которая позволяет компьютерам
понимать и интерпретировать человеческий язык. Он включает в себя использование алгоритмов
для обучения и прогнозирования будущих событий на основе данных.
```
Для ультракомпактной модели в 94.4M параметров (~182 МБ), обученной на одном домашнем GPU за 4 часа, способность держать роль, грамотно формулировать сложные термины и помнить синтаксис русского языка — это отличный практический результат.
---
## Architecture & Specifications
<div align="center">
| Спецификация | Значение | Описание |
| :--- | :---: | :--- |
| **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 | Нативная разметка без утечек английских токенов |
</div>
---
## Training Recipe
### 1. Pre-training (Фундаментальное чтение)
Модель прошла фундаментальное обучение с нуля на русскоязычном корпусе:
* **Энциклопедический блок:** срез статей русской Википедии (естественные науки, география, история, технологии).
* **Связная речь и аналитика:** очищенные новостные тексты открытого корпуса «Газета».
* **Упаковка данных:** потоковая конкатенация токенов (Data Packing) с удалением паразитных паддингов.
### 2. SFT & Alignment (Инструкционная доводка)
Для стабилизации ответов проведена диалоговая огранка (Instruction Tuning) с маскированием пользовательского ввода:
* **Инвариантность к регистру:** устойчивость к строчным и заглавным запросам (`привет`, `Привет`, `ПРИВЕТ`).
* **Фактологическое якорение:** очистка от ложных ассоциаций и деловых писем.
* **Нативный диалоговый протокол:** управляющие маркеры `<|юзер|>`, `<|юзерзакончил|>`, `<|я_начал|>`, `<|я_закончил|>`.
---
## Benchmark & Performance
Оценка производительности на локальном оборудовании (NVIDIA GeForce RTX, FP16/BF16):
<div align="center">
| Метрика | Значение |
| :--- | :---: |
| **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 |
</div>
---
## Prompt Encoding
Для получения точных и связных ответов структурируйте промпт с переносами строк:
```text
<|юзер|>
Кто такой слон?
<|юзерзакончил|>
<|я_начал|>
```
Генерация завершается моделью на служебном маркере `<|я_закончил|>`.
---
## Minimal Inference
Запуск инференса на чистом Python через библиотеку `transformers`:
```python
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](https://huggingface.co/longtimedevs/Ru-Small-Instruct/blob/main/LICENSE). Веса свободны для коммерческого и исследовательского применения.
---
## Author & Project Info
Разработка, поддержка и сопутствующие проекты:
🌐 **Официальный сайт автора:** [https://long-time.ru](https://long-time.ru) |