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 за отличную базовую модель.