/ Модель

Характеристики

Контекст
131 072 токена
Параметры
8,2 млрд
Размер весов
16,3 ГБ
Лицензия
Apache 2.0
Архитектура
granite · dense
Базовая модель
granite-3.3-8b-instruct
Библиотека
transformers
Опубликована
7 янв 2026

granite-3.3-8b-math-prm-v2

Генерация текстаТекст → текст3 профессии

Англоязычная модель IBM для проверки правильности шагов математических рассуждений и оценки вариантов решений.

649скачиваний за 30 дней14лайковвеса обновлены7 янв 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Текст» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

Granite-3.3-8B-Math-PRM-v2 — плотная языковая модель на 8,2 млрд параметров, разработанная Granite Alignment Team и IBM Research на базе IBM Granite-3.3-8B-Instruct. Модель дообучена как генеративная модель оценки процесса рассуждений (PRM): для каждого шага решения она определяет, верна ли цепочка рассуждений на текущий момент, выдавая метку Y или N. Вероятность Y можно использовать как численную оценку вознаграждения при выборе лучшего решения из нескольких вариантов.

Основное назначение — проверка пошаговых решений математических задач, обнаружение ошибок в рассуждениях и ранжирование сгенерированных решений в схемах Best-of-N. В README также отмечены результаты применения при масштабировании вывода на задачах программирования. Модель настроена прежде всего на английский язык; базовая модель поддерживает также немецкий, испанский, французский, японский, португальский, арабский, чешский, итальянский, корейский, нидерландский и китайский. Контекст — до 131 072 токенов. Для оценки каждого шага к нему требуется добавить вопрос «Is this response correct so far (Y/N)?».

Модель показала сильные результаты в опубликованных оценках Math-500, ProcessBench и PRMBench, однако эти результаты не гарантируют точность на произвольных задачах или форматах рассуждений. Лицензия Apache 2.0; карточка сообщает, что для обучения использовались отобранные данные из источников с разрешительными лицензиями.

Сценарии применения

  • проверка каждого шага решения математической задачи
  • поиск ошибок в цепочке рассуждений
  • оценка и ранжирование нескольких сгенерированных решений
  • выбор лучшего ответа в сценарии Best-of-N
  • оценка пошаговых решений задач по программированию

Ограничения

Модель специально дообучена на английском языке, поэтому её оценкам для других поддерживаемых базовой моделью языков может недоставать надёжности. Для проверки шага требуется добавлять предусмотренный карточкой вопрос о корректности; сильные результаты на указанных бенчмарках не гарантируют точность для любых задач.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Granite-3.3-8B-Math-PRM-v2

Model Summary

Granite 3.3 8B Math PRM v2 is a finetuned version of the 8-billion parameter language model, Granite-3.3-8B-Instruct, built for use a generative process reward model (PRM) for process supervision in mathematical reasoning. Crucially, this model has only been trained on curated data from sources with permissive licenses, and we release this model under a Apache 2.0 license. This model displays state-of-the-art performance in a best-of-N set up for math tasks.

This model can be used to asses the correctness of each step of a mathematical reasoning process, and shows strong performance on Best-of-N evaluations for a variety of generators on Math-500, as well as strong error identification performance in both ProcessBench and PRMBench, with state-of-the-art performance in its size class. Although this model was trained for mathematical reasoning tasks, it also shows strong inference scaling performance on Code benchmarks, such as HunmanEval and LCBv5.

  • Developers: Granite Alignment Team, IBM Research
  • Release Date: Jan 1st, 2026
  • License: Apache 2.0

Supported Languages

This model has specifically been finetuned for English, however the base model supports English, German, Spanish, French, Japanese, Portuguese, Arabic, Czech, Italian, Korean, Dutch, and Chinese.

Intended Use

Granite 3.3 8B Math PRM v2 is finetuned version of Granite-3.3-8B-Instruct, which gives the language model the ability of process supervision on mathematical reasoning steps by assessing the correctness of each step of a reasoning chain. At inference, the model takes a question and a response which can be broken down into generated steps, and for each step it determines whether the reasoning chain so far is correct (indicated by generating a single token, Y) or incorrect (indicated by generating N). The probability of generating Y can be treated as a numeric reward score in applications such as Best-of-N evaluation.

Before obtaining a response, the model expects the user generated prompt "Is this response correct so far (Y/N)?", which should be added at the end of every step of the reasoning chain.

This model is an update to granite-3.3-8b-lora-math-prm.

Evaluation Results

a. Best-of-N Evaluation on Math-500

We show the performance of MATH-500 with inference scaling on generations from granite-4.0-h-small and granite-4.0-h-tiny, and show strong gains over Majority Voting with both Best-of-N and Weighted Majority Voting using Granite-3.3-8B-Math-PRM-v2.

We also compare the Best-of-N performance on Math-500 available PRMs on Qwen-2.5-Math-7B-Instruct generations, and show the superior performance of Granite-3.3-8B-Math-PRM-v2 over majority voting and best-of-N using similarly sized PRMs:

248163264128256
Majority Voting75.881.684.685.285.485.686.085.6
Granite-3.3-8B-Math-PRM-v281.684.686.688.088.289.289.089.6
Granite-3.3-8B-LoRA-Math-PRM81.684.284.886.286.887.288.087.2
Qwen2.5-Math-PRM-7B82.084.886.687.088.289.088.889.0
MathShepherd-Mistral-7B PRM 7B80.883.083.884.886.285.286.085.2
RLHFLow Llama3.1-8B-PRM-Deepseek-Data80.682.483.685.285.885.885.084.6

b. Best-of-N Evaluation on HumanEval and LCBv5

We show the performance on two code tasks, HumanEval (Python) and LCBv5 with inference scaling on generations from granite-4.0-h-small. While this model is finetuned on Math data, Granite-3.3-8B-Math-PRM-v2 demonstrates strong gains over Majority Voting with both Best-of-N and Weighted Majority Voting.

c. ProcessBench

As shown above, Granite-3.3-8B-Math-PRM-v2 shows strong performance (top-2) on both ProcessBench and PRMBench compared to other models of the same parameter class, indicating a strong ability at error detection for reasoning tasks.

d. PRMBench: Detailed Results

ModelOverallNR.NCL.Avg (simplicity)ES.SC.DC.CI.Avg (soundness)PS.DR.MS.Avg (sensitivity)
Granite-3.3-8B-Math-PRM-v265.152.263.457.869.765.864.470.867.761.067.198.275.4
Granite-3.3-8B-LoRA-Math-PRM64.550.961.556.269.166.764.770.567.859.965.998.174.7
Qwen2.5-Math-PRM-7B65.549.055.152.171.867.366.378.571.057.669.199.775.5
Skywork-PRM-7B65.156.462.859.669.467.167.769.968.560.965.893.273.7
Skywork-PRM-1.5B61.152.056.454.264.864.963.366.564.957.563.391.170.7
ReasonEval-34B60.554.848.151.566.460.357.867.563.057.764.397.273.1
ReasonEval-7B60.161.050.155.662.165.961.566.063.955.758.099.571.1
RLHFlow-PRM-Mistral-8B54.446.147.346.756.655.154.463.857.551.556.297.968.5
RLHFlow-PRM-Deepseek-8B54.246.448.947.655.755.053.266.257.549.055.499.868.1
MathShepherd-Mistral-7B47.044.050.347.149.444.541.347.745.747.248.686.160.7

Training Data The model is first finetuned on math and code data, such as OpenMathReasoning, OpenThoughts3, Codeforces, Code Contests, OpenCodeReasoning, PrimeIntellect, and TACO on the standard language modeling objective. Then, we conduct RLVR on NuminaMath, PrimeIntellect, TACO, OpenCodeInstruct and Skywork-OR1-RL Data. Finally, we train the model to predict the correctness of math problems, curating ttraining data from a diverse set of model responses to prompts from Math-specific datasets, specifically, MetaMathQA, MathInstruct and NuminaMath. We leverage a diverse set of LLMs from the Granite Language Model Family, Phi-4, and Mixtral 8x22B to generate outputs, and use the Automatic Process Supervision method as described in Luo et. al, 2024 for detecting steps with errors.

Usage

Sample use for obtaining PRM scores for a given response using Huggingface Transformers:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from typing import List

def prepare_input(query: str, steps: List[str], tokenizer: AutoTokenizer, correct_token: str, generation_prompt: str):
    messages = []
    
    for s_idx, step in enumerate(steps):
        if s_idx == 0:
            # append query and first step
            message = {'role': 'user', 'content':  query + " " + step + " " + generation_prompt}
        else:
            message = {'role': 'user', 'content':  step + " " + generation_prompt}
        
        messages.append(message)
        messages.append({'role': 'assistant', 'content': correct_token})
    
    input_message = tokenizer.apply_chat_template(messages, add_generation_prompt = False, tokenize = False)

    return input_message

def get_step_ids(input_ids, tokenizer, correct_token, correct_token_id):
    # get assistant turn indices
    asst_text = "<|start_of_role|>assistant<|end_of_role|>" + correct_token + "<|end_of_text|>"
    asst_toks = tokenizer(asst_text, add_special_tokens = False, return_tensors = "pt")['input_ids'][0]
    asst_toks_before_correct_token = asst_toks[:torch.where(asst_toks == correct_token_id)[0].item()].tolist()

    input_ids = input_ids[0]
    # find batch index for assistant turn "Y", not just the correct_token_id
    correct_token_indices = torch.where(input_ids == correct_token_id)[0].tolist()
    prm_indices = []
    for t_idx in correct_token_indices:
        if input_ids[t_idx - len(asst_toks_before_correct_token) :t_idx].tolist() == asst_toks_before_correct_token:
            prm_indices.append(t_idx-1) # the logits for token i predict the token i+1: so, we need to look at the PREVIOUS token logits
    
    assert len(prm_indices)>0
    return prm_indices

model_name_or_path = "ibm-granite/granite-3.3-8b-math-prm-v2"
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, device_map = "auto")
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)

correct_token = "Y"
correct_token_id = tokenizer.encode(correct_token, add_special_tokens=False)[0]
generation_prompt = "Is this response correct so far (Y/N)?"


data = {
   "query": "For breakfast, Anna bought a bagel for $x and a glass of orange juice for $0.85. At lunch, Anna spent $4.65 on a sandwich and $1.15 on a carton of milk. How much more money did Anna spend on lunch than on breakfast? If we know the answer to the above question is 4, what is the value of unknown variable x?",
   "response":[
        "At breakfast, Anna spent x dollars on a bagel and $0.85 on a glass of orange juice. The total cost of breakfast is x + $0.85.",
        "At lunch, Anna spent $4.65 on a sandwich and $1.15 on a carton of milk. The total cost of lunch is $4.65 + $1.15 = $5.80.",
        "To find out how much more money Anna spent on lunch than on breakfast, we subtract the cost of breakfast from the cost of lunch: $5.80 - (x + $0.85).",
        "We are given that the difference is $4, so we can write: $5.80 - (x + $0.85) = $4.",
        "Simplifying the left side, we get: $5.80 - x - $0.85 = $4.",
        "Adding -$0.85 to both sides, we get: $5.80 -x = $3.15.",
        "Subtracting $5.80 from both sides, we get: -x = -$2.65.",
        "Dividing both sides by -1, we get: x = $2.65."
   ]
}


formatted_data = prepare_input(query=data['query'], steps=data['response'], tokenizer=tokenizer, correct_token=correct_token, generation_prompt=generation_prompt)
input_ids = tokenizer.encode(formatted_data, return_tensors="pt").to(model.device)

with torch.no_grad():
    logits = model(input_ids=input_ids).logits

# get step positions
prm_indices = get_step_ids(input_ids, tokenizer, correct_token, correct_token_id)

#  get corresponding rewards: convert logits to probabilities and get the probability of the correct token id as reward
softmax = torch.nn.Softmax(dim=-1)
step_rewards = []
for prm_idx in prm_indices:
    step_rewards.append(softmax(logits[0, prm_idx, :])[correct_token_id].item())

print(step_rewards)
# # [1.0, 1.0, 1.0, 0.99609375,0.9921875, 0.0849609375, 0.408203125, 0.8515625]

For use of the PRM as a verbalizer of correctness for a specific step:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer


model_name_or_path = "ibm-granite/granite-3.3-8b-math-prm-v2"
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, device_map = "auto")
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
generation_prompt = "Is this response correct so far (Y/N)?"


data = {
   "query": "For breakfast, Anna bought a bagel for $x and a glass of orange juice for $0.85. At lunch, Anna spent $4.65 on a sandwich and $1.15 on a carton of milk. How much more money did Anna spend on lunch than on breakfast? If we know the answer to the above question is 4, what is the value of unknown variable x?",
   "partial_response":
        "At breakfast, Anna spent x dollars on a bagel and $0.85 on a glass of orange juice. The total cost of breakfast is x + $0.85. At lunch, Anna spent $4.65 on a sandwich and $1.15 on a carton of milk. The total cost of lunch is $4.65 + $1.15 = $5.80. To find out how much more money Anna spent on lunch than on breakfast, we subtract the cost of breakfast from the cost of lunch: $5.80 - (x + $0.85).",
}

# format the prompts
formatted_prompt = tokenizer.apply_chat_template([{'role':'user', 'content': data['query'] + " " + data['partial_response'] + " " + generation_prompt}], add_generation_prompt=True, tokenize=False)
inputs = tokenizer(formatted_prompt, return_tensors="pt")

# generate output
with torch.no_grad():
    response = model.generate(inputs["input_ids"].to(model.device), attention_mask=inputs["attention_mask"].to(model.device), max_new_tokens=2)

output_text = tokenizer.decode(response[0])
print(output_text)
# # <|start_of_role|>assistant<|end_of_role|>Y<|end_of_text|>

Infrastructure

We train Granite-3.3-8B-Math-PRM-v2 using IBM's super computing cluster, Blue Vela, which is outfitted with NVIDIA H100 GPUs. This cluster provides a scalable and efficient infrastructure for training our models over multiple GPUs.

Ethical Considerations and Limitations

Granite-3.3-8B-Math-PRM-v2 is finetuned from Granite-3.3-8B-Instruct. Since it inherits its foundation from the instruct model, all ethical considerations and limitations applicable to Granite-3.3-8B-Instruct remain relevant.

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · transformers

Можно запустить

Подбираем GPU…

Класс архитектуры
GraniteForCausalLM
Ревизия весов
301abdd

0 моделей