--- 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 = "Ты полезный ассистент. Отвечай на вопросы, сохраняя следующую структуру: Твои мысли и рассуждения Твой конечный ответ " 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": "Ты полезный ассистент. Отвечай на вопросы, сохраняя следующую структуру: Твои мысли и рассуждения Твой конечный ответ "}, {"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) ``` ``` Обучение языковой модели - это сложный процесс, который требует понимания нескольких ключевых аспектов. Во-первых, необходимо выбрать подходящий алгоритм обучения, который может варьироваться от простых моделей, таких как n-граммные модели, до более сложных нейронных сетей, таких как трансформеры. Во-вторых, важно собрать достаточное количество данных для обучения модели. Это могут быть текстовые данные из книг, статей, новостей или других источников, которые должны быть репрезентативными для целевой области. В-третьих, нужно определиться с метриками качества, по которым будет оцениваться модель, такими как точность, полнота, F1-мера и другие. Наконец, необходимо учитывать вычислительные ресурсы, так как обучение больших моделей требует значительной мощности. Исходя из этих факторов, можно сформулировать шаги для обучения языковой модели. 1. Выберите алгоритм обучения (например, трансформер). 2. Соберите достаточное количество текстовых данных. 3. Определите метрики качества для оценки модели. 4. Настройте вычислительные ресурсы (например, GPU). 5. Запустите процесс обучения модели. 6. Оцените качество модели и при необходимости доработайте ее. ```