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: Привет! Я Ватари, интеллектуальный помощник в решении различных задач.
``` |