Qwen3-1.7B Fine-tuned for Reasoning (LoRA)

Краткое описание

Эта модель является дообученной (fine-tuned) версией Qwen/Qwen3-1.7B, адаптированной для выполнения сложных логических и математических задач с использованием адаптивного рассуждения (Adaptive Reasoning), включая Program-of-Thought (PoT). Дообучение проводилось с использованием методики LoRA (Low-Rank Adaptation).

Модель предназначена для задач, где требуется:

  • Пошаговое рассуждение (Chain-of-Thought).
  • Рассуждения с декомпозицией и пропуском шагов с помощью подхода Skip-Thinking
  • Логические задачи
  • Точные математические расчеты.
  • Использование внешних инструментов (например, Python-интерпретатора) для верификации или выполнения сложных операций.

Использование (Inference)

Для использования этой модели вам понадобятся библиотеки transformers и peft. Предполагается, что адаптеры LoRA для этой модели уже загружены в этот репозиторий.

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
import logging

# Настройка логирования
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

# --- Загрузка модели и токенайзера ---
base_model_name = "Qwen/Qwen3-1.7B"
# Путь к адаптерам LoRA на Hugging Face Hub (этот же репозиторий)
lora_adapters_path = "Siesher/qwen3-1.7b-reasoning-lora"

tokenizer = AutoTokenizer.from_pretrained(base_model_name, trust_remote_code=True)
if tokenizer.pad_token is None:
    tokenizer.pad_token = tokenizer.eos_token
    tokenizer.padding_side = "right"

base_model = AutoModelForCausalLM.from_pretrained(
    base_model_name,
    device_map="auto",
    torch_dtype=torch.bfloat16, # Используем bfloat16 для инференса
    trust_remote_code=True
)
# Загружаем адаптеры LoRA из указанного репозитория
model = PeftModel.from_pretrained(base_model, lora_adapters_path)
model.eval()

logger.info("Модель и токенайзер загружены.")

# --- Пример простого инференса ---
test_question = "Какое число является следующим в последовательности 1, 1, 2, 3, 5, 8, 13?"
messages = [{"role": "user", "content": test_question}]

prompt_text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)
inputs = tokenizer(prompt_text, return_tensors="pt").to(model.device)

logger.info(f"\nВопрос: {test_question}")
logger.info("Генерация ответа...")

with torch.no_grad():
    output_tokens = model.generate(
        **inputs,
        max_new_tokens=100, # Уменьшено для краткости примера
        do_sample=True,
        temperature=0.7,
        top_p=0.9,
        repetition_penalty=1.1,
        eos_token_id=tokenizer.eos_token_id,
        pad_token_id=tokenizer.pad_token_id
    )

generated_text = tokenizer.decode(output_tokens[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
logger.info(f"Сгенерированный ответ:\n{generated_text}")

# Для полной реализации PoT с выполнением кода, как описано в вашем обучении,
# вам потребуется интегрировать функции `execute_python_code` и `run_inference_with_code_execution`
# из вашего скрипта дообучения.

Обучение модели (Training)

Модель была дообучена с использованием следующей конфигурации LoRA:

  • Базовая модель: Qwen/Qwen3-1.7B
  • Тип дообучения: LoRA (Low-Rank Adaptation)
  • Параметры LoRA:
    • r: 32
    • lora_alpha: 64
    • lora_dropout: 0.05
    • Целевые модули: [q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj] (q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj)
  • Гиперпараметры обучения:
    • Learning Rate: 2e-05
    • Per Device Train Batch Size: 1
    • Gradient Accumulation Steps: 8
    • Эффективный размер батча: 8
    • Количество эпох: 1
    • Максимальная длина последовательности (MAX_SEQ_LEN): 1024 токенов
    • Оптимизатор: adamw_torch_8bit
    • Тип точности: bfloat16 (для совместимых GPU, таких как NVIDIA T4, A100)

Датасет

Модель была дообучена на кастомном датасете Siesher/Adaptive_Skip_thinking_Reasoning, который содержит диалоги, предназначенные для развития навыков рассуждения и использования инструментов. Структура датасета соответствует формату диалогов Qwen. Данный датасет можно найти по следующей ссылке: https://huggingface.co/datasets/Siesher/Adaptive_Skip_thinking_Reasoning

Ограничения и смещения

  • Модель унаследует потенциальные смещения и ограничения от базовой модели Qwen3-1.7B, а также от данных, на которых она была дообучена.
  • Для полной реализации Program-of-Thought с выполнением кода, как это было в процессе обучения, потребуется дополнительная логика для парсинга и безопасного выполнения кода. Функция выполнения кода (execute_python_code) в текущей реализации не является безопасной песочницей и не рекомендуется для выполнения произвольного кода из ненадежных источников в производственной среде.

Ссылки

Ссылка на github с полным кодом дообучения модели и смежной с ней: https://github.com/Siesher/Qwen3_LoRA_pet Смежную модель же можно найти по этой ссылке: https://huggingface.co/Siesher/qwen3-1.7b-reasoning-lora_LoRA

Благодарности

Эта модель была дообучена в рамках исследования по адаптивному рассуждению в малых языковых моделях. Выражаем благодарность Hugging Face за платформу и библиотеки transformers, peft, datasets, а также разработчикам Qwen за отличную базовую модель.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Dataset used to train Siesher/qwen3-1.7b-reasoning-lora