Text Generation
Transformers
Safetensors
Russian
qwen2
conversational
text-generation-inference
File size: 15,148 Bytes
f612a17
 
0f93d3b
 
 
 
f7fb489
 
fa2e8f1
 
 
f612a17
 
0f93d3b
 
64c4735
0f93d3b
0bd4afc
 
 
64c4735
0f93d3b
0bd4afc
 
 
0f93d3b
 
 
 
 
 
64c4735
89d65ce
0f93d3b
 
 
 
 
 
b342c98
 
 
 
64c4735
0f93d3b
 
 
 
 
 
 
b342c98
 
 
 
0f93d3b
 
 
 
b342c98
0f93d3b
7b29424
 
 
 
 
0f93d3b
 
7b29424
 
5ba1e49
393f594
 
 
7b29424
0f93d3b
5ba1e49
 
0f93d3b
5ba1e49
0f93d3b
5ba1e49
0f93d3b
 
edda043
 
0f93d3b
edda043
 
5ba1e49
 
 
0f93d3b
 
 
 
 
 
 
 
 
 
 
 
 
91339e9
 
 
 
0f93d3b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91339e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f54eba5
91339e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f54eba5
91339e9
 
 
0f93d3b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
---
library_name: transformers
datasets:
- Vikhrmodels/GrandMaster-PRO-MAX
- attn-signs/kolmogorov-3
- attn-signs/russian-code
base_model:
- RefalMachine/RuadaptQwen2.5-32B-Pro-Beta
license: apache-2.0
language:
- ru
---

# Watari 32B (V2)

### [EN]  
Qwen2.5-based model, adapted for russian text generation tasks.  
- The model has extended tokenizer and proper adapted chat template.  
- The model was trained using LoRA adapters.  
- The model was trained for **2 stages**  
### [RU]  
Finetune версия Qwen2.5, адаптированная для генерации русского текста.  
- Модель имеет расширенный токенайзер и правильный адаптированный чат темплейт (произведена работа над ошибками).  
- Модель была обучена с использованием низкоранговых адаптеров LoRA.  
- Модель была обучена в **2 стадии**  

### Previous models (considering parameters / states):
- Watari-7b-v1
- Watari-32b-v0

## Model Details / Детализация модели
### [EN]  
LoRA supervised finetuning version was performed on **2xA100 NVIDIA** GPUs for **~8 days**.  
**Datasets used:**  
- GrandMaster [Vikhrmodels/GrandMaster-PRO-MAX] (0.6 epochs)  
- Kolmogorov-3 [attn-signs/kolmogorov-3] (1 epochs)  
- Russian Code [attn-signs/russian/code] (1 epochs)  
The model has extended tokenizer based on arxiv paper and works of RefalMachine (RuAdapt / Moscow State University).  
**Huge thanks to Mikhail Tikhomirov for hard scientific work and tokenizer extension methods developed.**  
The model generation in russian is 60% more cheaper and faster due to the extended tokenizer (see the research at the end).

**Base model**: https://huggingface.co/RefalMachine/RuadaptQwen2.5-32B-Pro-Beta  
  
### [RU]  
SFT LoRA обучение было выполнено на **двух NVIDIA A100**, обучение длилось около **8 дней**.  
**Использованные датасеты:**
- GrandMaster [Vikhrmodels/GrandMaster-PRO-MAX] (0.6 эпохи)  
- Kolmogorov-3 [attn-signs/kolmogorov-3] (1 эпоха)  
- Russian Code [attn-signs/russian/code] (1 эпоха)  
Модель имеет расширенный токенайзер, метод основан на arxiv статье и работах RefalMachine (RuAdapt / Московский Государственный Университет).  
**Выражаю большое уважение Михаилу Тихомирову за его научные работы и методы расширения токенайзера.**  
Генерация модели, благодаря методу на 60% более быстрая и менее дорогая (см. исследование токенайзера в конце статьи).  
  
**Базовая модель**: https://huggingface.co/RefalMachine/RuadaptQwen2.5-32B-Pro-Beta 
  
### Model Description / Описание модели

- **Developed by:** [Reisen Raumberg (Attention Signs team)]
- **Language(s) (NLP):** [RU/EN]
- **Finetuned from model:** [Qwen2.5, RuAdapt version]  

**Distributed training:**  
- DeepSpeed (Stage 3)  
- HuggingFace Accelerator  
  
**Fusion:**  
- Flash Attention 2  
- Fused AdamW  
- Liger Kernel (swiglu, fused linear xentropy)  
  
**GPU hours**: ~384h of NVIDIA A100  
**GPU mem**:  
- Stage 1: 50-55GB of VRAM (both GPUs)
- Stage 2: 79GB of VRAM (both GPUs)
  
### Training configuration / Конфигурация обучения
The model was trained using MyLLM framework:  
  
--== [MyLLM](https://github.com/Raumberg/myllm) ==--  
  
**Model training / Обучение модели**  
  
The model was trained utilizing 2 stages:
- Stage 1:
  - Datasets: GrandMaster
  - LoRA: rank=128, alpha=256  
- Stage 2:
  - Datasets: Kolmogorov-3, Russian Code
  - LoRA: rank=256, alpha=256  
  
All configs are available in MyLLM repository.  
  
### Using the model / Как запустить?

```python
from transformers import AutoTokenizer, AutoModelForCausalLM

repo = 'attn-signs/Watari-32b-v2'

model = AutoModelForCausalLM.from_pretrained(repo)
tokenizer = AutoTokenizer.from_pretrained(repo)

model.to('cuda')

prompt = 'Расскажи мне про теорию категорий. Как мне построить коммутативную диаграмму? Знаешь ли ты что-то про театры ходжа-аракелова?'
# Model does not know about Θ±ell-Hodge theaters, it must say that it does not know.
# Модель не знает про театры ходжа, поэтому говорит, что не знает, чтобы не путать пользователя
# Hodge Theaters are taken from ABC conjecture proof from source: https://www.kurims.kyoto-u.ac.jp/~gokun/DOCUMENTS/abc2018Jul13.pdf
# Театры Ходжа-Аракелова были взяты из доказательства ABC гипотезы в источнике: https://www.kurims.kyoto-u.ac.jp/~gokun/DOCUMENTS/abc2018Jul13.pdfм
messages = [
    {"role": "system", "content": "Ты Ватари, ассистент и помощник в решении различных задач. Отвечай на вопросы пользователя, рассуждая."},
    {"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=32768
)
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

print(response)
```

```
Теория категорий — это раздел математики, который изучает абстрактные структуры и их взаимосвязи. Она предоставляет общий язык для описания математических объектов и преобразований между ними. Основные понятия теории категорий включают категории, объекты, морфизмы (стрелки), композиции морфизмов и коммутативные диаграммы.

**Коммутативная диаграмма** — это визуальное представление того, как различные морфизмы взаимодействуют друг с другом. Чтобы построить её:

1. **Определите объекты**: Выберите математические объекты (например, множества, группы, векторные пространства), которые будут вершинами диаграммы.
2. **Укажите морфизмы**: Нарисуйте стрелки между объектами, обозначающие функции или отображения между ними.
3. **Убедитесь в коммутативности**: Убедитесь, что для любой пары путей из одной вершины в другую, композиция морфизмов вдоль этих путей дает одинаковое преобразование. Это означает, что независимо от выбранного пути результат будет одинаковым.

Пример: Если у вас есть объекты A, B, C и морфизмы f: A → B, g: B → C, h: A → C, то диаграмма коммутирует, если g ∘ f = h.

Для построения диаграмм часто используют программы вроде TikZ в LaTeX, где можно точно указать расположение объектов и стрелки между ними.

Что касается **театров Ходжа-Аракелова**, я не располагаю информацией о таком понятии. Возможно, имеется в виду теория Ходжа или Аракеловская геометрия, но "театры" не являются стандартным термином в математике. Если вы имеете в виду конкретную концепцию или предмет исследования, уточните, пожалуйста, чтобы я мог предоставить точный ответ.
```
**Coding task (example from attn-signs/russian-code dataset) / Задача на python код (пример из собственного датасета)**
```
# prompt is:
# Пожалуйста, помоги мне написать код на Python и функцию, которая принимает в качестве входных данных три числа: текущее_значение, ставку и время. Функция должна рассчитать аннуитетный платеж на основе заданной текущей стоимости, процентной ставки и времени и вернуть результат.
# model answer is:

Для расчета аннуитетного платежа можно использовать формулу:

\[
A = P \times \frac{r(1 + r)^n}{(1 + r)^n - 1}
\]

где:
- \( A \) — аннуитетный платеж,
- \( P \) — текущая стоимость (present value),
- \( r \) — периодическая процентная ставка (ставка за период),
- \( n \) — количество периодов.

Периодическая процентная ставка рассчитывается как годовая ставка, деленная на количество периодов в году. Если периоды указаны в годах, то годовая ставка используется напрямую.

Вот пример реализации функции на Python:

# python-code
def calculate_annuity_payment(present_value, rate, time):
    
    if present_value <= 0 or rate <= 0 or time <= 0:
        raise ValueError("Present value, rate, and time must be positive numbers.")

    # Calculate the periodic rate assuming annual compounding
    periodic_rate = rate / 100  # Convert rate from percentage to decimal

    # Calculate the annuity payment using the formula
    numerator = periodic_rate * (1 + periodic_rate) ** time
    denominator = (1 + periodic_rate) ** time - 1
    annuity_payment = present_value * (numerator / denominator)

    return annuity_payment

# Пример использования:
present_value = 10000
rate = 5  # 5% annual interest rate
time = 5  # 5 years

payment = calculate_annuity_payment(present_value, rate, time)
print(f"The annuity payment is: {payment:.2f}")


Обратите внимание, что функция проверяет входные параметры на положительные значения и вызывает исключение `ValueError`, если это не так. Это помогает избежать математических ошибок при вычислении. Также предполагается, что процентная ставка указана в процентах годовых, а время — в годах. Если требуется другая периодичность (например, ежемесячная), необходимо соответствующим образом скорректировать расчет периодической ставки.
```

### Tokenizer research / Исследование токенайзера:
You can verify and see the internals of tokenization yourself by the python code provided below:    
Можно рассмотреть внутренности токенизации самостоятельно, для этого прилагается следующий python код:  
```python
input_text = "Привет! Я Ватари, интеллектуальный помощник в решении различных задач."

# Tokenize
tokenized = tokenizer(input_text, return_tensors="pt", return_offsets_mapping=True)
tokens = tokenizer.convert_ids_to_tokens(tokenized["input_ids"][0])

# Print raw tokens and decoded versions
print("Tokenization Analysis:\n")
for i, (token, offset) in enumerate(zip(tokens, tokenized.offset_mapping[0])):
    # Get start/end positions in original text
    start, end = offset.tolist()
    original_slice = input_text[int(start):int(end)]
    
    # Clean token representation and replace Ġ (which represent the whitespace)
    cleaned_token = token.replace('Ġ', ' ').replace('▁', ' ')
    
    print(f"Token {i}:")
    print(f"  Raw: {token}")
    print(f"  Cleaned: {cleaned_token}")
    print(f"  Decoded: {tokenizer.decode(tokenized['input_ids'][0][i])}")
    print(f"  Original text slice: '{original_slice}'")
    print(f"  Byte representation: {list(token.encode('utf-8'))}")
    print("-" * 50)

# Verify full reconstruction
print("\nFull Reconstruction:", tokenizer.decode(tokenized["input_ids"][0]))
```
**Output / Результат:**  

```
...
--------------------------------------------------
Token 8:
  Raw: ĠинÑĤеллекÑĤ
  Cleaned:  инÑĤеллекÑĤ
  Decoded:  интеллект
  Original text slice: ' интеллект'
  Byte representation: [196, 160, 195, 144, 194, 184, 195, 144, 194, 189, 195, 145, 196, 164, 195, 144, 194, 181, 195, 144, 194, 187, 195, 144, 194, 187, 195, 144, 194, 181, 195, 144, 194, 186, 195, 145, 196, 164]
--------------------------------------------------
Token 9:
  Raw: Ñĥ
  Cleaned: Ñĥ
  Decoded: у
  Original text slice: 'у'
  Byte representation: [195, 145, 196, 165]
...
Token 13:
  Raw: ĠÑĢеÑĪении
  Cleaned:  ÑĢеÑĪении
  Decoded:  решении
  Original text slice: ' решении'
  Byte representation: [196, 160, 195, 145, 196, 162, 195, 144, 194, 181, 195, 145, 196, 170, 195, 144, 194, 181, 195, 144, 194, 189, 195, 144, 194, 184, 195, 144, 194, 184]
--------------------------------------------------
Token 14:
  Raw: ĠÑĢазлиÑĩнÑĭÑħ
  Cleaned:  ÑĢазлиÑĩнÑĭÑħ
  Decoded:  различных
  Original text slice: ' различных'
  Byte representation: [196, 160, 195, 145, 196, 162, 195, 144, 194, 176, 195, 144, 194, 183, 195, 144, 194, 187, 195, 144, 194, 184, 195, 145, 196, 169, 195, 144, 194, 189, 195, 145, 196, 173, 195, 145, 196, 167]
--------------------------------------------------
Full Reconstruction: Привет! Я Ватари, интеллектуальный помощник в решении различных задач.
```