|
|
--- |
|
|
library_name: transformers |
|
|
license: apache-2.0 |
|
|
datasets: |
|
|
- attn-signs/russian-reasoning |
|
|
language: |
|
|
- ru |
|
|
base_model: |
|
|
- attn-signs/Watari-7b-v1 |
|
|
--- |
|
|
|
|
|
# Zariman 7B Reason (V0) |
|
|
|
|
|
- [EN] |
|
|
Reasoning model adapted for russian text generation. |
|
|
**Based on Watari-7B-v1** |
|
|
- [RU] |
|
|
Модель рассуждений, адаптированная для генерации русскоязычного текста. |
|
|
**Построена на Watari-7B-v1** |
|
|
|
|
|
## Static quants available on / Квантизация модели доступна на |
|
|
https://huggingface.co/mradermacher/Zariman-7b-v0-GGUF |
|
|
**Repo id:** mradermacher/Zariman-7b-v0-GGUF |
|
|
|
|
|
## Model Details / Детализация модели |
|
|
- [EN] |
|
|
LoRA SFT version of base Watari-7B-v1 to invoke reasoning capabilities on a specific system prompt. |
|
|
May be instable (especially when large context size is used), may enter infinite loops. Model is designed for deep understanding and futher GRPO alignment. |
|
|
- [RU] |
|
|
SFT на низкоранговых адаптерах базовой модели Watari-7B-v1 для возможностей размышления и глубокого понимания запроса на конкретный системный промпт. |
|
|
Может быть нестабильна (особенно при больших контекстных окнах), может входить в бесконечные циклы рассуждений. Модель создана для будущего алайнмента с алгоритмом GRPO |
|
|
|
|
|
### Model Description / Описание модели |
|
|
|
|
|
- **Developed by:** [Reisen Raumberg (Attention Signs team)] |
|
|
- **Language(s) (NLP):** [RU/EN] |
|
|
- **Finetuned from model:** [Watari-7B-v1] |
|
|
|
|
|
Utilized DeepSpeed (Stage 3), HF.Accelerator for distributed training and fused AdamW. |
|
|
**GPU hours**: ~64h of NVIDIA A100 |
|
|
|
|
|
Для обучения использовались HuggingFace Accelerator с Microsoft DeepSpeed (Stage 3) для распределения параметров и стейта оптимизатора, а так же зафьюженный AdamW |
|
|
**GPU часы**: ~64 часа NVIDIA A100 |
|
|
|
|
|
### Training Framework |
|
|
**Zariman was trained using MyLLM framework (by Attention Signs):** |
|
|
https://github.com/Raumberg/myllm |
|
|
|
|
|
### Model configuration (MyLLM Framework) |
|
|
```toml |
|
|
[model] |
|
|
model_name_or_path = "attn-signs/Watari-7b-v1" |
|
|
|
|
|
[datasets] |
|
|
dataset = "attn-signs/russian-reasoning" |
|
|
conversation_field = "conversation" |
|
|
generate_eval_examples = false |
|
|
evaluation_strategy = "steps" |
|
|
eval_steps = 300 |
|
|
dataloader_num_workers = 2 |
|
|
remove_unused_columns = true |
|
|
test_size = 0.01 |
|
|
|
|
|
[run] |
|
|
save_strategy = "steps" |
|
|
save_steps = 300 |
|
|
save_total_limit = 3 |
|
|
run_name = "sft-zariman-7" |
|
|
report_to = "wandb" |
|
|
logging_first_step = true |
|
|
logging_steps = 1 |
|
|
output_dir = "models/attn-signs-zariman-7" |
|
|
project_name = "sft-zariman" |
|
|
|
|
|
[training] |
|
|
train_only_on_completions = true |
|
|
per_device_train_batch_size = 1 |
|
|
per_device_eval_batch_size = 1 |
|
|
num_train_epochs = 1 |
|
|
learning_rate = 0.00004 |
|
|
gradient_accumulation_steps = 8 |
|
|
gradient_checkpointing = true |
|
|
warmup_steps = 10 |
|
|
bf16 = true |
|
|
seed = 42 |
|
|
use_peft = true |
|
|
attn_implementation = "flash_attention_2" |
|
|
|
|
|
[lora] |
|
|
lora_target_modules = [ |
|
|
"k_proj", |
|
|
"v_proj", |
|
|
"q_proj", |
|
|
"o_proj", |
|
|
"gate_proj", |
|
|
"up_proj", |
|
|
"down_proj", |
|
|
] |
|
|
lora_r = 128 |
|
|
lora_alpha = 256 |
|
|
|
|
|
[tokenizer] |
|
|
system_prompt = "Ты полезный ассистент. Отвечай на вопросы, сохраняя следующую структуру: <Thought> Твои мысли и рассуждения </Thought> <output> Твой конечный ответ </output>" |
|
|
assistant_message_template = "<|im_start|>assistant<|im_sep|>" |
|
|
pad_token = "<|endoftext|>" |
|
|
eos_token = "<|im_end|>" |
|
|
chat_template = "{% set loop_messages = messages %}{% for message in loop_messages %}{% set content = '<|im_start|>' + message['role'] + '<|im_sep|>'+ message['content'] | trim + '<|im_end|>' %}{{ content }}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant<|im_sep|>' }}{% endif %}" |
|
|
force_chat_template = true |
|
|
added_special_tokens = ["<|im_sep|>"] |
|
|
``` |
|
|
|
|
|
### Using the model / Как запустить? |
|
|
|
|
|
> [!IMPORTANT] |
|
|
> To invoke **Reasoning**, the specific prompt is used. Consider using the system prompt in the example below. |
|
|
> Для того, чтобы использовать режим рассуждений, модель использует специальный промпт. Пожалуйста, обратите внимание на системный промпт в примере ниже. |
|
|
|
|
|
```python |
|
|
from transformers import AutoTokenizer, AutoModelForCausalLM |
|
|
|
|
|
repo = 'attn-signs/Zariman-7b-v1' |
|
|
|
|
|
model = AutoModelForCausalLM.from_pretrained(repo) |
|
|
tokenizer = AutoTokenizer.from_pretrained(repo) |
|
|
|
|
|
model.to('cuda') |
|
|
|
|
|
prompt = 'Как мне обучить свою языковую модель?' |
|
|
messages = [ |
|
|
{"role": "system", "content": "Ты полезный ассистент. Отвечай на вопросы, сохраняя следующую структуру: <Thought> Твои мысли и рассуждения </Thought> <output> Твой конечный ответ </output>"}, |
|
|
{"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=4096 |
|
|
) |
|
|
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) |
|
|
``` |
|
|
|
|
|
``` |
|
|
<Thought> Обучение языковой модели - это сложный процесс, который требует понимания нескольких ключевых аспектов. |
|
|
Во-первых, необходимо выбрать подходящий алгоритм обучения, который может варьироваться от простых моделей, таких как n-граммные модели, |
|
|
до более сложных нейронных сетей, таких как трансформеры. Во-вторых, важно собрать достаточное количество данных для обучения модели. |
|
|
Это могут быть текстовые данные из книг, статей, новостей или других источников, которые должны быть репрезентативными для целевой области. |
|
|
В-третьих, нужно определиться с метриками качества, по которым будет оцениваться модель, такими как точность, полнота, F1-мера и другие. |
|
|
Наконец, необходимо учитывать вычислительные ресурсы, так как обучение больших моделей требует значительной мощности. |
|
|
Исходя из этих факторов, можно сформулировать шаги для обучения языковой модели. </Thought> <output> |
|
|
1. Выберите алгоритм обучения (например, трансформер). |
|
|
2. Соберите достаточное количество текстовых данных. |
|
|
3. Определите метрики качества для оценки модели. |
|
|
4. Настройте вычислительные ресурсы (например, GPU). |
|
|
5. Запустите процесс обучения модели. |
|
|
6. Оцените качество модели и при необходимости доработайте ее. </output> |
|
|
|
|
|
``` |