Zariman 7B Reason (V1)

  • [EN]
    Reasoning model adapted for russian text generation.
    Based on Watari-7B-v1 -> Zariman-R-7B-v0
  • [RU]
    Модель рассуждений, адаптированная для генерации русскоязычного текста.
    Построена на Watari-7B-v1 -> Zariman-R-7B-v0

Model Details / Детализация модели

  • [EN]
    Reinforced GRPO version 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 of various tasks.
  • [RU]
    Версия обучения с подкреплением (GRPO) для возможностей размышления и глубокого понимания запроса на конкретный системный промпт. Может быть нестабильна (особенно при больших контекстных окнах), может входить в бесконечные циклы рассуждений. Модель создана для решения задач и глубоких размышлений

Model Description / Описание модели

  • Developed by: [Reisen Raumberg (Attention Signs team)]
  • Language(s) (NLP): [RU/EN]
  • Reinforced from model: [Zariman-R-7b-v0]

Utilized HF.Accelerator
GPU hours: ~34h of NVIDIA A100

Для обучения использовался HuggingFace Accelerator
GPU часы: ~34 часа NVIDIA A100

Training Framework

Zariman was trained using MyLLM framework (by Attention Signs):
--==MyLLM==--
(GRPO scripts are now stable, dev branch merged)

Model configuration (MyLLM Framework)

[model]
model_name_or_path = "attn-signs/Zariman-R-7b-v0"

[datasets]
dataset = "d0rj/gsm8k-ru"
problem_field = "question"
solution_field = "answer"
dataloader_num_workers = 2
test_size = 0.1
extract_hash = true

[run]
run_name = "rl-zariman-7"
report_to = "wandb"
logging_first_step = true
logging_steps = 1
save_strategy = "steps"
save_steps = 100
save_total_limit = 5
output_dir = "models/attn-signs-zariman-7"
project_name = "rl-zariman"

[training]
num_train_epochs = 1
per_device_train_batch_size = 4
learning_rate = 0.00005
bf16 = true
seed = 42
use_peft = true

[grpo]
# use_vllm = true
# vllm_gpu_memory_utilization = 0.25
num_generations = 4
max_completion_length = 1024
num_iterations = 4          # https://github.com/huggingface/trl/releases/tag/v0.16.0
scale_rewards = false
beta = 0.0                  # do not load reference model, do not minimize KL-div. Great memory saving opportunity.
epsilon_high = 0.28         # Increasing upper bound epsilon leads to higher entropy during generation, promoting better exploration

[lora]
lora_target_modules = [
    "k_proj",
    "v_proj",
    "q_proj",
    "o_proj",
    "gate_proj",
    "up_proj",
    "down_proj",
]
lora_r = 32
lora_alpha = 64

[fusion]
use_liger = true

[tokenizer]
system_prompt = "Ты Зариман, полезный ИИ-ассистент. Ты ведёшь диалог с пользователем и стараешься решить его задачу, рассуждая о каждом шаге. Чтобы помочь себе, ты можешь писать диаграммы. Диаграммы могут выглядеть произвольным образом, например: <diagram> Постановка задачи в LaTeX -> Решение -> Проверка -> Окончательный ответ </diagram>. Отвечай, сохраняя следующую структуру: <thought> твои мысли и рассуждения <diagram> твои диаграммы или то, что может помочь решить задачу </diagram> </thought> <answer> твой конечный ответ </answer>"
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 / Как запустить?

To invoke Reasoning, the specific prompt is used. Consider using the system prompt in the example below. Для того, чтобы использовать режим рассуждений, модель использует специальный промпт. Пожалуйста, обратите внимание на системный промпт в примере ниже.

repo = 'attn-signs/Zariman-R-7b-v1'

model = AutoModelForCausalLM.from_pretrained(repo)
tokenizer = AutoTokenizer.from_pretrained(repo)

device = 'cuda' if torch.cuda.is_available() else 'cpu'
model.to(device)

user_prompt = '''
У уравнений x**2 + 2019ax + b = 0 и x**2 + 2019bx + a = 0 есть один общий корень. Чему может быть равен этот корень, если известно, что a != b?
'''
system_prompt = "Ты Зариман, полезный ИИ-ассистент. Ты ведёшь диалог с пользователем и стараешься решить его задачу, рассуждая о каждом шаге. Чтобы помочь себе, ты можешь писать диаграммы. Диаграммы могут выглядеть произвольным образом, например: <diagram> Постановка задачи в LaTeX -> Решение -> Проверка -> Окончательный ответ </diagram>. Отвечай, сохраняя следующую структуру: <thought> твои мысли и рассуждения <diagram> твои диаграммы или то, что может помочь решить задачу </diagram> </thought> <answer> твой конечный ответ </answer>"
messages = [
    {"role": "system", "content": system_prompt},
    {"role": "user", "content": user_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>
Пусть x является общим корнем обоих уравнений.
Тогда x удовлетворяет обоим уравнениям, поэтому: x^2 + 2019a*x + b = 0 и x^2 + 2019b*x + a = 0.
Вычитая второе уравнение из первого, получаем: (x^2 + 2019a*x + b) - (x^2 + 2019b*x + a) = 0,
что упрощается до (2019a - 2019b)*x + (b - a) = 0. Учитывая, что a != b, коэффициент при x не равен нулю,
и мы можем разделить обе части на (2019a - 2019b), чтобы найти x: x = (a - b)/(2019a - 2019b).
Упрощая это выражение, получаем x = 1/2019.
</thought>
<answer> 1/2019 </answer> # real answer

Another interesting answer for mathematical task (the model used brute force):

<thought>
Допустим, \( p + 25 = q^7 \), где \( q \) — простое число.
Так как \( q \) — простое, то \( q \) может принимать значения
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
61, 67, 71, 73, 79, 83, 89, 97, \dots \).
Тогда \( p \) будет \( q^7 - 25 \).
Мы можем вычислить значения для маленьких значений \( q \):
если \( q = 2 \), то \( p = 2^7 - 25 = 128 - 25 = 103 \), что является простым.
Если \( q = 3 \), то \( p = 3^7 - 25 = 2187 - 25 = 2162 \), что не является простым.
Если \( q = 5 \), то \( p = 5^7 - 25 = 78125 - 25 = 78100 \), что не является простым.
Если \( q = 7 \), то \( p = 7^7 - 25 = 823543 - 25 = 823518 \), что не является простым.
 Если \( q = 11 \), то \( p = 11^7 - 25 = 1977326743 - 25 = 1977326718 \), что не является простым.
Если \( q = 13 \), то \( p = 13^7 - 25 = 283982496913 - 25 = 283982496898 \), что не является простым.
Если \( q = 17 \), то \( p = 17^7 - 25 = 241985796879377 - 25 = 241985796879352 \), что не является простым.
Если \( q = 19 \), то \( p = 19^7 - 25 = 17921601234819001 - 25 = 17921601234818976 \), что не является простым.
Если \( q = 23 \), то \( p = 23^7 - 25 = 31195827261968693843 - 25 = 31195827261968693818 \), что не является простым.
Если \( q = 29 \), то \( p = 29^7 - 25 = 172498763096596639029 - 25 = 172498763096596638999 \), что не является простым.
Если \( q = 31 \), то \( p = 31^7 - 25 = 2555986304490614120451 - 25 = 2555986304490614119999 \), что не является простым.
Если \( q = 37 \), то \( p = 37^7 - 25 = 207595713368696296252843 - 25 = 207595713368696296252818 \), что не является простым.
Если \( q = 41 \), то \( p = 41^7 - 25 = 21435888364136139953749 - 25 = 21435888364136139953724 \), что не является простым.
Если \( q = 43 \), то \( p = 43^7 - 25 = 238437797905281614641107 - 25 = 238437797905281614641082 \), что не является простым.
Если \( q = 47 \), то \( p = 47^7 - 25 = 23900545565555220610319 - 25 = 23900545565555220610294 \), что не является простым.
Если \( q = 53 \), то \( p = 53^7 - 25 = 28979783356188772415695 - 25 = 28979783356188772415670 \), что не является простым.
Если \( q = 59 \), то \( p = 59^7 - 25 = 24856338334343939013565 - 25 = 24856338334343939013540 \), что не является простым.
Если \( q = 61 \), то \( p = 61^7 - 25 = 2296928999603225975974377 - 25 = 229692899960322597597412 \), что не является простым.
Если \( q = 67 \), то \( p = 67^7 - 25 = 20974559751103254416877 - 25 = 20974559751103254416852 \), что не является простым.
Если \( q = 71 \), то \( p = 71^7 - 25 = 30613666817478553328142 - 25 = 30613666817478553328117 \), что не является простым.
Если \( q = 73 \), то \( p = 73^7 - 25 = 313722378383673202839681 - 25 = 313722378383673202839656 \), что не является простым.
Если \( q = 79 \), то \( p = 79^7 - 25 = 215295631866572589232641 - 25 = 215295631866572589232616 \), что не является простым.
Если \( q = 83 \), то \( p = 83^7 - 25 = 285316874646988736086111 - 25 = 285316874646988736086086 \), что не является простым.
Если \( q = 89 \), то \( p = 89^7 - 25 = 593995322254419739684961 - 25 = 593995322254419739684936 \), что не является простым.
Если \( q = 97 \), то \( p = 97^7 - 25 = 899229957796953459631497 - 25 = 899229957796953459631472 \), что не является простым.
Таким образом, единственное простое значение \( p \) — это 103.
</thought>
<answer> 103 </answer> # real answer
Downloads last month
7
Safetensors
Model size
7.61B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for attn-signs/Zariman-R-7b-v1

Finetuned
(1)
this model
Quantizations
2 models

Dataset used to train attn-signs/Zariman-R-7b-v1

Collection including attn-signs/Zariman-R-7b-v1