Checkpoints are revisions
Every GRPO step is a git revision. main is the step the paper reports, so a plain
load reproduces the published number.
Table with columns: Revision| Revision | |
|---|
step10 | |
step20 | |
step30 | the checkpoint reported in the paper (= main) |
step40 | |
step50 | |
step60 | |
step70 | |
step80 | |
step90 | |
step100 | |
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-7B", torch_dtype="bfloat16")
tok = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-7B")
model = PeftModel.from_pretrained(base, "MichiganNLP/hacking-fairness-benchmarks-qwen2.5-7b-z251")
model = PeftModel.from_pretrained(base, "MichiganNLP/hacking-fairness-benchmarks-qwen2.5-7b-z251", revision="step100")
The model is prompted to answer in <think>...</think><answer>A</answer> format.
LoRA config: rank 32, alpha 32, on q,k,v,o,gate,up,down_proj.
Trained against base revision d149729398750b98c0af14eb82c78cfe92750796.
Citation
@inproceedings{deng2026one,
title = {One Example Is Enough to Pass Fairness Benchmarks:
Rethinking Fairness Evaluation for Aligned {LLM}s},
author = {Deng, Naihao and Arif, Samee and Chang, Shuaichen and
Chen, Yulong and Mihalcea, Rada},
booktitle = {Proceedings of the 2026 Conference on Empirical Methods in
Natural Language Processing},
year = {2026}
}