--- license: mit datasets: - Egor-AI/Russian_thinking_dataset language: - ru - en base_model: - ai-sage/GigaChat-20B-A3B-instruct-bf16 pipeline_tag: text-generation library_name: peft tags: - o1 - thinking - reflection --- # Russian o1 / GigaChat 20B-A3B Instruct LoRA-адаптер для модели [GigaChat-20B-A3B](https://huggingface.co/ai-sage/GigaChat-20B-A3B-instruct-bf16) обученный на датасете [Egor-AI/Russian_thinking_dataset](https://huggingface.co/datasets/Egor-AI/Russian_thinking_dataset) (машинный перевод на русский язык датасета [BintangFortuna/OpenO1-SFT-EN-SY](https://huggingface.co/datasets/BintangFortuna/OpenO1-SFT-EN-SY)). Обученная модель способна имитировать логические размышлению на русском языке по аналогии с тем, как это делает `o1` от `OpenAI`. Необходимо использовать следующего вида системный промт: ``` Вы — ИИ-помощник. Отформатируйте свои ответы следующим образом: Ваши мысли (понимание, рассуждения) Ваш ответ ``` W&B отчёт: https://api.wandb.ai/links/evilfreelancer/nlec8bt8 Обучение производилось при помощи утилиты [impruver](https://github.com/EvilFreelancer/impruver) используя конфигурацию [GigaChat/20B-A3B_lora_o1](https://github.com/EvilFreelancer/impruver/blob/main/recipes/configs/GigaChat/20B-A3B_lora_o1.yaml). На всё про всё ушло примерно 117 часов на RTX 4090, при этом понадобилось 23Гб видеопамяти. ```yaml output_dir: ./models/GigaChat_20B-A3B_lora_thinking train_path: ./train.GigaChat_20B-A3B_lora_thinking.jsonl val_path: ./val.GigaChat_20B-A3B_lora_thinking.jsonl datasets: - name: Egor-AI/Russian_thinking_dataset converter: impruver.instruction_to_messages mapping: system: system instruction: prompt output: response model: class: custom.gigachat.DeepseekForCausalLM name: ai-sage/GigaChat-20B-A3B-instruct-bf16 attn_implementation: flash_attention_2 load_in_4bit: true load_in_8bit: false dtype: bf16 lora: r: 8 lora_alpha: 32 lora_dropout: 0.1 bias: none target_modules: [ q_proj, v_proj, k_proj, o_proj, gate_proj, down_proj, up_proj ] task_type: CAUSAL_LM tokenizer: class: transformers.AutoTokenizer name: ai-sage/GigaChat-20B-A3B-instruct max_tokens_count: 1500 special_tokens: pad_token_id: 1 pad_token: bos_token_id: 1 bos_token: eos_token_id: 128001 eos_token: <|message_sep|> chat_template: > {% if messages[0]['role'] == 'system' -%} {%- set loop_messages = messages[1:] -%} {%- set system_message = bos_token + messages[0]['content'] + additional_special_tokens[1] -%} {%- else -%} {%- set loop_messages = messages -%} {%- set system_message = bos_token + '' -%} {%- endif -%} {%- for message in messages %} {%- if message['role'] == 'system' -%} {{ system_message -}} {%- endif -%} {%- if message['role'] == 'user' -%} {{ message['role'] + additional_special_tokens[0] + message['content'] + additional_special_tokens[1] -}} {{ 'available functions' + additional_special_tokens[0] + additional_special_tokens[2] + additional_special_tokens[3] + additional_special_tokens[1] -}} {%- endif -%} {%- if message['role'] == 'assistant' -%} {{ message['role'] + additional_special_tokens[0] + message['content'] + additional_special_tokens[1] -}} {%- endif -%} {%- if loop.last and add_generation_prompt -%} {{ 'assistant' + additional_special_tokens[0] -}} {%- endif -%} {%- endfor %} trainer: eval_strategy: steps save_strategy: steps eval_steps: 100 save_steps: 100 per_device_train_batch_size: 1 per_device_eval_batch_size: 1 gradient_accumulation_steps: 8 logging_steps: 1 learning_rate: 0.0004 num_train_epochs: 2 lr_scheduler_type: cosine warmup_steps: 16 optim: adamw_torch_4bit metric_for_best_model: eval_loss load_best_model_at_end: true save_total_limit: 2 seed: 42 remove_unused_columns: false max_grad_norm: 1.0 weight_decay: 0.08 torch_compile: false ```