Update README.md
Browse files
README.md
CHANGED
@@ -1,199 +1,194 @@
|
|
1 |
---
|
2 |
library_name: transformers
|
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 |
-
## Model Card Authors [optional]
|
194 |
-
|
195 |
-
[More Information Needed]
|
196 |
-
|
197 |
-
## Model Card Contact
|
198 |
-
|
199 |
-
[More Information Needed]
|
|
|
1 |
---
|
2 |
library_name: transformers
|
3 |
+
datasets:
|
4 |
+
- Vikhrmodels/GrandMaster-PRO-MAX
|
5 |
+
- attn-signs/kolmogorov-3
|
6 |
+
- attn-signs/russian-code
|
7 |
---
|
8 |
|
9 |
+
# Watari 32B (V2)
|
10 |
+
|
11 |
+
- [EN]
|
12 |
+
Qwen2.5-based model, adapted for russian text generation tasks.
|
13 |
+
The model has extended tokenizer and proper adapted chat template.
|
14 |
+
The model was trained using LoRA adapters.
|
15 |
+
The model was trained for **2 stages**
|
16 |
+
- [RU]
|
17 |
+
Finetune версия Qwen2.5, адаптированная для генерации русского текста.
|
18 |
+
Модель имеет расширенный токенайзер и правильный адаптированный чат темплейт (произведена работа над ошибками).
|
19 |
+
Модель была обучена с использованием низкоранговых адаптеров LoRA.
|
20 |
+
Модель была обучена в **2 стадии**
|
21 |
+
|
22 |
+
### Previous models (considering parameters / states):
|
23 |
+
- Watari-7b-v1
|
24 |
+
- Watari-32b-v0
|
25 |
+
|
26 |
+
## Model Details / Детализация модели
|
27 |
+
- [EN]
|
28 |
+
LoRA supervised finetuning version was performed on **2xA100 NVIDIA** GPUs for **~8 days**.
|
29 |
+
**Datasets used:**
|
30 |
+
- GrandMaster [Vikhrmodels/GrandMaster-PRO-MAX] (0.6 epochs)
|
31 |
+
- Kolmogorov-3 [attn-signs/kolmogorov-3] (1 epochs)
|
32 |
+
- Russian Code [attn-signs/russian/code] (1 epochs)
|
33 |
+
**Extensions:**
|
34 |
+
The model has extended tokenizer based on arxiv paper and works of RefalMachine (RuAdapt / Moscow State University).
|
35 |
+
**Huge thanks to Mikhail Tikhomirov for hard scientific work and tokenizer extension methods developed.**
|
36 |
+
The model generation in russian is 60% more cheaper and faster due to the extended tokenizer (see the research at the end).
|
37 |
+
- [RU]
|
38 |
+
SFT LoRA обучение было выполнено на **двух NVIDIA A100**, обучение длилось около **8 дней**.
|
39 |
+
**Использованные датасеты:**
|
40 |
+
- GrandMaster [Vikhrmodels/GrandMaster-PRO-MAX] (0.6 эпохи)
|
41 |
+
- Kolmogorov-3 [attn-signs/kolmogorov-3] (1 эпоха)
|
42 |
+
- Russian Code [attn-signs/russian/code] (1 эпоха)
|
43 |
+
Модель имеет расширенный токенайзер, метод основан на arxiv статье и работах RefalMachine (RuAdapt / Московский Государственный Университет).
|
44 |
+
**Выражаю большое уважение Михаилу Тихомирову за его научные работы и методы расширения токенайзера.**
|
45 |
+
Генерация модели, благодаря методу на 60% более быстрая и менее дорогая (см. исследование токенайзера в конце статьи).
|
46 |
+
|
47 |
+
### Model Description / Описание модели
|
48 |
+
|
49 |
+
- **Developed by:** [Reisen Raumberg (Attention Signs team)]
|
50 |
+
- **Language(s) (NLP):** [RU/EN]
|
51 |
+
- **Finetuned from model:** [Qwen2.5]
|
52 |
+
|
53 |
+
**Distributed training:**
|
54 |
+
- DeepSpeed (Stage 3)
|
55 |
+
- HuggingFace Accelerator
|
56 |
+
|
57 |
+
**Fusion:**
|
58 |
+
- Flash Attention 2
|
59 |
+
- Fused AdamW
|
60 |
+
- Liger Kernel (swiglu, fused linear xentropy)
|
61 |
+
-
|
62 |
+
**GPU hours**: ~384 of NVIDIA A100
|
63 |
+
|
64 |
+
### Training configuration / Конфигурация обучения
|
65 |
+
**The model was trained using MyLLM framework:**
|
66 |
+
--== [MyLLM](https://github.com/Raumberg/myllm) ==--
|
67 |
+
**Model training / Обучение модели**
|
68 |
+
The model was trained utilizing 2 stages:
|
69 |
+
- Stage 1:
|
70 |
+
- Datasets: GrandMaster, LoRA: rank=128, alpha=256
|
71 |
+
- Stage 2:
|
72 |
+
- Datasets: Kolmogorov-3, Russian Code, LoRA: rank=256, alpha=256
|
73 |
+
|
74 |
+
**All configs are available in MyLLM repository.**
|
75 |
+
|
76 |
+
### Using the model / Как запустить?
|
77 |
+
|
78 |
+
```python
|
79 |
+
from transformers import AutoTokenizer, AutoModelForCausalLM
|
80 |
+
|
81 |
+
repo = 'attn-signs/Watari-32b-v2'
|
82 |
+
|
83 |
+
model = AutoModelForCausalLM.from_pretrained(repo)
|
84 |
+
tokenizer = AutoTokenizer.from_pretrained(repo)
|
85 |
+
|
86 |
+
model.to('cuda')
|
87 |
+
|
88 |
+
prompt = 'Расскажи мне про теорию категорий. Как мне построить коммутативную диаграмму? Знаешь ли ты что-то про театры ходжа-аракелова?'
|
89 |
+
messages = [
|
90 |
+
{"role": "system", "content": "Ты Ватари, ассистент и помощник в решении различных задач. Отвечай на вопросы пользователя, рассуждая."},
|
91 |
+
{"role": "user", "content": prompt}
|
92 |
+
]
|
93 |
+
text = tokenizer.apply_chat_template(
|
94 |
+
messages,
|
95 |
+
tokenize=False,
|
96 |
+
add_generation_prompt=True
|
97 |
+
)
|
98 |
+
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
|
99 |
+
|
100 |
+
generated_ids = model.generate(
|
101 |
+
**model_inputs,
|
102 |
+
max_new_tokens=32768
|
103 |
+
)
|
104 |
+
generated_ids = [
|
105 |
+
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
106 |
+
]
|
107 |
+
|
108 |
+
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
|
109 |
+
|
110 |
+
print(response)
|
111 |
+
```
|
112 |
+
|
113 |
+
```
|
114 |
+
Теория категорий — это раздел математики, который изучает абстрактные структуры и их взаимосвязи. Она предоставляет общий язык для описания математических объектов и преобразований между ними. Основные понятия теории категорий включают категории, объекты, морфизмы (стрелки), композиции морфизмов и коммутативные диаграммы.
|
115 |
+
|
116 |
+
**Коммутативная диаграмма** — это визуальное представление того, как различные морфизмы взаимодействуют друг с другом. Чтобы построить её:
|
117 |
+
|
118 |
+
1. **Определите объекты**: Выберите математические объекты (например, множества, группы, векторные пространства), которые будут вершинами диаграммы.
|
119 |
+
2. **Укажите морфизмы**: Нарисуйте стрелки между объектами, обозначающие функции или отображения между ними.
|
120 |
+
3. **Убедитесь в коммутативности**: Убедитесь, что для любой пары путей из одной вершины в другую, композиция морфизмов вдоль этих путей дает одинаковое преобразование. Это означает, что независимо от выбранного пути результат будет одинаковым.
|
121 |
+
|
122 |
+
Пример: Если у вас есть объекты A, B, C и морфизмы f: A → B, g: B → C, h: A → C, то диаграмма коммутирует, если g ∘ f = h.
|
123 |
+
|
124 |
+
Для построения диаграмм часто используют программы вроде TikZ в LaTeX, где можно точно указать расположение объектов и стрелки между ними.
|
125 |
+
|
126 |
+
Что касается **театров Ходжа-Аракелова**, я не располагаю информацией о таком понятии. Возможно, имеется в виду теория Ходжа или Аракеловская геометрия, но "театры" не являются стандартным термином в математике. Если вы имеете в виду конкретную концепцию или предмет исследования, уточните, пожалуйста, чтобы я мог предоставить точный ответ.
|
127 |
+
```
|
128 |
+
|
129 |
+
### Tokenizer research / Исследование токенайзера:
|
130 |
+
You can verify and see the internals of tokenization yourself by the python code provided below:
|
131 |
+
Можно рассмотреть внутренности токенизации самостоятельно, для этого прилагается следующий python код:
|
132 |
+
```python
|
133 |
+
input_text = "Привет! Я Ватари, интеллектуальный помощник в решении различных задач."
|
134 |
+
|
135 |
+
# Tokenize
|
136 |
+
tokenized = tokenizer(input_text, return_tensors="pt", return_offsets_mapping=True)
|
137 |
+
tokens = tokenizer.convert_ids_to_tokens(tokenized["input_ids"][0])
|
138 |
+
|
139 |
+
# Print raw tokens and decoded versions
|
140 |
+
print("Tokenization Analysis:\n")
|
141 |
+
for i, (token, offset) in enumerate(zip(tokens, tokenized.offset_mapping[0])):
|
142 |
+
# Get start/end positions in original text
|
143 |
+
start, end = offset.tolist()
|
144 |
+
original_slice = input_text[int(start):int(end)]
|
145 |
+
|
146 |
+
# Clean token representation and replace Ġ (which represent the whitespace)
|
147 |
+
cleaned_token = token.replace('Ġ', ' ').replace('▁', ' ')
|
148 |
+
|
149 |
+
print(f"Token {i}:")
|
150 |
+
print(f" Raw: {token}")
|
151 |
+
print(f" Cleaned: {cleaned_token}")
|
152 |
+
print(f" Decoded: {tokenizer.decode(tokenized['input_ids'][0][i])}")
|
153 |
+
print(f" Original text slice: '{original_slice}'")
|
154 |
+
print(f" Byte representation: {list(token.encode('utf-8'))}")
|
155 |
+
print("-" * 50)
|
156 |
+
|
157 |
+
# Verify full reconstruction
|
158 |
+
print("\nFull Reconstruction:", tokenizer.decode(tokenized["input_ids"][0]))
|
159 |
+
```
|
160 |
+
**Output / Результат:**
|
161 |
+
|
162 |
+
```
|
163 |
+
...
|
164 |
+
--------------------------------------------------
|
165 |
+
Token 8:
|
166 |
+
Raw: ĠинÑĤеллекÑĤ
|
167 |
+
Cleaned: инÑĤеллекÑĤ
|
168 |
+
Decoded: интеллект
|
169 |
+
Original text slice: ' интеллект'
|
170 |
+
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]
|
171 |
+
--------------------------------------------------
|
172 |
+
Token 9:
|
173 |
+
Raw: Ñĥ
|
174 |
+
Cleaned: Ñĥ
|
175 |
+
Decoded: у
|
176 |
+
Original text slice: 'у'
|
177 |
+
Byte representation: [195, 145, 196, 165]
|
178 |
+
...
|
179 |
+
Token 13:
|
180 |
+
Raw: ĠÑĢеÑĪении
|
181 |
+
Cleaned: ÑĢеÑĪении
|
182 |
+
Decoded: решении
|
183 |
+
Original text slice: ' решении'
|
184 |
+
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]
|
185 |
+
--------------------------------------------------
|
186 |
+
Token 14:
|
187 |
+
Raw: ĠÑĢазлиÑĩнÑĭÑħ
|
188 |
+
Cleaned: ÑĢазлиÑĩнÑĭÑħ
|
189 |
+
Decoded: различных
|
190 |
+
Original text slice: ' различных'
|
191 |
+
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]
|
192 |
+
--------------------------------------------------
|
193 |
+
Full Reconstruction: Привет! Я Ватари, интеллектуальный помощник в решении различных задач.
|
194 |
+
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|