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)