hiyouga/EasyR1

SFT+GRPO推理性能与训练过程中val精度不一致

オープン

#327 opened on 2025/06/04

 (11 件のコメント) (0 件のリアクション) (0 人の担当者)Python (385 件のフォーク)github user discovery
help wanted

Repository metrics

Stars
 (5,126 個のスター)
PR merge metrics
 (平均マージ 12h 49m) (30d で 2 merged PRs)

説明

使用纯GRPO进行训练,val中的acc和模型merge以后推理acc基本相同。 使用SFT后的ckp再进行GRPO,val中的acc很高,但训练后merge再推理,发现有严重的复读现象,且acc相差很大。

推理代码如下:

from transformers import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor from qwen_vl_utils import process_vision_info import re import pandas as pd import base64 from tqdm import tqdm

df = pd.read_parquet('val.parquet') model_dir="SFT_GRPO/global90" model = Qwen2_5_VLForConditionalGeneration.from_pretrained( model_dir, torch_dtype="auto", device_map="auto") processor = AutoProcessor.from_pretrained(model_dir) results = [] for inx in tqdm(range(len(df))): img_bytes = (df.iloc[inx].images)[0]['bytes'] img_base64 = base64.b64encode(img_bytes).decode('utf-8') data_url = f"data:image/png;base64,{img_base64}" messages = [
{ "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": [ { "type": "image", "image": data_url, }, {"type": "text", "text": "my prompt"}, ], } ]

text = processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True ) image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(
text=[text], images=image_inputs, videos=video_inputs, padding=True, return_tensors="pt", ) inputs = inputs.to("cuda")
generated_ids = model.generate(**inputs, max_new_tokens=1024) generated_ids_trimmed = [
out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids) ] output_text = processor.batch_decode( generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False ) match = re.search(r'\boxed{([^}]+)}', output_text[0]) pred = match.group(1) if match else "ERROR" actual = df.iloc[inx].answer results.append(f"Predicted: {pred}, Actual: {actual}\n") print((f"index: {inx} Predicted: {pred}, Actual: {actual}\n"), flush=True)

コントリビューターガイド