From d7e664b6ec329288f7ca49d809f5053155c7eda7 Mon Sep 17 00:00:00 2001 From: Wei Xiong Date: Thu, 9 May 2024 19:19:45 +0800 Subject: [PATCH 1/9] Create pairpm.py I created a PairPMPipeline class to use the pair preference model. I also presented an example to use the preference model. --- rewardbench/models/pairpm.py | 208 +++++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 rewardbench/models/pairpm.py diff --git a/rewardbench/models/pairpm.py b/rewardbench/models/pairpm.py new file mode 100644 index 00000000..9379ee6b --- /dev/null +++ b/rewardbench/models/pairpm.py @@ -0,0 +1,208 @@ +from dataclasses import dataclass, field +from typing import Optional +import torch +from datasets import load_dataset +from tqdm import tqdm +from transformers import AutoTokenizer, HfArgumentParser, pipeline, AutoModelForCausalLM +import numpy as np +import pandas as pd +from typing import List, Optional, Tuple, Union + + +class PairPMPipeline: + + def __init__(self, model_path): + self.model = AutoModelForCausalLM.from_pretrained(model_path,).cuda() #, attn_implementation="flash_attention_2", torch_dtype=torch.bfloat16 + self.model.eval() + + self.tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=True) + self.tokenizer_data_format = AutoTokenizer.from_pretrained(model_path, use_fast=True) + self.tokenizer_data_format.chat_template = "\n{% for message in messages %}{% if loop.index0 % 2 == 0 %}\n\n user\n {{ message['content'] }}{% else %}\n\n assistant\n {{ message['content'] }}{% endif %}{% endfor %}\n\n\n" + + self.prompt_template = "[CONTEXT] {context} [RESPONSE A] {response_A} [RESPONSE B] {response_B} \n" + token_id_A = self.tokenizer.encode("A", add_special_tokens=False) + token_id_B = self.tokenizer.encode("B", add_special_tokens=False) + assert len(token_id_A) == 1 and len(token_id_B) == 1 + self.token_id_A = token_id_A[0] + self.token_id_B = token_id_B[0] + self.temperature = 1.0 + + def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: List[str]): + ''' + Input: + prompts: [prompt1, prompt2, ..., promptn] + candidates_A: [responseA1, responses A2, ..., responseAn] + candidates_B: [responseB1, responses B2, ..., responseBn] + Output: + probs_choose_A: [P(responseA1 > responseB1 | prompt1), ...., P(responseAn > responseBn | promptn)] + ''' + assert len(prompts) == len(candidates_A) + assert len(candidates_A) == len(candidates_B) + probs_choose_A = [] + for i in range(len(prompts)): + instruction = [{"role": "user", "content": prompts[i]}] + context = self.tokenizer_data_format.apply_chat_template(instruction, tokenize=False) + responses = [candidates_A[i], candidates_B[i]] + + probs_chosen = [] + + for chosen_position in [0, 1]: + # we swap order to mitigate position bias + response_A = responses[chosen_position] + response_B = responses[1 - chosen_position] + prompt = self.prompt_template.format(context=context, response_A=response_A, response_B=response_B) + message = [ + {"role": "user", "content": prompt}, + ] + + input_ids = self.tokenizer.encode(self.tokenizer.apply_chat_template(message, tokenize=False).replace(self.tokenizer.bos_token, ""), return_tensors='pt', add_special_tokens=False).cuda() + + with torch.no_grad(): + output = self.model(input_ids) + logit_A = output.logits[0, -1, self.token_id_A].item() + logit_B = output.logits[0, -1, self.token_id_B].item() + # take softmax to get the probability; using numpy + Z = np.exp(logit_A / self.temperature) + np.exp(logit_B / self.temperature) + logit_chosen = [logit_A, logit_B][chosen_position] + prob_chosen = np.exp(logit_chosen / self.temperature) / Z + probs_chosen.append(prob_chosen) + probs_choose_A.append(np.mean(probs_chosen)) + # probs_chose_B = 1 - probs_choose_A + return probs_choose_A + + +#### An example to use the pair-preference model. + + +tqdm.pandas() +ds_dir = "allenai/reward-bench" +ds = load_dataset(ds_dir, split='filtered', keep_in_memory=True) +df = pd.DataFrame(columns=['id', 'subset', 'correct']) +pair_pm = PairPMPipeline("RLHFlow/pair-preference-model-LLaMA3-8B") + +for i, example in enumerate(tqdm(ds)): + prompt = example['prompt'] + response_chosen = example["chosen"] + response_rejected = example["rejected"] + + avg_prob_chosen = pair_pm([prompt], [response_chosen], [response_rejected]) + correct = 0.5 if avg_prob_chosen[0] == 0.5 else float(avg_prob_chosen[0] > 0.5) + + row = {'id': example['id'], 'subset': example['subset']} + row['correct'] = correct + df = df._append(row, ignore_index=True) + +categories = { + "chat": ["alpacaeval-easy", 'alpacaeval-length', 'alpacaeval-hard', 'mt-bench-easy', 'mt-bench-med'], + "chat-hard": ['mt-bench-hard', 'llmbar-natural', 'llmbar-adver-neighbor', 'llmbar-adver-GPTInst', + 'llmbar-adver-GPTOut', 'llmbar-adver-manual'], + "safety": ['refusals-dangerous', 'refusals-offensive', 'xstest-should-refuse', 'xstest-should-respond', + 'donotanswer'], + "reasoning": ['math-prm', 'hep-cpp', 'hep-go', 'hep-java', 'hep-js', 'hep-python', 'hep-rust'], +} + +df_acc = pd.DataFrame(columns=['category', 'subset', 'accuracy']) +for category, subsets in categories.items(): + for subset in subsets: + df_subset = df[df['subset'] == subset] + accs = [] + acc = df_subset['correct'].values.mean() + accs.append(acc) + row = {'category': category, 'subset': subset, 'n': len(df_subset), 'accuracy': accs} + df_acc = pd.concat([df_acc, pd.DataFrame(row)], ignore_index=True) +print(df_acc) + +EXAMPLE_COUNTS = { + "alpacaeval-easy": 100, + "alpacaeval-length": 95, + "alpacaeval-hard": 95, + "mt-bench-easy": 28, + "mt-bench-med": 40, + "mt-bench-hard": 37, + "math-prm": 984, # actual length 447, upweighting to be equal to code + "refusals-dangerous": 100, + "refusals-offensive": 100, + "llmbar-natural": 100, + "llmbar-adver-neighbor": 134, + "llmbar-adver-GPTInst": 92, + "llmbar-adver-GPTOut": 47, + "llmbar-adver-manual": 46, + "xstest-should-refuse": 250, + "xstest-should-respond": 154, + "donotanswer": 136, + "hep-cpp": 164, + "hep-go": 164, + "hep-java": 164, + "hep-js": 164, + "hep-python": 164, + "hep-rust": 164, +} + +SUBSET_MAPPING = { + "Chat": [ + "alpacaeval-easy", + "alpacaeval-length", + "alpacaeval-hard", + "mt-bench-easy", + "mt-bench-med", + ], + "Chat Hard": [ + "mt-bench-hard", + "llmbar-natural", + "llmbar-adver-neighbor", + "llmbar-adver-GPTInst", + "llmbar-adver-GPTOut", + "llmbar-adver-manual", + ], + "Safety": [ + "refusals-dangerous", + "refusals-offensive", + "xstest-should-refuse", + "xstest-should-respond", + "donotanswer", + ], + "Reasoning": [ + "math-prm", + "hep-cpp", + "hep-go", + "hep-java", + "hep-js", + "hep-python", + "hep-rust", + ], +} + + +def calculate_scores_per_section(example_counts, subset_mapping, metrics): + section_scores = {} + for section, tests in subset_mapping.items(): + total_weighted_score = 0 + total_examples = 0 + for test in tests: + if test in metrics: + total_weighted_score += metrics[test] * example_counts[test] + total_examples += example_counts[test] + if total_examples > 0: + section_scores[section] = round(100 * total_weighted_score / total_examples, 2) + else: + section_scores[section] = 0 + return section_scores + + +all_subsets = df['subset'].unique() +df_final = pd.DataFrame(columns=['attribute', 'Chat', 'Chat Hard', 'Safety', 'Reasoning']) + +attribute = 'correct' +metrics = {} +for subset in all_subsets: + df_subset = df_acc.loc[df_acc['subset'] == subset] + acc = df_subset['accuracy'].values[0] + metrics[subset] = acc + +# Calculate and print the scores per section +scores_per_section = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, metrics) +row = {'attribute': attribute, **scores_per_section} +df_final = df_final._append(row, ignore_index=True) + +for col in ['Chat', 'Chat Hard', 'Safety', 'Reasoning']: + print(f"{col}: {df_final[col].values[0]}") From a374ec10f7ca350f2f62724c9dcaeb497af202a2 Mon Sep 17 00:00:00 2001 From: Wei Xiong Date: Thu, 9 May 2024 19:25:14 +0800 Subject: [PATCH 2/9] add pairpm pipeline --- rewardbench/models/__init__.py | 8 ++++++++ rewardbench/models/pairpm.py | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/rewardbench/models/__init__.py b/rewardbench/models/__init__.py index acbfcd2d..b1a7801f 100644 --- a/rewardbench/models/__init__.py +++ b/rewardbench/models/__init__.py @@ -35,6 +35,7 @@ build_starling_rm, ) from .ziya import ZiyaPipeline +from .pair_pm import PairPMPipeline # Please open a PR if you need to add more custom modeling code / utilize existing code for you model REWARD_MODEL_CONFIG = { @@ -122,6 +123,13 @@ "custom_dialogue": False, "model_type": "Seq. Classifier", }, + "RLHFlow/pair-preference-model-LLaMA3-8B": { + "model_builder": AutoModelForCausalLM.from_pretrained(model_path,), + "pipeline_builder": PairPMPipeline, + "quantized": True, + "custom_dialogue": True, + "model_type": "Custom Classifier", + }, } DPO_MODEL_CONFIG = { diff --git a/rewardbench/models/pairpm.py b/rewardbench/models/pairpm.py index 9379ee6b..d5caf935 100644 --- a/rewardbench/models/pairpm.py +++ b/rewardbench/models/pairpm.py @@ -71,9 +71,8 @@ def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: Li return probs_choose_A +''' #### An example to use the pair-preference model. - - tqdm.pandas() ds_dir = "allenai/reward-bench" ds = load_dataset(ds_dir, split='filtered', keep_in_memory=True) @@ -206,3 +205,4 @@ def calculate_scores_per_section(example_counts, subset_mapping, metrics): for col in ['Chat', 'Chat Hard', 'Safety', 'Reasoning']: print(f"{col}: {df_final[col].values[0]}") +''' \ No newline at end of file From f727b8c0a303e3382b3323a2142d17683548ab35 Mon Sep 17 00:00:00 2001 From: Wei Xiong Date: Fri, 10 May 2024 10:59:59 +0800 Subject: [PATCH 3/9] change the name to slicpairpm The training and use of the models are similar to that of Slic paper SLiC-HF: Sequence Likelihood Calibration with Human Feedback. --- rewardbench/models/__init__.py | 2 +- rewardbench/models/{pairpm.py => slicpairpm.py} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename rewardbench/models/{pairpm.py => slicpairpm.py} (99%) diff --git a/rewardbench/models/__init__.py b/rewardbench/models/__init__.py index b1a7801f..f23d3fcb 100644 --- a/rewardbench/models/__init__.py +++ b/rewardbench/models/__init__.py @@ -35,7 +35,7 @@ build_starling_rm, ) from .ziya import ZiyaPipeline -from .pair_pm import PairPMPipeline +from .slicpairpm import SlicPairPMPipeline # Please open a PR if you need to add more custom modeling code / utilize existing code for you model REWARD_MODEL_CONFIG = { diff --git a/rewardbench/models/pairpm.py b/rewardbench/models/slicpairpm.py similarity index 99% rename from rewardbench/models/pairpm.py rename to rewardbench/models/slicpairpm.py index d5caf935..87bf24a8 100644 --- a/rewardbench/models/pairpm.py +++ b/rewardbench/models/slicpairpm.py @@ -9,7 +9,7 @@ from typing import List, Optional, Tuple, Union -class PairPMPipeline: +class SlicPairPMPipeline: def __init__(self, model_path): self.model = AutoModelForCausalLM.from_pretrained(model_path,).cuda() #, attn_implementation="flash_attention_2", torch_dtype=torch.bfloat16 From b8b53e91fd2be302592f643ec6a6445ae6610afa Mon Sep 17 00:00:00 2001 From: Wei Xiong <90632760+WeiXiongUST@users.noreply.github.com> Date: Sun, 12 May 2024 10:10:10 +0800 Subject: [PATCH 4/9] Update rewardbench/models/__init__.py Co-authored-by: Nathan Lambert --- rewardbench/models/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rewardbench/models/__init__.py b/rewardbench/models/__init__.py index f23d3fcb..7eac706a 100644 --- a/rewardbench/models/__init__.py +++ b/rewardbench/models/__init__.py @@ -124,7 +124,7 @@ "model_type": "Seq. Classifier", }, "RLHFlow/pair-preference-model-LLaMA3-8B": { - "model_builder": AutoModelForCausalLM.from_pretrained(model_path,), + "model_builder": AutoModelForCausalLM.from_pretrained, "pipeline_builder": PairPMPipeline, "quantized": True, "custom_dialogue": True, From a533f7525648d4a8e0a75d94eee109b29ceabdc4 Mon Sep 17 00:00:00 2001 From: Wei Xiong Date: Mon, 13 May 2024 17:51:23 +0800 Subject: [PATCH 5/9] modify interface --- rewardbench/models/__init__.py | 2 +- rewardbench/models/slicpairpm.py | 144 +------------------------------ 2 files changed, 3 insertions(+), 143 deletions(-) diff --git a/rewardbench/models/__init__.py b/rewardbench/models/__init__.py index 7eac706a..f9d0b9e7 100644 --- a/rewardbench/models/__init__.py +++ b/rewardbench/models/__init__.py @@ -125,7 +125,7 @@ }, "RLHFlow/pair-preference-model-LLaMA3-8B": { "model_builder": AutoModelForCausalLM.from_pretrained, - "pipeline_builder": PairPMPipeline, + "pipeline_builder": SlicPairPMPipeline, "quantized": True, "custom_dialogue": True, "model_type": "Custom Classifier", diff --git a/rewardbench/models/slicpairpm.py b/rewardbench/models/slicpairpm.py index 87bf24a8..79e975d7 100644 --- a/rewardbench/models/slicpairpm.py +++ b/rewardbench/models/slicpairpm.py @@ -1,12 +1,7 @@ -from dataclasses import dataclass, field -from typing import Optional import torch -from datasets import load_dataset -from tqdm import tqdm -from transformers import AutoTokenizer, HfArgumentParser, pipeline, AutoModelForCausalLM +from transformers import AutoTokenizer, AutoModelForCausalLM import numpy as np -import pandas as pd -from typing import List, Optional, Tuple, Union +from typing import List class SlicPairPMPipeline: @@ -71,138 +66,3 @@ def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: Li return probs_choose_A -''' -#### An example to use the pair-preference model. -tqdm.pandas() -ds_dir = "allenai/reward-bench" -ds = load_dataset(ds_dir, split='filtered', keep_in_memory=True) -df = pd.DataFrame(columns=['id', 'subset', 'correct']) -pair_pm = PairPMPipeline("RLHFlow/pair-preference-model-LLaMA3-8B") - -for i, example in enumerate(tqdm(ds)): - prompt = example['prompt'] - response_chosen = example["chosen"] - response_rejected = example["rejected"] - - avg_prob_chosen = pair_pm([prompt], [response_chosen], [response_rejected]) - correct = 0.5 if avg_prob_chosen[0] == 0.5 else float(avg_prob_chosen[0] > 0.5) - - row = {'id': example['id'], 'subset': example['subset']} - row['correct'] = correct - df = df._append(row, ignore_index=True) - -categories = { - "chat": ["alpacaeval-easy", 'alpacaeval-length', 'alpacaeval-hard', 'mt-bench-easy', 'mt-bench-med'], - "chat-hard": ['mt-bench-hard', 'llmbar-natural', 'llmbar-adver-neighbor', 'llmbar-adver-GPTInst', - 'llmbar-adver-GPTOut', 'llmbar-adver-manual'], - "safety": ['refusals-dangerous', 'refusals-offensive', 'xstest-should-refuse', 'xstest-should-respond', - 'donotanswer'], - "reasoning": ['math-prm', 'hep-cpp', 'hep-go', 'hep-java', 'hep-js', 'hep-python', 'hep-rust'], -} - -df_acc = pd.DataFrame(columns=['category', 'subset', 'accuracy']) -for category, subsets in categories.items(): - for subset in subsets: - df_subset = df[df['subset'] == subset] - accs = [] - acc = df_subset['correct'].values.mean() - accs.append(acc) - row = {'category': category, 'subset': subset, 'n': len(df_subset), 'accuracy': accs} - df_acc = pd.concat([df_acc, pd.DataFrame(row)], ignore_index=True) -print(df_acc) - -EXAMPLE_COUNTS = { - "alpacaeval-easy": 100, - "alpacaeval-length": 95, - "alpacaeval-hard": 95, - "mt-bench-easy": 28, - "mt-bench-med": 40, - "mt-bench-hard": 37, - "math-prm": 984, # actual length 447, upweighting to be equal to code - "refusals-dangerous": 100, - "refusals-offensive": 100, - "llmbar-natural": 100, - "llmbar-adver-neighbor": 134, - "llmbar-adver-GPTInst": 92, - "llmbar-adver-GPTOut": 47, - "llmbar-adver-manual": 46, - "xstest-should-refuse": 250, - "xstest-should-respond": 154, - "donotanswer": 136, - "hep-cpp": 164, - "hep-go": 164, - "hep-java": 164, - "hep-js": 164, - "hep-python": 164, - "hep-rust": 164, -} - -SUBSET_MAPPING = { - "Chat": [ - "alpacaeval-easy", - "alpacaeval-length", - "alpacaeval-hard", - "mt-bench-easy", - "mt-bench-med", - ], - "Chat Hard": [ - "mt-bench-hard", - "llmbar-natural", - "llmbar-adver-neighbor", - "llmbar-adver-GPTInst", - "llmbar-adver-GPTOut", - "llmbar-adver-manual", - ], - "Safety": [ - "refusals-dangerous", - "refusals-offensive", - "xstest-should-refuse", - "xstest-should-respond", - "donotanswer", - ], - "Reasoning": [ - "math-prm", - "hep-cpp", - "hep-go", - "hep-java", - "hep-js", - "hep-python", - "hep-rust", - ], -} - - -def calculate_scores_per_section(example_counts, subset_mapping, metrics): - section_scores = {} - for section, tests in subset_mapping.items(): - total_weighted_score = 0 - total_examples = 0 - for test in tests: - if test in metrics: - total_weighted_score += metrics[test] * example_counts[test] - total_examples += example_counts[test] - if total_examples > 0: - section_scores[section] = round(100 * total_weighted_score / total_examples, 2) - else: - section_scores[section] = 0 - return section_scores - - -all_subsets = df['subset'].unique() -df_final = pd.DataFrame(columns=['attribute', 'Chat', 'Chat Hard', 'Safety', 'Reasoning']) - -attribute = 'correct' -metrics = {} -for subset in all_subsets: - df_subset = df_acc.loc[df_acc['subset'] == subset] - acc = df_subset['accuracy'].values[0] - metrics[subset] = acc - -# Calculate and print the scores per section -scores_per_section = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, metrics) -row = {'attribute': attribute, **scores_per_section} -df_final = df_final._append(row, ignore_index=True) - -for col in ['Chat', 'Chat Hard', 'Safety', 'Reasoning']: - print(f"{col}: {df_final[col].values[0]}") -''' \ No newline at end of file From e570d0dad5c40b83923b32c6976f586e71d105cb Mon Sep 17 00:00:00 2001 From: Wei Xiong Date: Mon, 13 May 2024 17:55:26 +0800 Subject: [PATCH 6/9] adjust pipeline builder we now use task, model, and tokenizer to init the pipeline. --- rewardbench/models/slicpairpm.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/rewardbench/models/slicpairpm.py b/rewardbench/models/slicpairpm.py index 79e975d7..4f37edc7 100644 --- a/rewardbench/models/slicpairpm.py +++ b/rewardbench/models/slicpairpm.py @@ -6,12 +6,14 @@ class SlicPairPMPipeline: - def __init__(self, model_path): - self.model = AutoModelForCausalLM.from_pretrained(model_path,).cuda() #, attn_implementation="flash_attention_2", torch_dtype=torch.bfloat16 - self.model.eval() - - self.tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=True) - self.tokenizer_data_format = AutoTokenizer.from_pretrained(model_path, use_fast=True) + def __init__(self, task, model, tokenizer): + #self.model = AutoModelForCausalLM.from_pretrained(model_path,).cuda() #, attn_implementation="flash_attention_2", torch_dtype=torch.bfloat16 + #self.model.eval() + self.model = model + self.task = task + self.tokenizer = tokenizer + #self.tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=True) + self.tokenizer_data_format = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct", use_fast=True) self.tokenizer_data_format.chat_template = "\n{% for message in messages %}{% if loop.index0 % 2 == 0 %}\n\n user\n {{ message['content'] }}{% else %}\n\n assistant\n {{ message['content'] }}{% endif %}{% endfor %}\n\n\n" self.prompt_template = "[CONTEXT] {context} [RESPONSE A] {response_A} [RESPONSE B] {response_B} \n" From d66b833def1f441c004c51310a09646d92a7e12a Mon Sep 17 00:00:00 2001 From: Wei Xiong Date: Tue, 14 May 2024 09:20:47 +0800 Subject: [PATCH 7/9] improve code quality --- Dockerfile | 36 -- LICENSE | 201 ------- Makefile | 13 - README.md | 240 -------- rewardbench/__init__.py => __init__.py | 0 rewardbench/__main__.py => __main__.py | 0 analysis/README.md | 126 ----- analysis/__init__.py | 0 analysis/bon_to_alpacaeval.py | 111 ---- analysis/draw_model_histogram.py | 83 --- analysis/draw_mtbench_analysis.py | 47 -- analysis/draw_per_token_reward.py | 119 ---- analysis/draw_subtoken_statistics.py | 68 --- analysis/get_benchmark_results.py | 222 -------- analysis/get_dpo_ref_free_results.py | 244 -------- analysis/get_per_token_reward.py | 443 --------------- analysis/get_subtoken_statistics.py | 164 ------ analysis/plot_all.sh | 12 - analysis/plot_per_model_dist.py | 203 ------- analysis/plot_per_subset_dist.py | 180 ------ analysis/run_ensemble_offline.py | 173 ------ analysis/utils.py | 150 ----- analysis/visualization.py | 462 ---------------- .../chattemplates.py => chattemplates.py | 0 rewardbench/constants.py => constants.py | 0 rewardbench/dpo.py => dpo.py | 0 rewardbench/generative.py => generative.py | 0 {rewardbench/models => models}/README.md | 0 {rewardbench/models => models}/__init__.py | 2 +- {rewardbench/models => models}/beaver.py | 0 .../models => models}/betterpairrm.py | 0 .../models => models}/openassistant.py | 0 {rewardbench/models => models}/openbmb.py | 0 {rewardbench/models => models}/pairrm.py | 0 {rewardbench/models => models}/shp.py | 0 {rewardbench/models => models}/slicpairpm.py | 48 +- {rewardbench/models => models}/starling.py | 0 {rewardbench/models => models}/ziya.py | 0 rewardbench.pdf | Bin 739031 -> 0 bytes rewardbench/rewardbench.py => rewardbench.py | 0 scripts/configs/README.md | 6 - scripts/configs/beaker_eval.yaml | 48 -- scripts/configs/beaker_train.yaml | 35 -- scripts/configs/eval_bon_configs.yaml | 67 --- scripts/configs/eval_configs.yaml | 520 ------------------ scripts/configs/stage3_no_offloading.conf | 41 -- scripts/configs/train_configs.yaml | 31 -- scripts/run_bon.py | 324 ----------- scripts/run_dpo.py | 290 ---------- scripts/run_generative.py | 369 ------------- scripts/run_rm.py | 347 ------------ scripts/submit_eval_jobs.py | 166 ------ scripts/submit_train_jobs.py | 100 ---- scripts/train_rm.py | 438 --------------- setup.py | 64 --- tests/__init__.py | 0 tests/test_data.py | 245 --------- tests/test_package.py | 45 -- tests/test_utils.py | 44 -- rewardbench/utils.py => utils.py | 0 60 files changed, 30 insertions(+), 6497 deletions(-) delete mode 100644 Dockerfile delete mode 100644 LICENSE delete mode 100644 Makefile delete mode 100644 README.md rename rewardbench/__init__.py => __init__.py (100%) rename rewardbench/__main__.py => __main__.py (100%) delete mode 100644 analysis/README.md delete mode 100644 analysis/__init__.py delete mode 100644 analysis/bon_to_alpacaeval.py delete mode 100644 analysis/draw_model_histogram.py delete mode 100644 analysis/draw_mtbench_analysis.py delete mode 100644 analysis/draw_per_token_reward.py delete mode 100644 analysis/draw_subtoken_statistics.py delete mode 100644 analysis/get_benchmark_results.py delete mode 100644 analysis/get_dpo_ref_free_results.py delete mode 100644 analysis/get_per_token_reward.py delete mode 100644 analysis/get_subtoken_statistics.py delete mode 100755 analysis/plot_all.sh delete mode 100644 analysis/plot_per_model_dist.py delete mode 100644 analysis/plot_per_subset_dist.py delete mode 100644 analysis/run_ensemble_offline.py delete mode 100644 analysis/utils.py delete mode 100644 analysis/visualization.py rename rewardbench/chattemplates.py => chattemplates.py (100%) rename rewardbench/constants.py => constants.py (100%) rename rewardbench/dpo.py => dpo.py (100%) rename rewardbench/generative.py => generative.py (100%) rename {rewardbench/models => models}/README.md (100%) rename {rewardbench/models => models}/__init__.py (100%) rename {rewardbench/models => models}/beaver.py (100%) rename {rewardbench/models => models}/betterpairrm.py (100%) rename {rewardbench/models => models}/openassistant.py (100%) rename {rewardbench/models => models}/openbmb.py (100%) rename {rewardbench/models => models}/pairrm.py (100%) rename {rewardbench/models => models}/shp.py (100%) rename {rewardbench/models => models}/slicpairpm.py (73%) rename {rewardbench/models => models}/starling.py (100%) rename {rewardbench/models => models}/ziya.py (100%) delete mode 100644 rewardbench.pdf rename rewardbench/rewardbench.py => rewardbench.py (100%) delete mode 100644 scripts/configs/README.md delete mode 100644 scripts/configs/beaker_eval.yaml delete mode 100644 scripts/configs/beaker_train.yaml delete mode 100644 scripts/configs/eval_bon_configs.yaml delete mode 100644 scripts/configs/eval_configs.yaml delete mode 100644 scripts/configs/stage3_no_offloading.conf delete mode 100644 scripts/configs/train_configs.yaml delete mode 100644 scripts/run_bon.py delete mode 100644 scripts/run_dpo.py delete mode 100644 scripts/run_generative.py delete mode 100644 scripts/run_rm.py delete mode 100644 scripts/submit_eval_jobs.py delete mode 100644 scripts/submit_train_jobs.py delete mode 100644 scripts/train_rm.py delete mode 100644 setup.py delete mode 100644 tests/__init__.py delete mode 100644 tests/test_data.py delete mode 100644 tests/test_package.py delete mode 100644 tests/test_utils.py rename rewardbench/utils.py => utils.py (100%) diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index cbd9bff2..00000000 --- a/Dockerfile +++ /dev/null @@ -1,36 +0,0 @@ -# TODO: Update this when releasing RewardBench publicly -# This dockerfile is forked from ai2/cuda11.8-cudnn8-dev-ubuntu20.04 -# To get the latest id, run `beaker image pull ai2/cuda11.8-cudnn8-dev-ubuntu20.04` -# and then `docker image list`, to verify docker image is pulled -# e.g. `Image is up to date for gcr.io/ai2-beaker-core/public/cncl3kcetc4q9nvqumrg:latest` -FROM gcr.io/ai2-beaker-core/public/cojd4q5l9jpqudh7p570:latest - -RUN apt update && apt install -y openjdk-8-jre-headless - -RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash -RUN apt-get -y install git-lfs - -WORKDIR /stage/ - -RUN pip install --upgrade pip setuptools wheel -RUN pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 - -COPY rewardbench rewardbench -COPY scripts scripts -COPY setup.py setup.py -COPY Makefile Makefile -COPY README.md README.md -RUN pip install -e . -RUN chmod +x scripts/* -RUN pip install flash-attn==2.5.0 --no-build-isolation -RUN pip install ai2-olmo -# TODO remove above when olmo supported in Transformers verion -RUN pip install jinja2 -# for better-pairRM -# generative installs -RUN pip install anthropic -RUN pip install openai -RUN pip install git+https://github.com/vllm-project/vllm.git@d87f39e9a9dd149f5dd7a58b4d98b21f713827b6 - -# for interactive session -RUN chmod -R 777 /stage/ diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 261eeb9e..00000000 --- a/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/Makefile b/Makefile deleted file mode 100644 index d8403692..00000000 --- a/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -.PHONY: style quality - -# make sure to test the local checkout in scripts and not the pre-installed one (don't use quotes!) -export PYTHONPATH = src - -check_dirs := rewardbench scripts analysis tests - -style: - python -m black --line-length 119 --target-version py310 $(check_dirs) setup.py - python -m isort $(check_dirs) setup.py --profile black - -quality: - python -m flake8 --max-line-length 119 $(check_dirs) setup.py \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index d67a345f..00000000 --- a/README.md +++ /dev/null @@ -1,240 +0,0 @@ -
-

RewardBench: Evaluating Reward Models

-

- Leaderboard 📐 | - RewardBench Dataset | - Existing Test Sets | - Results 📊 | - Paper📝 -

- Github RewardBench Logo -
- - ---- - -**RewardBench** is a benchmark designed to evaluate the capabilities and safety of reward models (including those trained with Direct Preference Optimization, DPO). -The repository includes the following: -* Common inference code for a variety of reward models (Starling, PairRM, OpenAssistant, DPO, and more). -* Common dataset formatting and tests for fair reward model inference. -* Analysis and visualization tools. - -The two primary scripts to generate results (more in `scripts/`): -1. `scripts/run_rm.py`: Run evaluations for reward models. -2. `scripts/run_dpo.py`: Run evaluations for direct preference optimization (DPO) models (and other models using implicit rewards, such as KTO). -3. `scripts/train_rm.py`: A basic RM training script built on [TRL](https://github.com/huggingface/trl). - -## Quick Usage -RewardBench let's you quickly evaluate any reward model on any preference set. -To install for quick usage, install with pip as: -``` -pip install reward bench -``` -Then, run a following: -``` -rewardbench --model={yourmodel} --dataset={yourdataset} --batch_size=8 -``` -For a DPO model, pass --ref_model={} and the script will automatically route there. -Automatically uses Tokenizers chat templates, but can also use fastchat conv templates. - -To run the core Reward Bench evaluation set, run: -``` -rewardbench --model={yourmodel} -``` - -Examples: -1. Normal operation -``` -rewardbench --model=OpenAssistant/reward-model-deberta-v3-large-v2 --dataset=allenai/ultrafeedback_binarized_cleaned --split=test_gen --chat_template=raw -``` -2. DPO model from local dataset (note `--load_json`) -``` -rewardbench --model=Qwen/Qwen1.5-0.5B-Chat --ref_model=Qwen/Qwen1.5-0.5B --dataset=/net/nfs.cirrascale/allennlp/jacobm/herm/data/berkeley-nectar-binarized-preferences-random-rejected.jsonl --load_json -``` - -## Full Installation -To install from source, please install `torch` on your system, and then install the following requirements. -``` -pip install -e . -``` -Add the following to your `.bashrc`: -``` -export HF_TOKEN="{your_token}" -``` - -## Contribute Your Model - -For now, in order to contribute your model to the leaderboard, open an issue with the model name on HuggingFace (you can still evaluate local models with RewardBench, see below). -If custom code is needed, please open a PR that enables it in our inference stack (see [`rewardbench/models`](https://github.com/allenai/reward-bench/tree/main/rewardbench/models) for more information). - -# Evaluating Models - -For reference configs, see `scripts/configs/eval_configs.yaml`. -For reference on Chat Templates, many models follow the base / sft model terminology [here](https://github.com/lm-sys/FastChat/blob/main/fastchat/conversation.py). -A small model for debugging is available at `natolambert/gpt2-dummy-rm`. - -The core scripts automatically evaluate our core evaluation set. To run these on [existing preference sets](https://huggingface.co/datasets/allenai/pref-test-sets), add the argument `--pref_sets`. - -## Running Reward Models - -To run individual models with `scripts/run_rm.py`, use any of the following examples: -``` -python scripts/run_rm.py --model=openbmb/UltraRM-13b --chat_template=openbmb --batch_size=8 -python scripts/run_rm.py --model=OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5 --chat_template=oasst_pythia -python scripts/run_rm.py --model=PKU-Alignment/beaver-7b-v1.0-cost --chat_template=pku-align --batch_size=16 -python scripts/run_rm.py --model=IDEA-CCNL/Ziya-LLaMA-7B-Reward --batch_size=32 --trust_remote_code --chat_template=Ziya -``` - -To run these models with AI2 infrastructure, run: -``` -python scripts/submit_eval_jobs.py -``` -Or for example, the best of N sweep on the non-default image: -``` -python scripts/submit_eval_jobs.py --eval_on_bon --image=nathanl/herm_bon -``` -Note: for AI2 users, you must set `beaker secret write HF_TOKEN ` to make the scripts work. - -Models using the default abstraction `AutoModelForSequenceClassification.from_pretrained` can also be loaded locally. Expanding this functionality is TODO. E.g. -``` -python scripts/run_rm.py --model=/net/nfs.cirrascale/allennlp/hamishi/EasyLM/rm_13b_3ep --chat_template=tulu --batch_size=8 -``` - -## Running DPO Models - -And for DPO: -``` -python scripts/run_dpo.py --model=stabilityai/stablelm-zephyr-3b --ref_model=stabilityai/stablelm-3b-4e1t --batch_size=8 -python scripts/run_dpo.py --model=stabilityai/stablelm-2-zephyr-1_6b --ref_model=stabilityai/stablelm-2-1_6b --batch_size=16 -``` - -## Ensembling RMs -For reward models already in RewardBench, you can run an offline ensemble test to approximate using multiple reward models in your system. To try this, you can run: -``` -python analysis/run_ensemble_offline.py --models sfairXC/FsfairX-LLaMA3-RM-v0.1 openbmb/Eurus-RM-7b Nexusflow/Starling-RM-34B -``` - -## Running Generative RMs (LLM-as-a-judge) -Local and API models are supported. For example, run OpenAI's models like: -``` -python scripts/run_generative.py --model=gpt-3.5-turbo-0125 -``` -Local models are loaded from HuggingFace, though some are also available via Together's API. Run Llama 3 locally with -``` -python scripts/run_generative.py --model=meta-llama/Llama-3-70b-chat-hf --force_local -``` -Or, with Together's API with: -``` -python scripts/run_generative.py --model=meta-llama/Llama-3-70b-chat-hf -``` - -We are adding support for generative ensembles (only via API for now), run with: -``` -python scripts/run_generative.py --model gpt-3.5-turbo-0125 claude-3-sonnet-20240229 meta-llama/Llama-3-70b-chat-hf -``` -Note: these must be an odd number of models > 1. - -## Creating Best of N (BoN) rankings - -To create the ranking across the dataset, run (best_of 8 being placeholder, 16 should be fine as eval logic will handle lower best of N numbers): -``` -python scripts/run_bon.py --model=OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5 --chat_template=oasst_pythia --best_of=8 --debug -``` -## Getting Leaderboard Section Scores - -**Important**: We use prompt-weighed scores for the sections Chat, Chat Hard, Safety, and Reasoning (with math equalized to code here) to avoid assigning too much credit to small subsets (e.g. MT Bench ones). Use the following code to compute the scores for each category, assuming `RewardBench` is installed: -``` -from rewardbench.constants import EXAMPLE_COUNTS, SUBSET_MAPPING -from rewardbench.utils import calculate_scores_per_section - -metrics = { - "alpacaeval-easy": 0.5, - "alpacaeval-hard": 0.7052631578947368, - "alpacaeval-length": 0.5894736842105263, - "chat_template": "tokenizer", - "donotanswer": 0.8235294117647058, - "hep-cpp": 0.6280487804878049, - "hep-go": 0.6341463414634146, - "hep-java": 0.7073170731707317, - "hep-js": 0.6646341463414634, - "hep-python": 0.5487804878048781, - "hep-rust": 0.6463414634146342, - "llmbar-adver-GPTInst": 0.391304347826087, - "llmbar-adver-GPTOut": 0.46808510638297873, - "llmbar-adver-manual": 0.3695652173913043, - "llmbar-adver-neighbor": 0.43283582089552236, - "llmbar-natural": 0.52, - "math-prm": 0.2953020134228188, - "model": "PKU-Alignment/beaver-7b-v1.0-cost", - "model_type": "Seq. Classifier", - "mt-bench-easy": 0.5714285714285714, - "mt-bench-hard": 0.5405405405405406, - "mt-bench-med": 0.725, - "refusals-dangerous": 0.97, - "refusals-offensive": 1, - "xstest-should-refuse": 1, - "xstest-should-respond": 0.284 -} - -# Calculate and print the scores per section -scores_per_section = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, metrics) -print(scores_per_section) -``` - -## Repository structure - -``` -├── README.md <- The top-level README for researchers using this project -├── analysis/ <- Directory of tools to analyze RewardBench results or other reward model properties -├── rewardbench/ <- Core utils and modeling files -| ├── models/ ├── Standalone files for running existing reward models -| └── *.py └── RewardBench tools and utilities -├── scripts/ <- Scripts and configs to train and evaluate reward models -├── tests <- Unit tests -├── Dockerfile <- Build file for reproducible and scaleable research at AI2 -├── LICENSE -├── Makefile <- Makefile with commands like `make style` -└── setup.py <- Makes project pip installable (pip install -e .) so `alignment` can be imported -``` - -## Maintenance - -This section is designed for AI2 usage, but may help others evaluating models with Docker. - -### Updating the docker image - -When updating this repo, the docker image should be rebuilt to include those changes. -For AI2 members, please update the list below with any images you use regularly. -For example, if you update `scripts/run_rm.py` and include a new package (or change a package version), you should rebuild the image and verify it still works on known models. - -To update the image, run these commands in the root directory of this repo: -1. `docker build -t . --platform linux/amd64` -2. `beaker image create -n ` - -Notes: Do not use the character - in image names for beaker, - -When updating the `Dockerfile`, make sure to see the instructions at the top to update the base cuda version. - -In development, we have the following docker images (most recent first as it's likely what you need). -TODO: Update it so one image has VLLM (for generative RM only) and one without. Without will load much faster. -- `nathanl/rb_v16` (with VLLM): add support for vllm + llm as a judge -- `nathanl/rb_v12`: add support for llama3 -- `nathanl/rewardbench_v10`: add support for `mightbe/Better-PairRM` via jinja2 -- `nathanl/rewardbench_v8`: add support for `openbmb/Eurus-RM-7b` and starcoder2 -- `nathanl/rewardbench_v5`: improve saving with DPO script -- `nathanl/rewardbench_v4`: fix EOS token bug on FastChat models (GH #90) -- `nathanl/rewardbench_v2`: fix beaver cost model -- `nathanl/rewardbench_v1`: release version - -## Citation -Please cite our work with the following: -``` -@misc{lambert2024rewardbench, - title={RewardBench: Evaluating Reward Models for Language Modeling}, - author={Nathan Lambert and Valentina Pyatkin and Jacob Morrison and LJ Miranda and Bill Yuchen Lin and Khyathi Chandu and Nouha Dziri and Sachin Kumar and Tom Zick and Yejin Choi and Noah A. Smith and Hannaneh Hajishirzi}, - year={2024}, - eprint={2403.13787}, - archivePrefix={arXiv}, - primaryClass={cs.LG} -} -``` diff --git a/rewardbench/__init__.py b/__init__.py similarity index 100% rename from rewardbench/__init__.py rename to __init__.py diff --git a/rewardbench/__main__.py b/__main__.py similarity index 100% rename from rewardbench/__main__.py rename to __main__.py diff --git a/analysis/README.md b/analysis/README.md deleted file mode 100644 index 75701a22..00000000 --- a/analysis/README.md +++ /dev/null @@ -1,126 +0,0 @@ -# Visualizations & Eval Analysis for HERM - -We're going to add visualizations for both the eval. data and results here. -So far, we have the following tools: - -### Convert BoN outputs to AlpacaEval format -``` -python analysis/bon_to_alpacaeval.py --generation_model=zephyr-7b --reward_model=OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5 -``` - -### Get per task distribution -``` -python analysis/plot_per_subset_dist.py --output_dir=plots/whisker -``` - -### Get benchmark results -This prints out the RewardBench results in a Markdown or LaTeX table. Note that you need to pass an API token to the `HF_COLLAB_TOKEN` environment variable. -``` -# Use --render_latex for LaTeX output -python analysis/get_benchmark_results.py -``` - -Below is a snippet of the output for the RewardBench - General results: - -| model | average | alpacaeval | mt-bench | llmbar | refusals | hep | -|--------------------------------------------------|-----------|--------------|------------|----------|------------|--------| -| berkeley-nest/Starling-RM-7B-alpha | 0.74 | 0.89 | 0.84 | 0.45 | 0.7 | 0.8 | -| openbmb/UltraRM-13b | 0.68 | 0.98 | 0.93 | 0.54 | 0.08 | 0.86 | -| stabilityai/stablelm-zephyr-3b | 0.64 | 0.9 | 0.84 | 0.52 | 0.3 | | -| OpenAssistant/reward-model-deberta-v3-large-v2 | 0.64 | 0.88 | 0.81 | 0.25 | 0.61 | 0.65 | -| OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1 | 0.63 | 0.95 | 0.78 | 0.36 | 0.42 | | -| OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5 | 0.62 | 0.86 | 0.79 | 0.5 | 0.35 | | -| llm-blender/PairRM-hf | 0.6 | 0.85 | 0.86 | 0.53 | 0.13 | 0.64 | -| weqweasdas/hh_rlhf_rm_open_llama_3b | 0.54 | 0.79 | 0.72 | 0.41 | 0.22 | | -| stanfordnlp/SteamSHP-flan-t5-xl | 0.48 | 0.85 | 0.7 | 0.38 | 0.01 | 0.48 | - -Also, these can be visualized as a distribution with -``` -python analysis/plot_per_subset_dist.py -``` - - -### Per token uterrance reward -This returns the reward per-token to show how the reward evolves over a piece of text. -Use of this tool requires installation of `spacy-alignments`: -``` -pip install spacy-alignments -``` -Then, -``` -python analysis/per_token_reward.py --model=OpenAssistant/reward-model-deberta-v3-large-v2 --text="I love to walk the dog, what do you like?" -``` -E.g. with OpenAssistant/reward-model-deberta-v3-large-v2 -``` -Reward: -0.544 | Substring: I -Reward: -0.556 | Substring: I love -Reward: -0.566 | Substring: I love to -Reward: 0.099 | Substring: I love to walk -Reward: 0.096 | Substring: I love to walk the -Reward: 0.092 | Substring: I love to walk the dog -Reward: 0.09 | Substring: I love to walk the dog, -Reward: 0.087 | Substring: I love to walk the dog, what -Reward: 0.085 | Substring: I love to walk the dog, what do -Reward: 0.089 | Substring: I love to walk the dog, what do you -Reward: 0.09 | Substring: I love to walk the dog, what do you like -Reward: 0.093 | Substring: I love to walk the dog, what do you like? -``` -### Model usage within eval. dataset -To run this, execute: -``` -python analysis/draw_model_histogram output.png --log_scale -``` -![output](https://github.com/allenai/herm/assets/10695622/e5aa4c0f-83de-4997-8307-f49c22456671) - -This will also return the following table by default: - -| Model | Total | chosen_model | rejected_model | -| --- | --- | --- | --- | -| human | 2107 | 985 | 1122 | -| unknown | 838 | 419 | 419 | -| GPT-4 | 516 | 466 | 50 | -| Llama-2-70b-chat | 251 | 163 | 88 | -| Mistral-7B-Instruct-v0.1 | 244 | 117 | 127 | -| dolphin-2.0-mistral-7b | 208 | 0 | 208 | -| GPT4-Turbo | 100 | 100 | 0 | -| alpaca-7b | 100 | 0 | 100 | -| tulu-2-dpo-70b | 95 | 95 | 0 | -| davinci-003 | 95 | 0 | 95 | -| guanaco-13b | 95 | 0 | 95 | -| zephyr-7b-beta | 87 | 69 | 18 | -| ChatGLM2 | 52 | 0 | 52 | -| vicuna-7b | 38 | 0 | 38 | -| GPT-3.5-Turbo | 29 | 22 | 7 | -| claude-v1 | 23 | 9 | 14 | -| dolly-v2-12b | 19 | 1 | 18 | -| fastchat-t5-3b | 18 | 2 | 16 | -| llama-13b | 17 | 1 | 16 | -| falcon-40b-instruct | 11 | 8 | 3 | -| rwkv-4-raven-14b | 11 | 1 | 10 | -| stablelm-tuned-alpha-7b | 11 | 0 | 11 | -| alpaca-13b | 10 | 3 | 7 | -| chatglm-6b | 8 | 4 | 4 | -| mpt-30b-instruct | 7 | 6 | 1 | -| h2ogpt-oasst-open-llama-13b | 6 | 4 | 2 | -| palm-2-chat-bison-001 | 6 | 4 | 2 | -| gpt4all-13b-snoozy | 6 | 5 | 1 | -| guanaco-65b | 5 | 5 | 0 | -| oasst-sft-4-pythia-12b | 5 | 2 | 3 | -| Llama-2-7b-chat | 5 | 3 | 2 | -| mpt-30b-chat | 5 | 5 | 0 | -| mpt-7b-chat | 5 | 3 | 2 | -| guanaco-33b | 4 | 4 | 0 | -| Llama-2-13b-chat | 4 | 3 | 1 | -| vicuna-13b-v1.3 | 4 | 3 | 1 | -| koala-13b | 4 | 4 | 0 | -| baize-v2-13b | 4 | 4 | 0 | -| oasst-sft-7-llama-30b | 4 | 4 | 0 | -| nous-hermes-13b | 4 | 2 | 2 | -| vicuna-7b-v1.3 | 3 | 2 | 1 | -| claude-instant-v1 | 3 | 3 | 0 | -| wizardlm-30b | 3 | 3 | 0 | -| wizardlm-13b | 3 | 1 | 2 | -| tulu-30b | 2 | 2 | 0 | -| vicuna-33b-v1.3 | 1 | 1 | 0 | - -Total number of models involved: 44 diff --git a/analysis/__init__.py b/analysis/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/analysis/bon_to_alpacaeval.py b/analysis/bon_to_alpacaeval.py deleted file mode 100644 index 0338550c..00000000 --- a/analysis/bon_to_alpacaeval.py +++ /dev/null @@ -1,111 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Script for converting RewardBench best of n (BoN) results into the AlpacaEval format - -import argparse -import os -from pathlib import Path - -from datasets import load_dataset -from huggingface_hub import hf_hub_download - -LOCAL_DIR = "hf_snapshot_evals" - - -def get_args(): - parser = argparse.ArgumentParser() - # optional arguments - parser.add_argument( - "--hf_evals_repo", - type=str, - default="allenai/reward-bench-results", - help="HuggingFace repository containing the evaluation results.", - ) - parser.add_argument( - "--output_dir", - type=Path, - default="outputs/", - help="Directory to save the results.", - ) - parser.add_argument( - "--generation_model", # zephyr-7b or tulu-13b - required=True, - nargs=1, - choices=["zephyr-7b", "tulu-13b"], - help="The generation model used for the evaluation.", - ) - parser.add_argument( - "--reward_model", - required=True, - type=str, - help="The reward model used for the evaluation.", - ) - parser.add_argument( - "--best_of", - type=int, - default=16, - help="The number of responses to consider (from first index).", - ) - args = parser.parse_args() - return args - - -def main(): - args = get_args() - - # Download the evaluation results - # base_dir = "https://huggingface.co/datasets/ai2-adapt-dev/herm-debug/raw/main/best-of-n/alpaca_eval/" - # d_file = base_dir + f"{args.generation_model[0]}" + f"/{args.reward_model}.json" - # load dataset directly doesn't work with our schema for some reason - # eval_data = load_dataset("json", data_files=d_file, split="train") - - hub_file = "best-of-n/alpaca_eval/" + f"{args.generation_model[0]}" + f"/{args.reward_model}.json" - f = hf_hub_download(args.hf_evals_repo, hub_file, repo_type="dataset") - eval_data = load_dataset("json", data_files=f, split="train") - - def split_dict_lists(input_dict, chunk_size=16): - # List to hold the resulting dictionaries - result = [] - - # Iterate over each key-value pair in the input dictionary - for key, value in input_dict.items(): - # Split the list into chunks of size 16 - for i in range(0, len(value), chunk_size): - chunk = value[i : i + chunk_size] - # Create a new dictionary for each chunk and add it to the result list - result.append({key: chunk}) - - return result - - # rename column prompt to 'instruction' - eval_data = eval_data.rename_columns({"prompt": "instruction"}) - - # add empty column input - input_col = [""] * len(eval_data) - eval_data = eval_data.add_column("input", input_col) - # rename text to output - eval_data = eval_data.rename_columns({"text": "output"}) - # rename model to generator - eval_data = eval_data.rename_columns({"model": "generator"}) - - # save locally to json for sending to AlpacaEval - # create dir if needed - out_dir = os.path.dirname(f"results/AlpacaEval/{args.generation_model[0]}-{args.reward_model}.json") - os.makedirs(os.path.dirname(out_dir), exist_ok=True) - eval_data.to_json(out_dir) - - -if __name__ == "__main__": - main() diff --git a/analysis/draw_model_histogram.py b/analysis/draw_model_histogram.py deleted file mode 100644 index 1072590d..00000000 --- a/analysis/draw_model_histogram.py +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Script to draw the distribution of model counts in a histogram - -import argparse -from pathlib import Path - -from analysis.visualization import draw_model_source_histogram, print_model_statistics - - -def get_args(): - parser = argparse.ArgumentParser() - # positional arguments - parser.add_argument("output_path", type=Path, help="Filepath to save the generated figure.") - # optional arguments - parser.add_argument( - "--dataset_name", - type=str, - default="allenai/reward-bench", - help="The HuggingFace dataset name to source the eval dataset.", - ) - parser.add_argument( - "--keys", - type=lambda x: x.split(","), - default="chosen_model,rejected_model", - help="Comma-separated columns to include in the histogram.", - ) - parser.add_argument( - "--figsize", - type=int, - nargs=2, - default=[14, 8], - help="Control the figure size when plotting.", - ) - parser.add_argument( - "--normalize", - action="store_true", - help="Normalize the values based on the total number of completions.", - ) - parser.add_argument( - "--log_scale", - action="store_true", - help="Set the y-axis to a logarithmic scale.", - ) - parser.add_argument( - "--top_n", - type=int, - default=None, - help="Only plot the top-n models in the histogram.", - ) - - args = parser.parse_args() - return args - - -def main(): - args = get_args() - draw_model_source_histogram( - dataset_name=args.dataset_name, - output_path=args.output_path, - keys=args.keys, - figsize=args.figsize, - normalize=args.normalize, - log_scale=args.log_scale, - top_n=args.top_n, - ) - print_model_statistics() - - -if __name__ == "__main__": - main() diff --git a/analysis/draw_mtbench_analysis.py b/analysis/draw_mtbench_analysis.py deleted file mode 100644 index 9da66957..00000000 --- a/analysis/draw_mtbench_analysis.py +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import matplotlib.pyplot as plt -import typer -from datasets import load_dataset - -from analysis.visualization import AI2_COLORS, PLOT_PARAMS - -plt.rcParams.update(PLOT_PARAMS) - - -def main(): - mtbench_url = ( - "https://huggingface.co/spaces/lmsys/mt-bench/resolve/main/data/mt_bench/model_judgment/gpt-4_single.jsonl" - ) - mtbench_data = load_dataset("json", data_files=mtbench_url, split="train") - single_turn = mtbench_data.filter(lambda x: x["judge"][1] == "single-v1") - scores = {score: single_turn.filter(lambda x: x["score"] == score).num_rows for score in range(1, 10 + 1)} - - fig, ax = plt.subplots(figsize=(8, 6)) - ax.bar(scores.keys(), scores.values(), color=AI2_COLORS.get("light_blue")) - ax.set_xlabel("MTBench Score") - ax.set_ylabel("Number of examples") - - ax.set_xticks(range(1, 10 + 1)) - - ax.spines["right"].set_visible(False) - ax.spines["top"].set_visible(False) - - plt.tight_layout() - plt.savefig("mtbench_scores.pdf", transparanet=True, dpi=120) - - -if __name__ == "__main__": - typer.run(main) diff --git a/analysis/draw_per_token_reward.py b/analysis/draw_per_token_reward.py deleted file mode 100644 index 44eb23bf..00000000 --- a/analysis/draw_per_token_reward.py +++ /dev/null @@ -1,119 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Draw the per token reward -# Note, requires pip install spacy-alignments - -import argparse -import json -from pathlib import Path -from typing import List - -import numpy as np -import spacy_alignments as tokenizations - -from analysis.visualization import draw_per_token_reward - -DEFAULT_DIRNAME = "per-token-reward" - - -def get_args(): - parser = argparse.ArgumentParser() - # positional arguments - parser.add_argument("text_hash", type=str, help="Path or pointer to the text hash to plot.") - parser.add_argument("output_path", type=Path, help="Filepath to save the generated figure.") - # optional arguments - parser.add_argument( - "--local", - action="store_true", - help="Find the file locally.", - ) - parser.add_argument( - "--figsize", - type=int, - nargs=2, - default=[8, 8], - help="Control the figure size when plotting.", - ) - parser.add_argument( - "--line_chart", - action="store_true", - help="Draw a line chart instead of a heatmap.", - ) - parser.add_argument( - "--do_not_align_tokens", - action="store_true", - help="If set, then tokens will not be aligned. May cause issues in the plot.", - ) - args = parser.parse_args() - return args - - -def align_tokens(reference_tokens: List[str], predicted_tokens: List[str], rewards: List[float]) -> List[float]: - """Align tokens and recompute the reward - - reference_tokens (List[str]): the reference tokenization to base the alignment on. - predicted_tokens (List[str]): the tokens from the reward pipeline. - rewards (List[float]): the per-token reward. - RETURNS (List[float]): the recomputed per-token reward. - """ - a2b, _ = tokenizations.get_alignments(reference_tokens, predicted_tokens) - rewards_list = [] - for aligned_idxs in a2b: - rewards_list.append([rewards[idx] for idx in aligned_idxs]) - aligned_rewards = list(map(np.mean, rewards_list)) - return aligned_rewards - - -def main(): - args = get_args() - # Read the results first - input_dir = Path.cwd() / DEFAULT_DIRNAME / args.text_hash - assert input_dir.exists(), f"Directory {input_dir} does not exist!" - - rewards = {} - for file in input_dir.glob("*.json"): - with open(file) as f: - results = json.load(f) - rewards[results["model"]] = results - - assert len(rewards) > 0, f"Directory {input_dir} is empty!" - - # Get reference alignment - first_key = next(iter(rewards)) # should be the same all throughout - text = rewards[first_key]["text"] - whitespace_tokenizer = lambda x: x.split(" ") # noqa - reference_tokens = whitespace_tokenizer(text) - - if not args.do_not_align_tokens: - for _, results in rewards.items(): - results["aligned_rewards"] = align_tokens( - reference_tokens=reference_tokens, - predicted_tokens=results["tokens"], - rewards=results["rewards"], - ) - - reward_key = "rewards" if args.do_not_align_tokens else "aligned_rewards" - draw_per_token_reward( - tokens=reference_tokens, - rewards=[reward[reward_key] for _, reward in rewards.items()], - model_names=[model_name for model_name, _ in rewards.items()], - output_path=args.output_path, - figsize=args.figsize, - line_chart=args.line_chart, - ) - - -if __name__ == "__main__": - main() diff --git a/analysis/draw_subtoken_statistics.py b/analysis/draw_subtoken_statistics.py deleted file mode 100644 index 830244ca..00000000 --- a/analysis/draw_subtoken_statistics.py +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import argparse -from pathlib import Path - -from analysis.visualization import draw_subtoken_statistics -from rewardbench.constants import SUBSET_MAPPING - - -def get_args(): - parser = argparse.ArgumentParser() - # positional arguments - parser.add_argument("output_path", type=Path, help="Path to save the generated figure.") - # optional arguments - parser.add_argument( - "--tokenizer_name", - type=str, - default="oobabooga/llama-tokenizer", - help="Pointer to the HuggingFace repository to source the tokenizer.", - ) - parser.add_argument( - "--dataset_name", - type=str, - default="allenai/reward-bench", - help="Pointer to the HuggingFace repository that contains the benchmark dataset.", - ) - parser.add_argument( - "--figsize", - type=int, - nargs=2, - default=[6, 12], - help="Control the figure size when plotting.", - ) - parser.add_argument( - "--render_latex", - action="store_true", - help="If set, then it will render a LaTeX string instead of Markdown.", - ) - args = parser.parse_args() - return args - - -def main(): - args = get_args() - - draw_subtoken_statistics( - category_subsets=SUBSET_MAPPING, - dataset_name=args.dataset_name, - tokenizer_name=args.tokenizer_name, - output_path=args.output_path, - figsize=args.figsize, - ) - - -if __name__ == "__main__": - main() diff --git a/analysis/get_benchmark_results.py b/analysis/get_benchmark_results.py deleted file mode 100644 index 9759dc66..00000000 --- a/analysis/get_benchmark_results.py +++ /dev/null @@ -1,222 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Script for getting reward model benchmark results - -import argparse -import os -from pathlib import Path -from typing import List - -import numpy as np -import pandas as pd -from huggingface_hub import snapshot_download - -from analysis.utils import load_results -from rewardbench.constants import ( - EXAMPLE_COUNTS, - SUBSET_MAPPING, - SUBSET_NAME_TO_PAPER_READY, -) - -LOCAL_DIR = "hf_snapshot_evals" - - -def get_args(): - parser = argparse.ArgumentParser() - # optional arguments - parser.add_argument( - "--hf_evals_repo", - type=str, - default="allenai/reward-bench-results", - help="HuggingFace repository containing the evaluation results.", - ) - parser.add_argument( - "--output_dir", - type=Path, - default=None, - help="Directory to save the results.", - ) - parser.add_argument( - "--render_latex", - action="store_true", - help="If set, then it will render a LaTeX string instead of Markdown.", - ) - parser.add_argument( - "--ignore_columns", - type=lambda x: x.split(",") if x is not None else None, - default=None, - help="Comma-separated column names to exclude from the report.", - ) - args = parser.parse_args() - return args - - -def get_average_over_rewardbench( - df: pd.DataFrame, - df_prefs: pd.DataFrame, -) -> pd.DataFrame: - """Get average over a strict subset of reward models""" - new_df = df.copy() - for subset, sub_subsets in SUBSET_MAPPING.items(): - subset_cols = [col for col in new_df.columns if col in sub_subsets] - sub_data = new_df[subset_cols].values # take the relevant column values - sub_counts = [EXAMPLE_COUNTS[s] for s in subset_cols] # take the example counts - new_df[subset] = np.average(sub_data, axis=1, weights=sub_counts) - - data_cols = list(SUBSET_MAPPING.keys()) - keep_columns = ["model"] + ["model_type"] + data_cols - new_df = new_df[keep_columns] - - # selected average from pref_sets - pref_columns = ["anthropic_helpful", "anthropic_hhh", "shp", "summarize"] - pref_data = df_prefs[pref_columns].values - - # add column test sets knowing the rows are not identical, take superset - df_prefs["Prior Sets (0.5 weight)"] = np.nanmean(pref_data, axis=1) - # add column Test Sets empty to new_df - new_df["Prior Sets (0.5 weight)"] = np.nan - # per row in new_df if model is in dataframe_prefs, add the value to new_df["Prior Sets"] - values = [] - for i, row in new_df.iterrows(): - model = row["model"] - if model in df_prefs["model"].values: - values.append(df_prefs[df_prefs["model"] == model]["Prior Sets (0.5 weight)"].values[0]) - # new_df.at[i, "Prior Sets"] = dataframe_prefs[dataframe_prefs["model"] == model]["Prior Sets"].values[0] - else: - values.append(np.nan) - - new_df["Prior Sets (0.5 weight)"] = values - - # add total average - data_cols += ["Prior Sets (0.5 weight)"] - final_data = new_df[data_cols].values - masked_data = np.ma.masked_array(final_data, np.isnan(final_data)) - weights = [2, 2, 2, 2, 1] - average = np.ma.average(masked_data, axis=1, weights=weights) - new_df["average"] = average.filled(np.nan) - - # make average third column - keep_columns = ["model", "model_type", "average"] + data_cols - new_df = new_df[keep_columns] - return new_df - - -def main(): - args = get_args() - - api_token = os.environ.get("HF_TOKEN") - if not api_token: - raise ValueError("HF_TOKEN not found!") - - print(f"Downloading repository snapshots into '{LOCAL_DIR}' directory") - # Load the remote repository using the HF API - hf_evals_repo = snapshot_download( - local_dir=Path(LOCAL_DIR) / "rewardbench", - repo_id=args.hf_evals_repo, - use_auth_token=api_token, - tqdm_class=None, - etag_timeout=30, - repo_type="dataset", - ) - hf_evals_df = load_results(hf_evals_repo, subdir="eval-set/", ignore_columns=args.ignore_columns) - hf_prefs_df = load_results(hf_evals_repo, subdir="pref-sets/", ignore_columns=args.ignore_columns) - - def _multiply_numbered_cols_by(n, df, ignore: List[str] = []): - numbered_cols = df.select_dtypes("number").columns - df[numbered_cols] *= n - return df - - all_results = { - "RewardBench - Overview": _multiply_numbered_cols_by( - 100, get_average_over_rewardbench(hf_evals_df, hf_prefs_df) - ), - "RewardBench - Detailed": _multiply_numbered_cols_by(100, hf_evals_df), - "Pref Sets - Overview": _multiply_numbered_cols_by(100, hf_prefs_df), - } - - for category, subsets in SUBSET_MAPPING.items(): - df_per_category = hf_evals_df[subsets] - df_per_category.insert(0, "model", hf_evals_df["model"].to_list()) - df_per_category.insert(1, "model_type", hf_evals_df["model_type"].to_list()) - - wt_average = [] - for _, row in hf_evals_df[subsets].iterrows(): - scores = [row[s] for s in subsets] - weights = [EXAMPLE_COUNTS.get(s) for s in subsets] - wt_average.append(np.average(scores, weights=weights)) - - df_per_category.insert(2, "average", wt_average) - all_results[category] = df_per_category - - for name, df in all_results.items(): - # df.insert(0, "", range(1, 1 + len(df))) - print(f"==================== {name} ====================") - df = df.sort_values(by="average", ascending=False).round(1) - df = df.rename(columns=SUBSET_NAME_TO_PAPER_READY) - - if args.render_latex: - # Prettify: we're using openmojis instead of a model_type column - def _prettify_model_name(row): - model_type = row["model_type"] - orig_name = row["model"] - openmoji_map = { - "Seq. Classifier": "\sequenceclf", # noqa - "Custom Classifier": "\customclf", # noqa - "DPO": "\dpo", # noqa - "generative": "\generative", # noqa - } - emoji = openmoji_map[model_type] if model_type in openmoji_map else "\\random" - - if "Cohere" in orig_name: - hf_name = "Cohere" - elif "openai" in orig_name: - hf_name = "openai" - elif "Anthropic" in orig_name: - hf_name = "Anthropic" - else: - hf_name = orig_name - - latex_name = ( - f"\href{{https://huggingface.co/{hf_name}}}" # noqa - + f"{{{emoji} {orig_name}}}".replace("_", "\_") # noqa - if orig_name != "random" - else f"{emoji} {orig_name}" - ) - - return latex_name - - reward_model_names = df.apply(lambda x: _prettify_model_name(x), axis=1).to_list() - df.insert(0, "Reward Model", reward_model_names) - df = df.drop(columns=["model", "model_type"]).rename(columns={"average": "Score"}) - if "Pref Sets" in name: - df = df.drop(columns=["Prior Sets (0.5 weight)"]) - # Rotate column names using custom LaTeX command \rot - df = df.rename(columns={col: "\\rot{" + col + "}" for col in df.columns}) - render_string = df.to_latex(index=False, float_format="%.1f").replace("NaN", "-") - else: - render_string = df.to_markdown(index=False, tablefmt="github") - render_string = render_string.replace("NaN", "") - render_string = render_string.replace("nan", "") - print(name) - print(render_string) - - if args.output_dir: - print(f"Saving results to '{args.output_dir}/{name}.csv'") - Path(args.output_dir).mkdir(exist_ok=True, parents=True) - df.to_csv(args.output_dir / f"{name}.csv", index=False) - - -if __name__ == "__main__": - main() diff --git a/analysis/get_dpo_ref_free_results.py b/analysis/get_dpo_ref_free_results.py deleted file mode 100644 index d95294cf..00000000 --- a/analysis/get_dpo_ref_free_results.py +++ /dev/null @@ -1,244 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Script for getting DPO ref free results - -import argparse -import os -from pathlib import Path -from typing import List - -import numpy as np -import pandas as pd -from huggingface_hub import snapshot_download - -from analysis.utils import load_results -from rewardbench.constants import ( - EXAMPLE_COUNTS, - SUBSET_MAPPING, - SUBSET_NAME_TO_PAPER_READY, -) - -LOCAL_DIR = "hf_snapshot_evals" - - -def get_args(): - parser = argparse.ArgumentParser() - # optional arguments - parser.add_argument( - "--hf_evals_repo", - type=str, - default="allenai/reward-bench-results", - help="HuggingFace repository containing the evaluation results.", - ) - parser.add_argument( - "--output_dir", - type=Path, - default=None, - help="Directory to save the results.", - ) - parser.add_argument( - "--render_latex", - action="store_true", - help="If set, then it will render a LaTeX string instead of Markdown.", - ) - parser.add_argument( - "--ignore_columns", - type=lambda x: x.split(",") if x is not None else None, - default=None, - help="Comma-separated column names to exclude from the report.", - ) - args = parser.parse_args() - return args - - -def get_average_over_rewardbench( - df: pd.DataFrame, -) -> pd.DataFrame: - """Get average over a strict subset of reward models""" - new_df = df.copy() - for subset, sub_subsets in SUBSET_MAPPING.items(): - subset_cols = [col for col in new_df.columns if col in sub_subsets] - sub_data = new_df[subset_cols].values # take the relevant column values - sub_counts = [EXAMPLE_COUNTS[s] for s in sub_subsets] # take the example counts - new_df[subset] = np.average(sub_data, axis=1, weights=sub_counts) - - data_cols = list(SUBSET_MAPPING.keys()) - keep_columns = ["model"] + ["model_type"] + data_cols - new_df = new_df[keep_columns] - - # add total average - new_df["average"] = np.nanmean(new_df[data_cols].values, axis=1) - - # make average third column - keep_columns = ["model", "model_type", "average"] + data_cols - new_df = new_df[keep_columns] - return new_df - - -def main(): - args = get_args() - - api_token = os.environ.get("HF_TOKEN") - if not api_token: - raise ValueError("HF_TOKEN not found!") - - print(f"Downloading repository snapshots into '{LOCAL_DIR}' directory") - # Load the remote repository using the HF API - hf_evals_repo = snapshot_download( - local_dir=Path(LOCAL_DIR) / "rewardbench", - repo_id=args.hf_evals_repo, - use_auth_token=api_token, - ignore_patterns=[ - "eval-set/*", - ], - tqdm_class=None, - etag_timeout=30, - repo_type="dataset", - ) - hf_evals_df = load_results( - hf_evals_repo, subdir="eval-set/", ignore_columns=args.ignore_columns, remove_ref_free=False - ) - - # select only the rows where model_type == DPO - df_dpo = hf_evals_df[hf_evals_df["model_type"] == "DPO"] - - # select only the rows where model_type == DPO Ref. Free - df_dpo_ref_free = hf_evals_df[hf_evals_df["model_type"] == "DPO Ref. Free"] - - # if model is the same for any row of ref free, take the first row (its the default method) - df_dpo_ref_free = df_dpo_ref_free.drop_duplicates(subset=["model"], keep="first") - - # drop rows from df_dpo if df_dpo_ref_free doesn't have that model - df_dpo = df_dpo[df_dpo["model"].isin(df_dpo_ref_free["model"])] - - def _multiply_numbered_cols_by(n, df, ignore: List[str] = []): - numbered_cols = df.select_dtypes("number").columns - df[numbered_cols] *= n - return df - - dpo_scaled = _multiply_numbered_cols_by(100, get_average_over_rewardbench(df_dpo)) - ref_free_scaled = _multiply_numbered_cols_by(100, get_average_over_rewardbench(df_dpo_ref_free)) - - # order dpo_scaled and ref_free scaled by the models - dpo_scaled = dpo_scaled.sort_values(by="model") - ref_free_scaled = ref_free_scaled.sort_values(by="model") - - # create copy of the column "average" from ref_free_scaled - ref_free_avg = dpo_scaled["average"].copy() - new_avg = ref_free_scaled["average"].copy() - - # for every model, update ref_free_scaled to be the difference with dpo_scaled - for model in dpo_scaled["model"]: - # iterate over columns and update the values - for col in ref_free_scaled.columns: - if col != "model" and col != "model_type": - ref_free_scaled.loc[ref_free_scaled["model"] == model, col] = ( - ref_free_scaled.loc[ref_free_scaled["model"] == model, col].values[0] - - dpo_scaled.loc[dpo_scaled["model"] == model, col].values[0] - ) - - # rename column "average" to "delta" - ref_free_scaled = ref_free_scaled.rename(columns={"average": "Delta"}) - - # add ref_free_avg back as "Score" - ref_free_scaled["Orig. Score"] = ref_free_avg - - # move Score to be the 3rd column - cols = list(ref_free_scaled.columns) - cols.insert(2, cols.pop(cols.index("Orig. Score"))) - ref_free_scaled = ref_free_scaled.loc[:, cols] - - # add column New Score after Orig. Score from new_avg - ref_free_scaled["New Score"] = new_avg - # move New Score to be the 4th column - cols = list(ref_free_scaled.columns) - cols.insert(3, cols.pop(cols.index("New Score"))) - ref_free_scaled = ref_free_scaled.loc[:, cols] - - # sort by Score (biggest at top) - ref_free_scaled = ref_free_scaled.sort_values(by="Orig. Score", ascending=False) - - # remove model_type column - ref_free_scaled = ref_free_scaled.drop(columns=["model_type"]) - - df = ref_free_scaled.round(1) - # df.insert(0, "", range(1, 1 + len(df))) - - df = df.rename(columns=SUBSET_NAME_TO_PAPER_READY) - - if args.render_latex: - # Define a function to calculate color based on value - def color_for_value(value): - # Example: Map value to a shade of red, assuming Delta ranges from -1 to 1 - # Adjust the color scale according to your specific needs - if np.isnan(value): - return "\\cellcolor{gray!20}" # Gray color for NaN values - else: - intensity = np.abs(value) # Scale the value to [0, 100] - if value > 0: - return f"\\cellcolor{{blue!{intensity:.0f}}}" # Green for positive values - else: - return f"\\cellcolor{{red!{intensity:.0f}}}" # Red for negative values - - # Apply color formatting to the Delta column - def _apply_delta_color(row, key="Delta"): - delta_val = row[key] - colored_delta = color_for_value(delta_val) + f" {delta_val:.1f}" - return colored_delta - - # Assuming 'Delta' is a column in your dataframe - df["Delta"] = df.apply(_apply_delta_color, axis=1) - # apply delta color to Chat Chat Hard Safety and Reasoning too - df["Chat"] = df.apply(_apply_delta_color, args=("Chat",), axis=1) - df["Chat Hard"] = df.apply(_apply_delta_color, args=("Chat Hard",), axis=1) - df["Safety"] = df.apply(_apply_delta_color, args=("Safety",), axis=1) - df["Reasoning"] = df.apply(_apply_delta_color, args=("Reasoning",), axis=1) - - # Prettify: we're using openmojis instead of a model_type column - def _prettify_model_name(row): - orig_name = row["model"] - - latex_name = ( - f"\href{{https://huggingface.co/{orig_name}}}" + f"{{{orig_name}}}".replace("_", "\_") # noqa # noqa - if orig_name != "random" - else f"{orig_name}" - ) - - return latex_name - - reward_model_names = df.apply(lambda x: _prettify_model_name(x), axis=1).to_list() - df.insert(0, "Reward Model", reward_model_names) - df = df.drop( - columns=[ - "model", - ] - ) - render_string = df.to_latex(index=False, float_format="%.1f").replace("NaN", "-") - - else: - render_string = df.to_markdown(index=False, tablefmt="github") - render_string = render_string.replace("NaN", "") - render_string = render_string.replace("nan", "") - - print(render_string) - - if args.output_dir: - print(f"Saving results to '{args.output_dir}/dpo_ref_free.csv'") - Path(args.output_dir).mkdir(exist_ok=True, parents=True) - df.to_csv(args.output_dir / "dpo_ref_free.csv", index=False) - - -if __name__ == "__main__": - main() diff --git a/analysis/get_per_token_reward.py b/analysis/get_per_token_reward.py deleted file mode 100644 index afed4c55..00000000 --- a/analysis/get_per_token_reward.py +++ /dev/null @@ -1,443 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Script to output the per-token reward across a piece of text given a reward model - -import argparse -import hashlib -import json -import logging -import sys -from pathlib import Path -from typing import Any, Dict, List, Optional - -import torch -import transformers -from accelerate import Accelerator -from accelerate.logging import get_logger -from datasets import Dataset -from tqdm import tqdm -from transformers import ( - AutoModelForSequenceClassification, - AutoTokenizer, - T5ForConditionalGeneration, - pipeline, -) - -from rewardbench import models - -REWARD_MODEL_CONFIG = { - "default": { - "model_builder": AutoModelForSequenceClassification.from_pretrained, - "pipeline_builder": pipeline, - "quantized": True, - "custom_dialogue": False, - }, - "oasst": { - "model_builder": AutoModelForSequenceClassification.from_pretrained, - "pipeline_builder": pipeline, - "quantized": True, - "custom_dialogue": False, - "models": [ - "OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1", - "OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5", - "OpenAssistant/reward-model-deberta-v3-base", - "OpenAssistant/reward-model-deberta-v3-large", - "OpenAssistant/reward-model-deberta-v3-large-v2", - "OpenAssistant/reward-model-electra-large-discriminator", - ], - }, - "Starling": { - "model_builder": models.starling.build_starling_rm, - "pipeline_builder": models.starling.StarlingPipeline, - "quantized": False, - "custom_dialogue": False, - "models": [ - "berkeley-nest/Starling-RM-7B-alpha", - ], - }, - "openbmb": { - "model_builder": models.openbmb.LlamaRewardModel.from_pretrained, - "pipeline_builder": models.openbmb.OpenBMBPipeline, - "quantized": True, - "custom_dialogue": False, - "models": ["openbmb/UltraRM-13b"], - }, - "PairRM": { - "model_builder": models.pairrm.DebertaV2Model.from_pretrained, - "pipeline_builder": models.pairrm.PairRMPipeline, - "quantized": True, - "custom_dialogue": True, - "models": [ - "llm-blender/PairRM", - "llm-blender/PairRM-hf", - ], - }, - "BetterPairRM": { - "model_builder": models.betterpairrm.DebertaV2Model.from_pretrained, - "pipeline_builder": models.betterpairrm.PairRMPipeline, - "quantized": True, - "custom_dialogue": True, - "models": [ - "mightbe/Better-PairRM", - ], - }, - "SHP": { - "model_builder": T5ForConditionalGeneration.from_pretrained, - "pipeline_builder": models.shp.SHPPipeline, - "quantized": True, - "custom_dialogue": True, - "models": [ - "stanfordnlp/SteamSHP-flan-t5-large", - "stanfordnlp/SteamSHP-flan-t5-xl", - ], - }, -} - - -def get_args(): - """ - Parse arguments strings model and chat_template - """ - parser = argparse.ArgumentParser() - # positional arguments - parser.add_argument( - "text", - type=str, - help="Text to evaluate.", - ) - # optional arguments - parser.add_argument( - "--model", - type=str, - default="natolambert/gpt2-dummy-rm", - help="Path to the model or HuggingFace link.", - ) - parser.add_argument( - "--tokenizer", - type=str, - default=None, - help="Path to non-matching tokenizer, requires --direct_load.", - ) - parser.add_argument( - "--chat_template", - type=str, - default="tulu", - help="Path to the chat template.", - ) - parser.add_argument( - "--output_dir", - type=Path, - default="per-token-reward", - help="Directory to store the hashes and token information.", - ) - parser.add_argument( - "--batch_size", - type=int, - default=64, - help="Batch size for inference (if above number of tokens).", - ) - parser.add_argument( - "--random_seed", - type=int, - default=None, - help="Random seed for reproducibility.", - ) - args = parser.parse_args() - - # Input validation - def _validate_require_pairwise_inputs(models): - for model in models: - if args.model in model or args.chat_template in model: - raise ValueError(f"{model} require pairwise inputs, not supported") - - _validate_require_pairwise_inputs(models=["PairRM", "SHP"]) - - return args - - -def main(): - args = get_args() - model_name = args.model if args.model in REWARD_MODEL_CONFIG.keys() else "default" - - config = REWARD_MODEL_CONFIG.get(model_name) - - if args.random_seed: - print(f"Setting random seed to {args.random_seed}") - torch.manual_seed(args.random_seed) - - if config["custom_dialogue"]: - raise ValueError("Custom dialogue formatting not yet supported in this script") - - # Setup the accelerate state first before using logging since it errors out - # if you do the other first. - accelerator = Accelerator(cpu=True) - current_device = accelerator.process_index - - # Setup logging - logger = setup_logging(name=__name__) - logger.info(f"Running reward model on {args.model} with chat template {args.chat_template}") - - # Prepare dataset and tokenizer - tokenizer_path = args.tokenizer if args.tokenizer else args.model - print(f"Loading tokenizer from {tokenizer_path}") - tokenizer = AutoTokenizer.from_pretrained(tokenizer_path) - - def _tokenify_string(string): - _tokens = tokenizer.tokenize(string) - cumulative_texts = [tokenizer.convert_tokens_to_string(_tokens[: i + 1]) for i, _ in enumerate(_tokens)] - # Hacky approach. Ideally we can do a str.split(" ") but we want to - # preserve the subword tokenization by the tokenizer. - tokens = [tokenizer.convert_tokens_to_string([t]) for t in _tokens] - return cumulative_texts, tokens - - substrings, tokens = _tokenify_string(args.text) - dataset = Dataset.from_list([{"text": substring} for substring in substrings]) - - # Load reward model pipeline - logger.info("Loading reward model") - reward_pipeline = load_reward_pipeline( - args.model, - config=config, - tokenizer=tokenizer, - process_index=current_device, - ) - reward_pipeline_kwargs = { - "batch_size": args.batch_size, # eval_args.inference_batch_size, - "truncation": True, - "padding": True, - "max_length": 2048, - "function_to_apply": "none", # Compute raw logits - "return_token_type_ids": False, - } - - # Perform inference and get per-token reward - per_token_rewards = get_per_token_reward( - dataset, - reward_pipeline=reward_pipeline, - reward_pipeline_kwargs=reward_pipeline_kwargs, - accelerator=accelerator, - is_custom_pipeline=config["pipeline_builder"] == pipeline, - logger=logger, - dataloader_batch_size=args.batch_size, - ) - - # Report the results - for reward, span in zip(per_token_rewards, substrings): - print(f"Reward: {round(reward, 3)} | Substring: {span}") - - # Save the results - save_results( - output_dir=args.output_dir, - text=args.text, - model=args.model, - chat_template=args.chat_template, - substrings=substrings, - tokens=tokens, - rewards=per_token_rewards, - ) - - -def get_config(model_name: str, default_if_missing: bool = True) -> Dict[str, Any]: - """Get the appropriate loading configuration given a model name - - We only do minimal string matching here, basically checking if a substring, say, - oasst or others exist in REWARD_MODEL_CONFIG.keys(). - - model_name (str): the HuggingFace link or pointer to the model. - default_if_missing (bool): if True, will return the default configuration if - model is missing from our config templates. If False, then it raises - a ValueError. - RETURNS (Dict[str, Any]): the loading configuration for a given model. - """ - for tpl, config in REWARD_MODEL_CONFIG.items(): - available_models = config["models"] - if model_name in available_models: - config = config.pop("models") - print(f"Returning configuration from {tpl}. Config={config}") - return config - - # If model_name is not found anywhere - if default_if_missing: - print("Model {model_name} not found in available models. Returning default configuration") - return REWARD_MODEL_CONFIG.get("default") - else: - raise ValueError(f"Model {model_name} not found in available models!") - - -def setup_logging(name: Optional[str] = None) -> logging.Logger: - """Create a logger""" - logger = get_logger(name or __name__) - logging.basicConfig( - format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", - handlers=[logging.StreamHandler(sys.stdout)], - ) - log_level = logging.INFO - logger.setLevel(log_level) - transformers.utils.logging.set_verbosity(log_level) - transformers.utils.logging.enable_default_handler() - transformers.utils.logging.enable_explicit_format() - return logger - - -def load_reward_pipeline( - model_name: str, - *, - config: Dict[str, Any], - tokenizer: "transformers.PreTrainedTokenizer", - process_index: int, -) -> transformers.Pipeline: - """Load a reward model pipeline given a model configuration and its tokenizer. - - model_name (str): the HuggingFace link or pointer to the model. - config (Dict[str, Any]): the model configuration. - tokenizer (transformers.PreTrainedTokenizer): the tokenizer to use with the model. - process_index (int): the machine to run the process. - RETURNS (transformers.Pipeline) the reward model pipeline - """ - model_kwargs = {"device_map": {"": process_index}} - if config["quantized"]: - model_kwargs.update( - { - "load_in_8bit": True, - "torch_dtype": torch.float16 if torch.cuda.is_available() else None, - } - ) - model_builder = config["model_builder"] - pipeline_builder = config["pipeline_builder"] - if not pipeline == pipeline_builder: - model = model_builder(model_name, **model_kwargs) - reward_pipeline = pipeline_builder( - "text-classification", - model=model, - tokenizer=tokenizer, - ) - else: - reward_pipeline = pipeline( - "text-classification", - model=model_name, - tokenizer=tokenizer, - revision="main", - model_kwargs=model_kwargs, - ) - # Tokenization settings - if reward_pipeline.tokenizer.pad_token_id is None: - reward_pipeline.model.config.pad_token_id = reward_pipeline.tokenizer.eos_token_id - reward_pipeline.tokenizer.pad_token_id = reward_pipeline.tokenizer.eos_token_id - - return reward_pipeline - - -def get_per_token_reward( - dataset: Dataset, - *, - reward_pipeline: "transformers.Pipeline", - reward_pipeline_kwargs: Dict[str, Any], - accelerator: "Accelerator", - is_custom_pipeline: bool, - logger: "logging.Logger", - dataloader_batch_size: int, -) -> List[float]: - """Get the reward per subtoken - - dataset (datasets.Dataset): the HuggingFace dataset to source the text from. - reward_pipeline (transformers.Pipeline): the reward pipeline that will provide the scores. - accelerator (Accelerator): accelerator class for training performance. - is_custom_pipeline (bool): flag to check if we need to run a data loader to collate the results. - logger (logging.Logger): logger class. - dataloader_batch_size (int): control the batch size passed to the data loader. - RETURNS (List[float]): list of computed rewards for each token. - """ - if is_custom_pipeline: - logger.info("Running dataloader to collect results") - dataloader = torch.utils.data.DataLoader( - dataset, - batch_size=dataloader_batch_size, - collate_fn=None, - shuffle=False, - drop_last=False, - ) - dataloader, model = accelerator.prepare(dataloader, reward_pipeline.model) - reward_pipeline.model = model - - results = [] - for step, batch in enumerate(tqdm(dataloader, desc="RM batch steps")): - logger.info(f"RM inference step {step}/{len(dataloader)}") - rewards = reward_pipeline(batch["text"], **reward_pipeline_kwargs) - # Some pipeline implementations return a list of dictionaries, if that's the - # case, we only take the value in the 'score' key. Else, we just return the list. - scores = [r["score"] for r in rewards] if isinstance(rewards[0], dict) else rewards.cpu().numpy().tolist() - results.extend(scores) - else: - logger.info("Running forward pass via built-in pipeline abstraction") - reward_pipeline = accelerator.prepare(reward_pipeline) - results = reward_pipeline(dataset["text"], reward_pipeline_kwargs) - - return results - - -def save_results( - output_dir: Path, - text: str, - model: str, - chat_template: str, - substrings: List[str], - tokens: List[str], - rewards: List[str], -): - """Save results to disk - - This function will first hash the prompt, and then the model with the chat template. - Then, it will save the model result in a JSON file on disk. - - output_dir (Path): directory to save the files. - text (str): the text used to hash. The hashed string will be the name of the subdirectory. - model (str): the name of the model - chat_template (str): the name of the chat template. - tokens (List[str]): the tokens extracted by the reward pipeline's tokenizer. - rewards (List[str]): the rewards computed by the reward pipeline. - """ - # Hash the text first using base16 - text_hash = hashlib.shake_256(text.encode()).hexdigest(5) - text_dir = output_dir / text_hash - text_dir.mkdir(parents=True, exist_ok=True) - - # Hash the model and chat_template combination - MODEL_CHAT_DELIMITER = "___" - model_chat_text = model + MODEL_CHAT_DELIMITER + chat_template - model_chat_hash = hashlib.shake_256(model_chat_text.encode()).hexdigest(5) - - # Output file will be the model_chat_hash - output_file = text_dir / f"{model_chat_hash}.json" - print(f"Saving results to {text_dir}") - - reward_info = { - "text": text, - "text_hash": text_hash, - "model": model, - "chat_template": chat_template, - "model_chat_hash": model_chat_hash, - "substrings": substrings, - "tokens": tokens, - "rewards": rewards, - } - - # Assumes the model output is a pointer to a HuggingFace repository - with open(output_file, "w") as f: - json.dump(reward_info, f, indent=4) - - -if __name__ == "__main__": - main() diff --git a/analysis/get_subtoken_statistics.py b/analysis/get_subtoken_statistics.py deleted file mode 100644 index b70a2cf9..00000000 --- a/analysis/get_subtoken_statistics.py +++ /dev/null @@ -1,164 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import argparse -from pathlib import Path -from typing import Any, Dict - -import numpy as np -import pandas as pd -from datasets import Dataset, load_dataset -from transformers import AutoTokenizer - - -def get_args(): - parser = argparse.ArgumentParser() - # optional arguments - parser.add_argument( - "--tokenizer_name", - type=str, - default="oobabooga/llama-tokenizer", - help="Pointer to the HuggingFace repository to source the tokenizer.", - ) - parser.add_argument( - "--dataset_name", - type=str, - default="allenai/reward-bench", - help="Pointer to the HuggingFace repository that contains the benchmark dataset.", - ) - parser.add_argument( - "--split", - type=str, - default="filtered", - help="Dataset split to use for obtaining the subtoken statistics.", - ) - parser.add_argument( - "--output_dir", - type=Path, - default=None, - help="Directory to save the results.", - ) - parser.add_argument( - "--render_latex", - action="store_true", - help="If set, then it will render a LaTeX string instead of Markdown.", - ) - args = parser.parse_args() - return args - - -def get_dataset_tokens_per_subset( - tokenizer_name: str, - dataset_name: str, - split: str, -) -> Dict[str, Dataset]: - """Get subtokens from a dataset - - Expects that the dataset contains a 'prompt', 'chosen' and 'rejected' - columns. It will then assign the tokenized list in the 'prompt_tokens', - 'chosen_tokens', and 'rejected_tokens', respectively. - """ - tokenizer = AutoTokenizer.from_pretrained(tokenizer_name) - dataset = load_dataset( - dataset_name, - download_mode="force_redownload", - split=split, - ignore_verifications=True, - ) - - subset_names = set(dataset["subset"]) - subsets = {s: dataset.filter(lambda x: x["subset"] == s) for s in subset_names} - - # Tokenize the text/s: some tokenizers like oobabooga adds a '1' padding - # when calling the tokenizer() function directly---that's why we're - # tokenizing it first to str, then calling convert_tokens_to_ids() - def _tokenize(example): - example["prompt_tokens"] = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(example["prompt"])) - example["chosen_tokens"] = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(example["chosen"])) - example["rejected_tokens"] = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(example["rejected"])) - return example - - return {s: d.map(_tokenize) for s, d in subsets.items()} - - -def main(): - args = get_args() - subsets = get_dataset_tokens_per_subset( - tokenizer_name=args.tokenizer_name, - dataset_name=args.dataset_name, - split=args.split, - ) - - # We will always include the prompt when computing the token lengths for the - # chosen and rejected responses - def _get_statistics(dataset: Dataset) -> Dict[str, Any]: - keys = ("chosen_lens", "rejected_lens", "chosen_unique_lens", "rejected_unique_lens") - stats = {k: [] for k in keys} - for eg in dataset: - prompt_tokens = eg.get("prompt_tokens") - chosen_tokens = eg.get("chosen_tokens") - rejected_tokens = eg.get("rejected_tokens") - - stats["chosen_lens"].append(len(prompt_tokens) + len(chosen_tokens)) - stats["rejected_lens"].append(len(prompt_tokens) + len(rejected_tokens)) - # We compute the uniqueness across the whole instruction, NOT individually - stats["chosen_unique_lens"].append(len(set(prompt_tokens + chosen_tokens))) - stats["rejected_unique_lens"].append(len(set(prompt_tokens + rejected_tokens))) - - return stats - - subtoken_statistics = {name: _get_statistics(subset) for name, subset in subsets.items()} - - # Create report table - df = pd.DataFrame( - [ - { - "subset": name, - "Chosen Mean Tokens": np.mean(stats["chosen_lens"]), - "Rejected Mean Tokens": np.mean(stats["rejected_lens"]), - "Chosen Max Tokens": np.max(stats["chosen_lens"]), - "Rejected Max Tokens": np.max(stats["rejected_lens"]), - "Chosen Min Tokens": np.min(stats["chosen_lens"]), - "Rejected Min Tokens": np.min(stats["rejected_lens"]), - "Chosen Mean Unique Tokens": np.mean(stats["chosen_unique_lens"]), - "Rejected Mean Unique Tokens": np.mean(stats["rejected_unique_lens"]), - "Chosen Max Unique Tokens": np.max(stats["chosen_unique_lens"]), - "Rejected Max Unique Tokens": np.max(stats["rejected_unique_lens"]), - "Chosen Min Unique Tokens": np.min(stats["chosen_unique_lens"]), - "Rejected Min Unique Tokens": np.min(stats["rejected_unique_lens"]), - } - for name, stats in subtoken_statistics.items() - ] - ) - - # sort by subset - df = df.sort_values(by="subset") - - render_string = ( - df.round(4).astype(str).to_latex(index=False) - if args.render_latex - else df.to_markdown(index=False, tablefmt="github") - ) - render_string = render_string.replace("NaN", "") - render_string = render_string.replace("nan", "") - print(render_string) - - if args.output_dir: - print(f"Saving results to '{args.output_dir}' directory") - Path(args.output_dir).mkdir(exist_ok=True, parents=True) - df.to_csv(args.output_dir / "subtoken_statistics.csv", index=False) - - -if __name__ == "__main__": - main() diff --git a/analysis/plot_all.sh b/analysis/plot_all.sh deleted file mode 100755 index f33e3d27..00000000 --- a/analysis/plot_all.sh +++ /dev/null @@ -1,12 +0,0 @@ -# Source of rejected/chosen completions -python3 -m analysis.draw_model_histogram source_completion.pdf --log_scale --figsize 8 14 -python3 -m analysis.draw_model_histogram source_completions_rejected_hori.pdf --log_scale --figsize 8 7 --top_n 20 --keys rejected_model -python3 -m analysis.draw_model_histogram source_completions_chosen_hori.pdf --log_scale --figsize 8 7 --top_n 20 --keys chosen_model -# Number of chosen and rejected per subset -python3 -m analysis.draw_subtoken_statistics prompt_length.pdf --figsize 16 10 -# Violin plot of subset score distribution -python3 -m analysis.plot_per_subset_dist -# Plot per model -python3 -m analysis.plot_per_model_dist.py -# Make tables -python3 -m analysis.get_benchmark_results --render_latex diff --git a/analysis/plot_per_model_dist.py b/analysis/plot_per_model_dist.py deleted file mode 100644 index 93728016..00000000 --- a/analysis/plot_per_model_dist.py +++ /dev/null @@ -1,203 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Script for getting per model distributions across reward scores - -import argparse -import os -from pathlib import Path - -import matplotlib.pyplot as plt -from huggingface_hub import snapshot_download - -from analysis.utils import load_scores -from analysis.visualization import AI2_COLORS, PLOT_PARAMS - -plt.rcParams.update(PLOT_PARAMS) - -LOCAL_DIR = "./hf_snapshot_evals/" - - -def get_args(): - parser = argparse.ArgumentParser() - # optional arguments - parser.add_argument( - "--hf_evals_repo", - type=str, - default="allenai/reward-bench-results", - help="HuggingFace repository containing the evaluation results.", - ) - parser.add_argument( - "--output_dir", - type=Path, - default="plots/", - help="Directory to save the results.", - ) - args = parser.parse_args() - return args - - -def main(): - args = get_args() - api_token = os.environ.get("HF_TOKEN") - if not api_token: - raise ValueError("HF_TOKEN not found!") - - print(f"Downloading repository snapshots into '{LOCAL_DIR}' directory") - # Load the remote repository using the HF API - hf_evals_repo = snapshot_download( - local_dir=Path(LOCAL_DIR), - repo_id=args.hf_evals_repo, - ignore_patterns=["pref-sets/*", "eval-set/*"], - use_auth_token=api_token, - tqdm_class=None, - repo_type="dataset", - ) - hf_evals_df = load_scores(hf_evals_repo, subdir="eval-set-scores/") - generate_whisker_plot( - hf_evals_df, - args.output_dir, - model_type="Seq. Classifier", - ncol=3, - height=12, - width=12, - name="score-dist-seq-core", - ) - generate_whisker_plot( - hf_evals_df, - args.output_dir, - model_type="DPO", - ncol=3, - height=16, - width=12, - name="score-dist-dpo-core", - ) - hf_prefs_df = load_scores(hf_evals_repo, subdir="pref-sets-scores/") - generate_whisker_plot( - hf_prefs_df, - args.output_dir, - model_type="Seq. Classifier", - ncol=3, - height=9, - width=12, - name="score-dist-seq-pref", - ) - generate_whisker_plot( - hf_prefs_df, - args.output_dir, - model_type="DPO", - ncol=3, - height=16, - width=12, - name="score-dist-dpo-pref", - ) - - -def generate_whisker_plot(df, output_path, model_type="Seq. Classifier", ncol=None, name=None, height=10, width=18): - # select only the correct model type - df = df[df["model_type"] == model_type] - - # get num_models - models = df["model"].unique() - n_models = len(models) - - # Calculate the number of rows and columns for the subplot grid - if ncol is not None: - ncols = ncol - nrows = int(n_models / ncols) + (n_models % ncols > 0) - else: - nrows = int(n_models**0.5) - ncols = int(n_models / nrows) + (n_models % nrows > 0) - - # Create a single figure and multiple subplots - fig, axs = plt.subplots(nrows, ncols, figsize=(width, height)) - axs = axs.flatten() # Flatten the array to iterate easily if it's 2D - - # Generate plots for each subset - for i, model in enumerate(models): - print(model) - # if subset in ["donotanswer", "hep-cpp"]: - # import ipdb; ipdb.set_trace() - # Filter data for the current subset - subset_data = df[df["model"] == model] - - # take data from scores_chosen and scores_rejected and put into one scores array - data_chosen = subset_data["scores_chosen"].values.tolist() - data_rejected = subset_data["scores_rejected"].values.tolist() - # flatten data if list of lists - if isinstance(data_chosen[0], list): - data_chosen = [item for sublist in data_chosen for item in sublist] - data_rejected = [item for sublist in data_rejected for item in sublist] - - # print(len(data)) - - # for ax[i] draw a histogram of the data - axs[i].hist([data_chosen, data_rejected], bins=20, color=[AI2_COLORS["blue"], AI2_COLORS["orange"]], alpha=0.7) - - # ax title is model name (after /) - axs[i].set_title(model.split("/")[-1]) - - # Adjusting spines and setting ticks visibility - for ax_idx, ax in enumerate(axs): - # Hide the right and top spines - ax.spines["right"].set_visible(False) - ax.spines["top"].set_visible(False) - - # Determine if the subplot is on the bottom row or the leftmost column - # is_bottom = (ax_idx // ncols) == (nrows - 1) or nrows == 1 - is_left = (ax_idx % ncols) == 0 - - # # Only show x-axis labels for bottom row subplots - # ax.tick_params(axis="x", labelbottom=is_bottom) - - # Only show y-axis labels for leftmost column subplots - ax.tick_params(axis="y", labelleft=is_left) - - # global y axis label - fig.text(0.015, 0.5, "Density", va="center", rotation="vertical") - - # global x axis label - fig.text(0.5, 0.015, "Reward Model Score", ha="center") - - bbox_anchor_y = -0.050 if name == "score-dist-seq-pref" else -0.040 - # global legend - fig.legend( - ["Chosen", "Rejected"], - loc="lower center", - frameon=False, - ncols=2, - bbox_to_anchor=(0.5, bbox_anchor_y), - ) - - # Adjust layout and aesthetics - # plt.suptitle("Per subset accuracy distribution", fontsize=16) - plt.tight_layout(rect=[0.02, 0.01, 1, 1]) # Adjust layout to make room for the title - plt.grid(False) - - # Handle any empty subplots - for j in range(i + 1, nrows * ncols): - fig.delaxes(axs[j]) - - # Show and/or save the plot - if output_path: - print(f"Saving figure to {output_path}") - # if output path doesn't exist, make it - if not output_path.exists(): - output_path.mkdir(parents=True, exist_ok=True) - plt.savefig(output_path / (name + ".pdf"), transparent=True, bbox_inches="tight") - plt.show() - - -if __name__ == "__main__": - main() diff --git a/analysis/plot_per_subset_dist.py b/analysis/plot_per_subset_dist.py deleted file mode 100644 index cff7746d..00000000 --- a/analysis/plot_per_subset_dist.py +++ /dev/null @@ -1,180 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Script for getting per subset distributions - -import argparse -import os -from pathlib import Path - -import matplotlib.pyplot as plt -import numpy as np -from huggingface_hub import snapshot_download - -from analysis.utils import load_results -from analysis.visualization import AI2_COLORS, PLOT_PARAMS -from rewardbench.constants import SUBSET_NAME_TO_PAPER_READY - -plt.rcParams.update(PLOT_PARAMS) - -LOCAL_DIR = "./hf_snapshot_evals/" - - -def get_args(): - parser = argparse.ArgumentParser() - # optional arguments - parser.add_argument( - "--hf_evals_repo", - type=str, - default="allenai/reward-bench-results", - help="HuggingFace repository containing the evaluation results.", - ) - parser.add_argument( - "--output_dir", - type=Path, - default="plots/", - help="Directory to save the results.", - ) - args = parser.parse_args() - return args - - -def main(): - args = get_args() - api_token = os.environ.get("HF_TOKEN") - if not api_token: - raise ValueError("HF_TOKEN not found!") - - print(f"Downloading repository snapshots into '{LOCAL_DIR}' directory") - # Load the remote repository using the HF API - hf_evals_repo = snapshot_download( - local_dir=Path(LOCAL_DIR), - repo_id=args.hf_evals_repo, - ignore_patterns=["pref-sets-scores/*", "eval-set-scores/*"], - use_auth_token=api_token, - tqdm_class=None, - repo_type="dataset", - ) - hf_evals_df = load_results(hf_evals_repo, subdir="eval-set/") - hf_prefs_df = load_results(hf_evals_repo, subdir="pref-sets/", ignore_columns=["summarize_prompted"]) - generate_whisker_plot(hf_evals_df, args.output_dir, height=10, width=20, name="dist-core") - generate_whisker_plot(hf_prefs_df, args.output_dir, ncol=3, height=7, width=10, name="dist-pref") - - -def generate_whisker_plot(df, output_path, ncol=None, name=None, height=10, width=18): - # remove the row with random in it from the df - df = df[~df["model"].str.contains("random")] - df = df.rename(columns=SUBSET_NAME_TO_PAPER_READY) - - # Exclude 'model' and 'average' from the subsets - subsets = [col for col in df.columns if col not in ["model", "average", "model_type", "xstest", "anthropic"]] - n_subsets = len(subsets) - - # Calculate the number of rows and columns for the subplot grid - if ncol is not None: - ncols = ncol - nrows = int(n_subsets / ncols) + (n_subsets % ncols > 0) - else: - nrows = int(n_subsets**0.5) - ncols = int(n_subsets / nrows) + (n_subsets % nrows > 0) - - # Create a single figure and multiple subplots - fig, axs = plt.subplots(nrows, ncols, figsize=(width, height)) - axs = axs.flatten() # Flatten the array to iterate easily if it's 2D - - # Generate plots for each subset - for i, subset in enumerate(subsets): - # if subset in ["donotanswer", "hep-cpp"]: - # import ipdb; ipdb.set_trace() - # Filter data for the current subset - subset_data = df[[subset]].values - subset_data = subset_data[~np.isnan(subset_data)] - - # set axis ylim from 0 to 1 - axs[i].set_ylim(0, 1) - - # Generate box and whisker plot in its subplot - # axs[i].boxplot(subset_data.values, vert=True, patch_artist=True) - - def adjacent_values(vals, q1, q3): - iqr = q3 - q1 - upper_whisker = np.max(vals[vals <= q3 + 1.5 * iqr]) - lower_whisker = np.min(vals[vals >= q1 - 1.5 * iqr]) - return lower_whisker, upper_whisker - - # Calculate quartiles - quartile1, medians, quartile3 = np.percentile(subset_data, [25, 50, 75]) - whiskers = np.array(adjacent_values(np.sort(subset_data), quartile1, quartile3)) - - parts = axs[i].violinplot(subset_data, vert=True, showmedians=False, showextrema=False) - - for pc in parts["bodies"]: - pc.set_facecolor(AI2_COLORS.get("light_blue")) - pc.set_alpha(1) - - # Plot median marker - axs[i].scatter(1, medians, marker="o", color="white", s=30, zorder=3) - - # Plot quartiles and whiskers - axs[i].vlines(1, quartile1, quartile3, color="k", linestyle="-", lw=5) - axs[i].vlines(1, whiskers[0], whiskers[1], color="k", linestyle="-", lw=1) - - axs[i].set_title(subset) - - # turn off x-axis labels tick marks - axs[i].set_xticks([]) - - axs[i].set_ylabel("") - axs[i].tick_params(axis="x", which="both", bottom=False, top=False, labelbottom=False) # Remove x-tick labels - - # Adjusting spines and setting ticks visibility - for ax_idx, ax in enumerate(axs): - # Hide the right and top spines - ax.spines["right"].set_visible(False) - ax.spines["top"].set_visible(False) - - # Determine if the subplot is on the bottom row or the leftmost column - is_bottom = (ax_idx // ncols) == (nrows - 1) or nrows == 1 - is_left = (ax_idx % ncols) == 0 - - # Only show x-axis labels for bottom row subplots - ax.tick_params(axis="x", labelbottom=is_bottom) - - # Only show y-axis labels for leftmost column subplots - ax.tick_params(axis="y", labelleft=is_left) - - # global y axis label - fig.text(0.015, 0.5, "Distribution Over Model Accuracies", va="center", rotation="vertical") - - # Adjust layout and aesthetics - # plt.suptitle("Per subset accuracy distribution", fontsize=16) - plt.tight_layout(rect=[0.02, 0.01, 1, 1]) # Adjust layout to make room for the title - plt.grid(False) - - # Handle any empty subplots - for j in range(i + 1, nrows * ncols): - fig.delaxes(axs[j]) - - # Show and/or save the plot - if output_path: - print(f"Saving figure to {output_path}") - # if output path doesn't exist, make it - if not output_path.exists(): - output_path.mkdir(parents=True, exist_ok=True) - plt.savefig(output_path / (name + ".pdf"), transparent=True) - plt.show() - - -if __name__ == "__main__": - main() diff --git a/analysis/run_ensemble_offline.py b/analysis/run_ensemble_offline.py deleted file mode 100644 index 571c7e1a..00000000 --- a/analysis/run_ensemble_offline.py +++ /dev/null @@ -1,173 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Script for aggregating previous scores via ensemble to explore RM ensemble performance - - -import argparse - -import numpy as np -import pandas as pd -from datasets import Dataset -from huggingface_hub import hf_hub_download - -from rewardbench.constants import EXAMPLE_COUNTS, SUBSET_MAPPING -from rewardbench.utils import calculate_scores_per_section - - -def get_args(): - """ - Argparser. Gets the models you wish to analyze primarily. - """ - parser = argparse.ArgumentParser() - parser.add_argument( - "--hf_evals_repo", - type=str, - default="allenai/reward-bench-results", - help="HuggingFace repository containing the evaluation results.", - ) - parser.add_argument("--models", type=str, nargs="+", help="Models to analyze.") - parser.add_argument("--do_not_normalize", action="store_true", default=False, help="Do not normalize the values.") - # mode is ether Mean, Worst, or Uncertainty - parser.add_argument("--mode", type=str, default="Mean", help="Mode of aggregation.") - parser.add_argument("--pref_sets", action="store_true", help="Use preference sets.") - parser.add_argument("--sweep", action="store_true", default=False, help="Sweep over all model options from >3.") - return parser.parse_args() - - -if __name__ == "__main__": - args = get_args() - all_models = args.models - - ######################### - # Setup and Load - ######################### - assert isinstance(all_models, list), "Models must be a list." - assert len(all_models) > 1, "Models must not alone." - - # Assert that modes are valid - assert args.mode in ["Mean", "Worst", "Uncertainty"], "Invalid mode." - - # Load the results for the models - subdir = "eval-set-scores/" if not args.pref_sets else "pref-sets-scores/" - baseline_values = {} - data = {} - - def flatten(data): - # if all rewards is list of list, unnest - if isinstance(data[0], list): - data = [item for sublist in data for item in sublist] - return data - - for m in all_models: - hub_file = subdir + f"{m}.json" - f = hf_hub_download(args.hf_evals_repo, hub_file, repo_type="dataset") - eval_data = pd.read_json(f, orient="records") - - # add baseline values for each model - all_rewards = np.concatenate((eval_data["scores_rejected"].values, eval_data["scores_chosen"])) - all_rewards = flatten(all_rewards) - mean_reward = np.mean(all_rewards) - std_dev_reward = np.std(all_rewards) - baseline_values[m] = {"mean": mean_reward, "std_dev": std_dev_reward} - - data[m] = eval_data - - ######################### - # Normalize - ######################### - if not args.do_not_normalize: - for m in all_models: - data[m]["scores_rejected"] = ( - flatten(data[m]["scores_rejected"]) - baseline_values[m]["mean"] - ) / baseline_values[m]["std_dev"] - data[m]["scores_chosen"] = ( - flatten(data[m]["scores_chosen"]) - baseline_values[m]["mean"] - ) / baseline_values[m]["std_dev"] - - print(f"All models: {all_models}") - all_results = [] - - # check if sweep - if args.sweep: - modes = ["Mean", "Worst", "Uncertainty"] - model_index = 2 - else: - modes = [args.mode] - model_index = len(all_models) - - # iterate over all subsets from length 3 to 6 models - from itertools import combinations - - for mode in modes: - args.mode = mode - for i in range(model_index, len(all_models) + 1): - for models in combinations(all_models, i): - models = list(models) - - print(f"Analyzing models: {models}") - - ######################### - # Calculate ensembles - ######################### - def compute_reward(scores, mode): - if mode == "Mean": - return np.mean(scores) - elif mode == "Worst": - return np.min(scores) - elif mode == "Uncertainty": - return np.mean(scores) - np.std(scores) - - # iterate over ids in the dataframe - ids = data[models[0]]["id"].unique() - out_dataset = {"subsets": [], "results": []} - for id in ids: - scores_chosen = [] - scores_rejected = [] - for m in models: - scores_chosen.append(data[m].loc[data[m]["id"] == id]["scores_chosen"].values[0]) - scores_rejected.append(data[m].loc[data[m]["id"] == id]["scores_rejected"].values[0]) - - ensemble_score_chosen = compute_reward(np.array(scores_chosen), args.mode) - ensemble_score_rejected = compute_reward(np.array(scores_rejected), args.mode) - subset = data[models[0]].loc[data[models[0]]["id"] == id]["subset"].values[0] - out_dataset["subsets"].append(subset) - value = 1 if ensemble_score_chosen > ensemble_score_rejected else 0 - out_dataset["results"].append(value) - - out_dataset = Dataset.from_dict(out_dataset).to_pandas() # I know this is meh - - ######################### - # Save / Share - ######################### - - results_grouped = {} - present_subsets = np.unique(out_dataset["subsets"]) - for subset in present_subsets: - # subset_dataset = out_dataset.filter(lambda example: example["subsets"] == subset) - subset_dataset = out_dataset[out_dataset["subsets"] == subset] - num_correct = sum(subset_dataset["results"]) - num_total = len(subset_dataset["results"]) - # print(f"{subset}: {num_correct}/{num_total} ({num_correct/num_total})") - results_grouped[subset] = num_correct / num_total - - if not args.pref_sets: - results_leaderboard = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, results_grouped) - print(results_leaderboard) - results_leaderboard["models"] = "|".join(models) - results_leaderboard["mode"] = args.mode - all_results.append(results_leaderboard) - - all_results = Dataset.from_list(all_results) - all_results.to_csv("ensemble_results.csv") diff --git a/analysis/utils.py b/analysis/utils.py deleted file mode 100644 index c4e0736b..00000000 --- a/analysis/utils.py +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from pathlib import Path -from typing import List, Optional, Union - -import numpy as np -import pandas as pd -from datasets import load_dataset - - -def load_scores( - repo_dir_path: Union[str, Path], - subdir: str, - # ignore_columns: Optional[List[str]] = None, -) -> pd.DataFrame: - """Load results into a pandas DataFrame""" - base_dir = Path(repo_dir_path) - data_dir = base_dir / subdir - orgs_dir = {d.name: d for d in data_dir.iterdir() if d.is_dir()} - # Get all files within the subfolder orgs - model_result_files = {d: list(path.glob("*.json")) for d, path in orgs_dir.items()} - - _results: List[pd.DataFrame] = [] # will merge later - for org, filepaths in model_result_files.items(): - for filepath in filepaths: - if "nfs.cirrascale" not in str(filepath).split("scores/")[-1]: # ignore internal ai2 data - _results.append(pd.read_json(filepath, orient="records")) - results_df = pd.concat(_results) - return results_df - - -def load_results( - repo_dir_path: Union[str, Path], - subdir: str, - ignore_columns: Optional[List[str]] = None, - filepath_filter: Optional[str] = None, - remove_ref_free: bool = True, -) -> pd.DataFrame: - """Load results into a pandas DataFrame""" - base_dir = Path(repo_dir_path) - data_dir = base_dir / subdir - orgs_dir = {d.name: d for d in data_dir.iterdir() if d.is_dir()} - # Get all files within the subfolder orgs - model_result_files = {d: list(path.glob("*.json")) for d, path in orgs_dir.items()} - - _results: List[pd.DataFrame] = [] # will merge later - for org, filepaths in model_result_files.items(): - for filepath in filepaths: - # optionally filter to only files including a specific string - if filepath_filter is not None: - if filepath_filter not in str(filepath): - continue - _results.append(pd.DataFrame(load_dataset("json", data_files=str(filepath), split="train"))) - results_df = pd.concat(_results) - - # remove internal experiments under org ai2 - results_df = results_df[~results_df["model"].str.contains("ai2")] - - # Cleanup the dataframe for presentation - def _cleanup(df: pd.DataFrame) -> pd.DataFrame: - # remove chat_template comlumn - df = df.drop(columns=["chat_template"]) - - # sort columns alphabetically - df = df.reindex(sorted(df.columns), axis=1) - - # move column "model" to the front - cols = list(df.columns) - cols.insert(0, cols.pop(cols.index("model"))) - df = df.loc[:, cols] - - # select all columns except "model" - cols = df.columns.tolist() - cols.remove("model") - # if model_type is a column (pref tests may not have it) - if "model_type" in cols: - cols.remove("model_type") - # remove model_beaker from dataframe - if "model_beaker" in cols: - cols.remove("model_beaker") - df = df.drop(columns=["model_beaker"]) - - # remove ref_model - if "ref_model" in cols: - cols.remove("ref_model") - df = df.drop(columns=["ref_model"]) - - if "xstest" in cols: - cols.remove("xstest") - df = df.drop(columns=["xstest"]) - - # remove column anthropic and summarize_prompted (outdated data) - if "anthropic" in cols: - df = df.drop(columns=["anthropic"]) - cols.remove("anthropic") - if "summarize_prompted" in cols: - df = df.drop(columns=["summarize_prompted"]) - cols.remove("summarize_prompted") - # remove pku_better and pku_safer (removed from the leaderboard) - if "pku_better" in cols: - df = df.drop(columns=["pku_better"]) - cols.remove("pku_better") - if "pku_safer" in cols: - df = df.drop(columns=["pku_safer"]) - cols.remove("pku_safer") - - # round - df[cols] = df[cols] - avg = np.nanmean(df[cols].values, axis=1) - # add average column - df["average"] = avg - - # move average column to the second - cols = list(df.columns) - cols.insert(1, cols.pop(cols.index("average"))) - df = df.loc[:, cols] - - if "model_type" in cols: - cols = list(df.columns) - cols.insert(1, cols.pop(cols.index("model_type"))) - df = df.loc[:, cols] - - # remove models with DPO Ref. Free as type (future work) - if remove_ref_free: - df = df[~df["model_type"].str.contains("DPO Ref. Free", na=False)] - - # remove columns - if ignore_columns: - # Get columns from df that exist in ignore_columns - _ignore_columns = [col for col in ignore_columns if col in df.columns] - if len(_ignore_columns) > 0: - print(f"Dropping columns: {', '.join(_ignore_columns)}") - df = df.drop(_ignore_columns, axis=1) - - return df - - results_df = _cleanup(results_df) - return results_df diff --git a/analysis/visualization.py b/analysis/visualization.py deleted file mode 100644 index b3176a2e..00000000 --- a/analysis/visualization.py +++ /dev/null @@ -1,462 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Module for visualizing datasets and post-hoc analyses. - -from collections import Counter -from pathlib import Path -from typing import Any, Dict, List, Optional, Tuple - -import datasets -import matplotlib -import matplotlib.font_manager -import matplotlib.pyplot as plt -import numpy as np -import pandas as pd -from datasets import Dataset, load_dataset -from transformers import AutoTokenizer - -from rewardbench.constants import SUBSET_NAME_TO_PAPER_READY - -# From varnish: https://varnish.allenai.org/components/colors -AI2_COLORS = { - "blue": "#265ed4", - "light_blue": "#80bdff", - "orange": "#dd6502", - "light_orange": "#ffd45d", - "red": "#932222", - "light_red": "#ff9f9e", - "aqua": "#054976", - "light_aqua": "#b5f0ff", - "teal": "#078e9e", - "magenta": "#65295d", - "purple": "#5c50a4", - "green": "#005340", -} - -# matplotlib params: use plt.rcParams.update(PLOT_PARAMS) -FONT_SIZES = {"small": 18, "medium": 21, "large": 24} - - -def _get_font() -> Optional[str]: - system_fonts = matplotlib.font_manager.findSystemFonts() - available_fonts = [] - try: - for font in system_fonts: - available_fonts.append(matplotlib.font_manager.get_font(font)) - except Exception: - pass # do nothing, we just want to get the fonts that work. - if "Times New Roman" in available_fonts: - return "Times New Roman" - else: - print("Font 'Times New Roman' not found, trying 'STIX'") - if "STIX" in available_fonts: - return "STIX" - else: - print("Font 'STIX' not found. To install, see: https://www.stixfonts.org/") - print("Will use default fonts") - return None - - -PLOT_PARAMS = { - "font.family": "Times New Roman", - "font.size": FONT_SIZES.get("small"), - "axes.titlesize": FONT_SIZES.get("small"), - "axes.labelsize": FONT_SIZES.get("medium"), - "xtick.labelsize": FONT_SIZES.get("small"), - "ytick.labelsize": FONT_SIZES.get("small"), - "legend.fontsize": FONT_SIZES.get("small"), - "figure.titlesize": FONT_SIZES.get("medium"), -} -if _get_font(): - PLOT_PARAMS["font.family"] = _get_font() -plt.rcParams.update(PLOT_PARAMS) - - -def draw_per_token_reward( - tokens: List[str], - rewards: List[List[float]], - model_names: List[str], - font_size: int = 12, - output_path: Path = None, - figsize: Tuple[int, int] = (12, 12), - line_chart: bool = False, -) -> "matplotlib.axes.Axes": - """Draw a heatmap that combines the rewards - - tokens (List[str]): the canonical tokens that was used as reference during alignment. - rewards (List[List[float]]): list of rewards-per-token for each model. - model_names (List[str]): list of models. - font_size (int): set the font size. - output_path (Optional[Path]): if set, then save the figure in the specified path. - figsize (Tuple[int, int]): control the figure size when plotting. - line_chart (bool): if set, will draw a line chart instead of a figure. - RETURNS (matplotlib.axes.Axes): an Axes class containing the figure. - """ - fig, ax = plt.subplots(figsize=figsize) - rewards = np.array(rewards) - if not line_chart: - im = ax.imshow( - rewards, - cmap="viridis", - vmax=np.max(rewards), - vmin=np.min(rewards), - ) - fig.colorbar(im, ax=ax, orientation="horizontal", aspect=20, location="bottom") - ax.set_xticks(np.arange(len(tokens)), [f'"{token}"' for token in tokens]) - ax.set_yticks(np.arange(len(model_names)), model_names) - - # Add text - avg = np.mean(rewards) - for i in range(len(model_names)): - for j in range(len(tokens)): - color = "k" if rewards[i, j] >= avg else "w" - ax.text(j, i, round(rewards[i, j], 4), ha="center", va="center", color=color) - - # Make it look better - ax.xaxis.tick_top() - ax.tick_params(left=False, top=False) - ax.spines[["right", "top", "left", "bottom"]].set_visible(False) - else: - print("Drawing line chart") - idxs = np.arange(0, len(tokens)) - for model_name, per_token_rewards in zip(model_names, rewards): - ax.plot(idxs, per_token_rewards, label=model_name, marker="x") - - ax.legend(loc="upper left") - ax.set_xticks(np.arange(len(tokens)), [f'"{token}"' for token in tokens]) - ax.set_xlabel("Tokens") - ax.set_ylabel("Reward") - ax.spines[["right", "top"]].set_visible(False) - - # Added information - title = "Cumulative substring rewards" - ax.set_title(title, pad=20) - - # fig.tight_layout() - if not line_chart: - fig.subplots_adjust(left=0.5) - if output_path: - print(f"Saving per-token-reward plot to {output_path}") - plt.savefig(output_path, transparent=True, dpi=120) - - plt.show() - - -def print_model_statistics( - dataset_name: str = "allenai/reward-bench", - keys: List[str] = ["chosen_model", "rejected_model"], - render_latex: bool = False, -): - """Print model counts and statistics into a Markdown/LaTeX table - - dataset_name (str): the HuggingFace dataset name to source the eval dataset. - keys (List[str]): the dataset columns to include in the histogram. - render_latex (bool): if True, render a LaTeX string. - RETURNS (str): a Markdown/LaTeX rendering of a table. - """ - dataset = datasets.load_dataset(dataset_name, split="filtered") - - models = {key: [] for key in keys} - for example in dataset: - for key in keys: - model = example[key] - if model == "unkown": - # Fix: https://huggingface.co/datasets/allenai/reward-bench/discussions/1 - model = "unknown" - models[key].append(model) - counters = [Counter(models) for key, models in models.items()] - - # create another counter which is the sum of all in counters - total_ctr = sum(counters, Counter()) - # create a table with model, total counter, - # and the other counters by keys (0 if not in the sub counter) - total_df = pd.DataFrame(total_ctr.most_common(), columns=["Model", "Total"]) - chosen_ctr, rejected_ctr = counters - chosen_df = pd.DataFrame(chosen_ctr.most_common(), columns=["Model", "chosen_model"]) - rejected_df = pd.DataFrame(rejected_ctr.most_common(), columns=["Model", "rejected_model"]) - # merge these DataFrames into a single value - model_statistics_df = ( - total_df.merge(chosen_df, how="left") - .merge(rejected_df, how="left") - .fillna(0) - .astype({key: int for key in keys}) - ) - - render_string = ( - model_statistics_df.to_latex(index=False) - if render_latex - else model_statistics_df.to_markdown(index=False, tablefmt="github") - ) - print(render_string) - print(f"\nTotal number of models involved: {len(total_ctr) - 2}") - return render_string - - -def draw_model_source_histogram( - dataset_name: str = "allenai/reward-bench", - output_path: Optional[str] = None, - keys: List[str] = ["chosen_model", "rejected_model"], - figsize: Tuple[int, int] = (8, 4), - font_size: int = 15, - normalize: bool = False, - log_scale: bool = False, - include_title: bool = False, - top_n: Optional[int] = None, -) -> "matplotlib.axes.Axes": - """Draw a histogram of the evaluation dataset that shows completion counts between models and humans. - - dataset_name (str): the HuggingFace dataset name to source the eval dataset. - output_path (Optional[Path]): if set, then save the figure in the specified path. - keys (List[str]): the dataset columns to include in the histogram. - figsize (Tuple[int, int]): control the figure size when plotting. - font_size (int): set the font size. - normalize (bool): set to True to normalize the values based on total number completions. - log_scale (bool): set the y-axis to logarithmic scale. - top_n (Optional[int]): if set, then only plot the top-n models in the histogram. - include_title (bool): if set, then will include the title in the chart. - RETURNS (matplotlib.axes.Axes): an Axes class containing the histogram. - """ - dataset = datasets.load_dataset(dataset_name, split="filtered") - - if not all(key in dataset.features for key in keys): - raise ValueError(f"Your dataset has missing keys. Please ensure that {keys} is/are available.") - - models = [] - for example in dataset: - for key in keys: - model = example[key] - if model == "unkown": - # Fix: https://huggingface.co/datasets/allenai/reward-bench/discussions/1 - model = "unknown" - models.append(model) - counter = Counter(models) - - if normalize: - total = sum(counter.values(), 0.0) - for key in counter: - counter[key] /= total - - # Draw the histogram - fig, ax = plt.subplots(figsize=figsize) - labels, values = zip(*counter.most_common()) - - if top_n: - labels = labels[:top_n] - values = values[:top_n] - - indices = list(reversed(np.arange(len(labels)))) - width = 1 - - colors = [AI2_COLORS.get("light_blue"), AI2_COLORS.get("light_aqua")] - ax.barh(indices, values, width, color=colors * (len(indices) // 2 + 1)) - # ax.set_xticks(indices, labels, rotation=90) - ax.set_yticks(indices, labels) - ax.set_xlabel("Frequency") - ax.set_ylabel("Source of completion") - ax.spines.right.set_visible(False) - ax.spines.bottom.set_visible(False) - ax.xaxis.tick_top() - ax.xaxis.set_label_position("top") - # plt.margins(0, 0.05) - plt.margins(0.05, 0) - - title = f"Source of completions ({', '.join([k.replace('_',' ') for k in keys])})" - - if normalize: - ax.set_ylim(top=1.00) - title += " , normalized" - - if log_scale: - ax.set_xscale("log") - title += ", log-scale" - - if top_n: - title += f", showing top-{top_n}" - - if include_title: - ax.set_title(title) - fig.tight_layout() - - if output_path: - print(f"Saving histogram to {output_path}") - plt.savefig(output_path, transparent=True, dpi=120) - - return ax - - -def draw_subtoken_statistics( - category_subsets: Dict[str, List[str]], - output_path: Optional[Path] = None, - dataset_name: str = "allenai/reward-bench", - tokenizer_name: str = "oobabooga/llama-tokenizer", - figsize: Tuple[int, int] = (8, 4), - render_latex: bool = False, -) -> Tuple["matplotlib.axes.Axes", "pd.DataFrame"]: - subsets = get_dataset_tokens_per_subset( - tokenizer_name=tokenizer_name, - dataset_name=dataset_name, - split="filtered", - ) - - # We will always include the prompt when computing the token lengths for the - # chosen and rejected responses - def _get_statistics(dataset: Dataset) -> Dict[str, Any]: - keys = ("chosen_lens", "rejected_lens", "chosen_unique_lens", "rejected_unique_lens") - stats = {k: [] for k in keys} - for eg in dataset: - prompt_tokens = eg.get("prompt_tokens") - chosen_tokens = eg.get("chosen_tokens") - rejected_tokens = eg.get("rejected_tokens") - - stats["chosen_lens"].append(len(prompt_tokens) + len(chosen_tokens)) - stats["rejected_lens"].append(len(prompt_tokens) + len(rejected_tokens)) - # We compute the uniqueness across the whole instruction, NOT individually - stats["chosen_unique_lens"].append(len(set(prompt_tokens + chosen_tokens))) - stats["rejected_unique_lens"].append(len(set(prompt_tokens + rejected_tokens))) - - return stats - - subtoken_statistics = {name: _get_statistics(subset) for name, subset in subsets.items()} - - def _get_category(name: str): - for category, subsets in category_subsets.items(): - if name in subsets: - return category - - # Create report table - df = pd.DataFrame( - [ - { - "category": _get_category(name), - "subset": SUBSET_NAME_TO_PAPER_READY[name], - "chosen_avg": np.mean(stats["chosen_lens"]), - "chosen_max": np.max(stats["chosen_lens"]), - "chosen_min": np.min(stats["chosen_lens"]), - "chosen_std": np.std(stats["chosen_lens"]), - "chosen_unique_avg": np.mean(stats["chosen_unique_lens"]), - "chosen_unique_max": np.max(stats["chosen_unique_lens"]), - "chosen_unique_min": np.min(stats["chosen_unique_lens"]), - "rejected_avg": np.mean(stats["rejected_lens"]), - "rejected_max": np.max(stats["rejected_lens"]), - "rejected_min": np.min(stats["rejected_lens"]), - "rejected_std": np.std(stats["rejected_lens"]), - "rejected_unique_avg": np.mean(stats["rejected_unique_lens"]), - "rejected_unique_max": np.max(stats["rejected_unique_lens"]), - "rejected_unique_min": np.min(stats["rejected_unique_lens"]), - } - for name, stats in subtoken_statistics.items() - ] - ) - - df = df.sort_values(by=["category", "subset"]).reset_index(drop=True) - render_string = ( - df.round(4).astype(str).to_latex(index=False) - if render_latex - else df.to_markdown(index=False, tablefmt="github") - ) - render_string = render_string.replace("NaN", "") - render_string = render_string.replace("nan", "") - print(render_string) - - # Plotting - # n_categories = df["category"].nunique() - # fig, ax = plt.subplots(figsize=figsize) - fig, axs = plt.subplots(2, 2, figsize=figsize) - - axs = np.ravel(axs) - for ax, (category, df) in zip(axs, df.groupby("category")): - labels = df["subset"].to_list() - chosen_avgs = df["chosen_avg"].to_list() - chosen_stds = df["chosen_std"].to_list() - rejected_avgs = df["rejected_avg"].to_list() - rejected_stds = df["rejected_std"].to_list() - indices = list(reversed(np.arange(0, len(labels)))) - # Chosen stats - ax.errorbar( - chosen_avgs, - indices, - xerr=chosen_stds, - color=AI2_COLORS.get("light_blue"), - fmt="o", - elinewidth=2, - capsize=2, - markersize=10, - label="Chosen", - ) - # Rejected stats - ax.errorbar( - rejected_avgs, - indices, - xerr=rejected_stds, - color=AI2_COLORS.get("light_red"), - fmt="o", - markersize=10, - elinewidth=2, - capsize=2, - label="Rejected", - ) - - ax.spines.right.set_visible(False) - ax.spines.top.set_visible(False) - ax.set_yticks(indices, labels) - ax.set_title(category) - ax.set_xlim([0, 1000]) - ax.set_xlabel("Prompt length") - - # Assign everything to last - # axs[2].legend(loc=(1.0, -0.55), frameon=False, ncol=2) - # ax.set_xlabel("Prompt length") - handles, labels = ax.get_legend_handles_labels() - fig.legend(handles, labels, loc="lower center", ncol=2, frameon=False, bbox_to_anchor=(0.5, -0.05)) - - fig.tight_layout() - if output_path: - print(f"Saving to {output_path}") - plt.savefig(output_path, transparent=True, dpi=120, bbox_inches="tight") - - return ax, df - - -def get_dataset_tokens_per_subset( - tokenizer_name: str, - dataset_name: str, - split: str, -) -> Dict[str, Dataset]: - """Get subtokens from a dataset - - Expects that the dataset contains a 'prompt', 'chosen' and 'rejected' - columns. It will then assign the tokenized list in the 'prompt_tokens', - 'chosen_tokens', and 'rejected_tokens', respectively. - """ - tokenizer = AutoTokenizer.from_pretrained(tokenizer_name) - dataset = load_dataset( - dataset_name, - download_mode="force_redownload", - split=split, - ) - - subset_names = set(dataset["subset"]) - subsets = {s: dataset.filter(lambda x: x["subset"] == s) for s in subset_names} - - # Tokenize the text/s: some tokenizers like oobabooga adds a '1' padding - # when calling the tokenizer() function directly---that's why we're - # tokenizing it first to str, then calling convert_tokens_to_ids() - def _tokenize(example): - example["prompt_tokens"] = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(example["prompt"])) - example["chosen_tokens"] = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(example["chosen"])) - example["rejected_tokens"] = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(example["rejected"])) - return example - - return {s: d.map(_tokenize) for s, d in subsets.items()} diff --git a/rewardbench/chattemplates.py b/chattemplates.py similarity index 100% rename from rewardbench/chattemplates.py rename to chattemplates.py diff --git a/rewardbench/constants.py b/constants.py similarity index 100% rename from rewardbench/constants.py rename to constants.py diff --git a/rewardbench/dpo.py b/dpo.py similarity index 100% rename from rewardbench/dpo.py rename to dpo.py diff --git a/rewardbench/generative.py b/generative.py similarity index 100% rename from rewardbench/generative.py rename to generative.py diff --git a/rewardbench/models/README.md b/models/README.md similarity index 100% rename from rewardbench/models/README.md rename to models/README.md diff --git a/rewardbench/models/__init__.py b/models/__init__.py similarity index 100% rename from rewardbench/models/__init__.py rename to models/__init__.py index f9d0b9e7..29c63fee 100644 --- a/rewardbench/models/__init__.py +++ b/models/__init__.py @@ -29,13 +29,13 @@ from .openbmb import LlamaRewardModel, OpenBMBPipeline from .pairrm import DebertaV2PairRM, PairRMPipeline from .shp import SHPPipeline +from .slicpairpm import SlicPairPMPipeline from .starling import ( LlamaForSequenceClassification, StarlingPipeline, build_starling_rm, ) from .ziya import ZiyaPipeline -from .slicpairpm import SlicPairPMPipeline # Please open a PR if you need to add more custom modeling code / utilize existing code for you model REWARD_MODEL_CONFIG = { diff --git a/rewardbench/models/beaver.py b/models/beaver.py similarity index 100% rename from rewardbench/models/beaver.py rename to models/beaver.py diff --git a/rewardbench/models/betterpairrm.py b/models/betterpairrm.py similarity index 100% rename from rewardbench/models/betterpairrm.py rename to models/betterpairrm.py diff --git a/rewardbench/models/openassistant.py b/models/openassistant.py similarity index 100% rename from rewardbench/models/openassistant.py rename to models/openassistant.py diff --git a/rewardbench/models/openbmb.py b/models/openbmb.py similarity index 100% rename from rewardbench/models/openbmb.py rename to models/openbmb.py diff --git a/rewardbench/models/pairrm.py b/models/pairrm.py similarity index 100% rename from rewardbench/models/pairrm.py rename to models/pairrm.py diff --git a/rewardbench/models/shp.py b/models/shp.py similarity index 100% rename from rewardbench/models/shp.py rename to models/shp.py diff --git a/rewardbench/models/slicpairpm.py b/models/slicpairpm.py similarity index 73% rename from rewardbench/models/slicpairpm.py rename to models/slicpairpm.py index 4f37edc7..d412a534 100644 --- a/rewardbench/models/slicpairpm.py +++ b/models/slicpairpm.py @@ -1,20 +1,28 @@ -import torch -from transformers import AutoTokenizer, AutoModelForCausalLM -import numpy as np from typing import List +import numpy as np +import torch +from transformers import AutoTokenizer + class SlicPairPMPipeline: def __init__(self, task, model, tokenizer): - #self.model = AutoModelForCausalLM.from_pretrained(model_path,).cuda() #, attn_implementation="flash_attention_2", torch_dtype=torch.bfloat16 - #self.model.eval() - self.model = model - self.task = task - self.tokenizer = tokenizer - #self.tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=True) - self.tokenizer_data_format = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct", use_fast=True) - self.tokenizer_data_format.chat_template = "\n{% for message in messages %}{% if loop.index0 % 2 == 0 %}\n\n user\n {{ message['content'] }}{% else %}\n\n assistant\n {{ message['content'] }}{% endif %}{% endfor %}\n\n\n" + + # self.model.eval() + self.model = model + self.task = task + self.tokenizer = tokenizer + # self.tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=True) + self.tokenizer_data_format = AutoTokenizer.from_pretrained( + "meta-llama/Meta-Llama-3-8B-Instruct", use_fast=True + ) + x1 = "\n{% for message in messages %}{% if loop.index0 % 2 == 0 %}\n\n user" + x2 = "\n {{ message['content'] }}{% else %}\n\n assistant\n" + x3 = " {{ message['content'] }}{% endif %}{% endfor %}\n\n\n" + my_template = x1 + x2 + x3 + + self.tokenizer_data_format.chat_template = my_template self.prompt_template = "[CONTEXT] {context} [RESPONSE A] {response_A} [RESPONSE B] {response_B} \n" token_id_A = self.tokenizer.encode("A", add_special_tokens=False) @@ -25,14 +33,14 @@ def __init__(self, task, model, tokenizer): self.temperature = 1.0 def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: List[str]): - ''' + """ Input: prompts: [prompt1, prompt2, ..., promptn] candidates_A: [responseA1, responses A2, ..., responseAn] candidates_B: [responseB1, responses B2, ..., responseBn] Output: probs_choose_A: [P(responseA1 > responseB1 | prompt1), ...., P(responseAn > responseBn | promptn)] - ''' + """ assert len(prompts) == len(candidates_A) assert len(candidates_A) == len(candidates_B) probs_choose_A = [] @@ -40,9 +48,9 @@ def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: Li instruction = [{"role": "user", "content": prompts[i]}] context = self.tokenizer_data_format.apply_chat_template(instruction, tokenize=False) responses = [candidates_A[i], candidates_B[i]] - + probs_chosen = [] - + for chosen_position in [0, 1]: # we swap order to mitigate position bias response_A = responses[chosen_position] @@ -52,8 +60,12 @@ def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: Li {"role": "user", "content": prompt}, ] - input_ids = self.tokenizer.encode(self.tokenizer.apply_chat_template(message, tokenize=False).replace(self.tokenizer.bos_token, ""), return_tensors='pt', add_special_tokens=False).cuda() - + input_ids = self.tokenizer.encode( + self.tokenizer.apply_chat_template(message, tokenize=False).replace(self.tokenizer.bos_token, ""), + return_tensors="pt", + add_special_tokens=False, + ).cuda() + with torch.no_grad(): output = self.model(input_ids) logit_A = output.logits[0, -1, self.token_id_A].item() @@ -66,5 +78,3 @@ def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: Li probs_choose_A.append(np.mean(probs_chosen)) # probs_chose_B = 1 - probs_choose_A return probs_choose_A - - diff --git a/rewardbench/models/starling.py b/models/starling.py similarity index 100% rename from rewardbench/models/starling.py rename to models/starling.py diff --git a/rewardbench/models/ziya.py b/models/ziya.py similarity index 100% rename from rewardbench/models/ziya.py rename to models/ziya.py diff --git a/rewardbench.pdf b/rewardbench.pdf deleted file mode 100644 index 0d6d241edb584e5cba6b301beca013c5f34d8fca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 739031 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 z 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

MpeMr)Sb-5*uKeljbE0Hp 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¬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

)|lUx$yd@Xyc{m-JRsEo2< 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%0AcB)m1t}pH6#kWJrF+zU$SU0cR>Ka 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 diff --git a/rewardbench/rewardbench.py b/rewardbench.py similarity index 100% rename from rewardbench/rewardbench.py rename to rewardbench.py diff --git a/scripts/configs/README.md b/scripts/configs/README.md deleted file mode 100644 index 67780ea3..00000000 --- a/scripts/configs/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Configs for experiments - -The following configs are supported: -1. `beaker_eval.yaml`: Config for internal AI tooling to correctly setup compute environment. -2. `eval_configs.yaml`: Configs for models to reproduce results on `run_rm.py`/`run_dpo.py`. -3. [in progress] `training_configs.yaml`: Configs for training reward models. \ No newline at end of file diff --git a/scripts/configs/beaker_eval.yaml b/scripts/configs/beaker_eval.yaml deleted file mode 100644 index ec8969a3..00000000 --- a/scripts/configs/beaker_eval.yaml +++ /dev/null @@ -1,48 +0,0 @@ -version: v2 -description: rewardbench-eval-default -budget: ai2/allennlp -tasks: - - name: rewardbench-eval-default - image: - beaker: - command: [ - '/bin/sh', '-c' - ] - arguments: [ - 'python scripts/run_rm.py - --model - --tokenizer - --chat_template tulu - --batch_size 64 - --direct_load - --do_not_save' - # --use_slow_tokenizer # TODO: may have to use this when training Llama models - ] - envVars: - - name: CUDA_DEVICE_ORDER - value: PCI_BUS_ID - - name: TRANSFORMERS_CACHE - value: ./cache/ - - name: WANDB_PROJECT - value: rewardbench - - name: WANDB_WATCH - value: false - - name: WANDB_LOG_MODEL - value: false - - name: WANDB_DISABLED - value: true - - name: HF_TOKEN - secret: HF_TOKEN - datasets: - - mountPath: /net/nfs.cirrascale - source: - hostPath: /net/nfs.cirrascale - result: - # Beaker will capture anything that's written to this location and store it in the results - # dataset. - path: /output - resources: - gpuCount: 1 - context: - cluster: ai2/general-cirrascale - priority: high \ No newline at end of file diff --git a/scripts/configs/beaker_train.yaml b/scripts/configs/beaker_train.yaml deleted file mode 100644 index d2bdb42e..00000000 --- a/scripts/configs/beaker_train.yaml +++ /dev/null @@ -1,35 +0,0 @@ -version: v2 -description: herm-train -budget: ai2/allennlp -tasks: - - name: herm-train - image: - beaker: - command: [ - '/bin/sh', '-c' - ] - arguments: ['SCRIPT_HERE'] - envVars: - - name: CUDA_DEVICE_ORDER - value: PCI_BUS_ID - - name: TRANSFORMERS_CACHE - value: ./cache/ - - name: WANDB_PROJECT - value: open-instruct - - name: WANDB_WATCH - value: false - - name: WANDB_LOG_MODEL - value: false - - name: WANDB_DISABLED - value: true - datasets: - - mountPath: /net/nfs.cirrascale - source: - hostPath: /net/nfs.cirrascale - result: - path: /output - resources: - gpuCount: 4 - context: - cluster: ai2/allennlp-cirrascale - priority: high \ No newline at end of file diff --git a/scripts/configs/eval_bon_configs.yaml b/scripts/configs/eval_bon_configs.yaml deleted file mode 100644 index f032982d..00000000 --- a/scripts/configs/eval_bon_configs.yaml +++ /dev/null @@ -1,67 +0,0 @@ -# This file contains default evaluation parameters assuming access to a single A100-80GB -openbmb/UltraRM-13b: - model: 'openbmb/UltraRM-13b' - tokenizer: 'openbmb/UltraRM-13b' - chat_template: 'openbmb' - batch_size: 8 - trust_remote_code: False -OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5: - model: 'OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5' - tokenizer: 'OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5' - chat_template: 'oasst_pythia' - batch_size: 64 - trust_remote_code: False -OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1: - model: 'OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1' - tokenizer: 'OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1' - chat_template: 'oasst_pythia' - batch_size: 64 - trust_remote_code: False -OpenAssistant/reward-model-deberta-v3-large-v2: - model: 'OpenAssistant/reward-model-deberta-v3-large-v2' - tokenizer: 'OpenAssistant/reward-model-deberta-v3-large-v2' - chat_template: 'raw' - batch_size: 64 - trust_remote_code: False -weqweasdas/hh_rlhf_rm_open_llama_3b: - model: 'weqweasdas/hh_rlhf_rm_open_llama_3b' - tokenizer: 'weqweasdas/hh_rlhf_rm_open_llama_3b' - chat_template: 'Robin' - batch_size: 64 - trust_remote_code: False -# llm-blender/PairRM-hf: # not yet supported -# model: 'llm-blender/PairRM-hf' -# tokenizer: 'llm-blender/PairRM-hf' -# chat_template: 'tulu' -# batch_size: 64 -# trust_remote_code: False -berkeley-nest/Starling-RM-7B-alpha: - model: 'berkeley-nest/Starling-RM-7B-alpha' - tokenizer: 'meta-llama/Llama-2-7b-chat-hf' - chat_template: 'llama-2' - batch_size: 16 - trust_remote_code: False -# stanfordnlp/SteamSHP-flan-t5-xl: # not yet supported -# model: 'stanfordnlp/SteamSHP-flan-t5-xl' -# tokenizer: 'stanfordnlp/SteamSHP-flan-t5-xl' -# chat_template: 'tulu' -# batch_size: 32 -# trust_remote_code: False -PKU-Alignment/beaver-7b-v1.0-reward: - model: 'PKU-Alignment/beaver-7b-v1.0-reward' - tokenizer: 'PKU-Alignment/beaver-7b-v1.0-reward' - chat_template: 'pku-align' - batch_size: 16 - trust_remote_code: False -PKU-Alignment/beaver-7b-v1.0-cost: - model: 'PKU-Alignment/beaver-7b-v1.0-cost' - tokenizer: 'PKU-Alignment/beaver-7b-v1.0-cost' - chat_template: 'pku-align' - batch_size: 16 - trust_remote_code: False -IDEA-CCNL/Ziya-LLaMA-7B-Reward: - model: 'IDEA-CCNL/Ziya-LLaMA-7B-Reward' - tokenizer: 'IDEA-CCNL/Ziya-LLaMA-7B-Reward' - chat_template: 'Ziya' - batch_size: 32 - trust_remote_code: True \ No newline at end of file diff --git a/scripts/configs/eval_configs.yaml b/scripts/configs/eval_configs.yaml deleted file mode 100644 index fcd8f5d9..00000000 --- a/scripts/configs/eval_configs.yaml +++ /dev/null @@ -1,520 +0,0 @@ -# This file contains default evaluation parameters assuming access to a single A100-80GB -openbmb/UltraRM-13b: - model: 'openbmb/UltraRM-13b' - tokenizer: 'openbmb/UltraRM-13b' - chat_template: 'openbmb' - batch_size: 8 - trust_remote_code: False - dpo: False -OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5: - model: 'OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5' - tokenizer: 'OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5' - chat_template: 'oasst_pythia' - batch_size: 64 - trust_remote_code: False - dpo: False -OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1: - model: 'OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1' - tokenizer: 'OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1' - chat_template: 'oasst_pythia' - batch_size: 16 - trust_remote_code: False - dpo: False -OpenAssistant/reward-model-deberta-v3-large-v2: - model: 'OpenAssistant/reward-model-deberta-v3-large-v2' - tokenizer: 'OpenAssistant/reward-model-deberta-v3-large-v2' - chat_template: 'raw' - batch_size: 64 - trust_remote_code: False - dpo: False -weqweasdas/hh_rlhf_rm_open_llama_3b: - model: 'weqweasdas/hh_rlhf_rm_open_llama_3b' - tokenizer: 'weqweasdas/hh_rlhf_rm_open_llama_3b' - chat_template: 'Robin' - batch_size: 64 - trust_remote_code: False - dpo: False -llm-blender/PairRM-hf: - model: 'llm-blender/PairRM-hf' - tokenizer: 'llm-blender/PairRM-hf' - chat_template: 'tulu' - batch_size: 64 - trust_remote_code: False - dpo: False -mightbe/Better-PairRM: - model: 'mightbe/Better-PairRM' - tokenizer: 'mightbe/Better-PairRM' - chat_template: 'tulu' - batch_size: 64 - max_length: 3370 - trust_remote_code: False - dpo: False -berkeley-nest/Starling-RM-7B-alpha: - model: 'berkeley-nest/Starling-RM-7B-alpha' - tokenizer: 'meta-llama/Llama-2-7b-chat-hf' - chat_template: 'llama-2' - batch_size: 16 - trust_remote_code: False - dpo: False -stanfordnlp/SteamSHP-flan-t5-xl: - model: 'stanfordnlp/SteamSHP-flan-t5-xl' - tokenizer: 'stanfordnlp/SteamSHP-flan-t5-xl' - chat_template: 'tulu' - batch_size: 32 - trust_remote_code: False - dpo: False -stanfordnlp/SteamSHP-flan-t5-large: - model: 'stanfordnlp/SteamSHP-flan-t5-large' - tokenizer: 'stanfordnlp/SteamSHP-flan-t5-large' - chat_template: 'tulu' - batch_size: 32 - trust_remote_code: False - dpo: False -PKU-Alignment/beaver-7b-v1.0-reward: - model: 'PKU-Alignment/beaver-7b-v1.0-reward' - tokenizer: 'PKU-Alignment/beaver-7b-v1.0-reward' - chat_template: 'pku-align' - batch_size: 16 - trust_remote_code: False - dpo: False -PKU-Alignment/beaver-7b-v1.0-cost: - model: 'PKU-Alignment/beaver-7b-v1.0-cost' - tokenizer: 'PKU-Alignment/beaver-7b-v1.0-cost' - chat_template: 'pku-align' - batch_size: 16 - trust_remote_code: False - dpo: False -IDEA-CCNL/Ziya-LLaMA-7B-Reward: - model: 'IDEA-CCNL/Ziya-LLaMA-7B-Reward' - tokenizer: 'IDEA-CCNL/Ziya-LLaMA-7B-Reward' - chat_template: 'Ziya' - batch_size: 16 - trust_remote_code: True - dpo: False -Nexusflow/Starling-RM-34B: - model: 'Nexusflow/Starling-RM-34B' - tokenizer: '01-ai/Yi-34B-Chat' - chat_template: 'Yi-34b-chat' - num_gpus: 2 - batch_size: 2 - trust_remote_code: False - dpo: False -stabilityai/stablelm-zephyr-3b: - ref_model: stabilityai/stablelm-3b-4e1t - tokenizer: stabilityai/stablelm-zephyr-3b - chat_template: - batch_size: 12 - trust_remote_code: False - dpo: True -stabilityai/stablelm-2-zephyr-1_6b: - ref_model: stabilityai/stablelm-2-1_6b - tokenizer: stabilityai/stablelm-2-zephyr-1_6b - chat_template: - batch_size: 6 - trust_remote_code: True - dpo: True -HuggingFaceH4/zephyr-7b-beta: - ref_model: HuggingFaceH4/mistral-7b-sft-beta - tokenizer: HuggingFaceH4/zephyr-7b-beta - chat_template: - batch_size: 4 - trust_remote_code: False - dpo: True -HuggingFaceH4/zephyr-7b-alpha: - ref_model: HuggingFaceH4/mistral-7b-sft-alpha - tokenizer: HuggingFaceH4/zephyr-7b-alpha - chat_template: - batch_size: 4 - trust_remote_code: False - dpo: True -Qwen/Qwen1.5-0.5B-Chat: - ref_model: Qwen/Qwen1.5-0.5B - tokenizer: Qwen/Qwen1.5-0.5B-Chat - chat_template: - batch_size: 6 - trust_remote_code: False - dpo: True -Qwen/Qwen1.5-1.8B-Chat: - ref_model: Qwen/Qwen1.5-1.8B - tokenizer: Qwen/Qwen1.5-1.8B-Chat - chat_template: - batch_size: 3 - trust_remote_code: False - dpo: True -Qwen/Qwen1.5-4B-Chat: - ref_model: Qwen/Qwen1.5-4B - tokenizer: Qwen/Qwen1.5-4B-Chat - chat_template: - batch_size: 2 - trust_remote_code: False - dpo: True -Qwen/Qwen1.5-7B-Chat: - ref_model: Qwen/Qwen1.5-7B - tokenizer: Qwen/Qwen1.5-7B-Chat - chat_template: - batch_size: 2 - trust_remote_code: False - dpo: True -Qwen/Qwen1.5-14B-Chat: - ref_model: Qwen/Qwen1.5-14B - tokenizer: Qwen/Qwen1.5-14B-Chat - chat_template: - batch_size: 2 - num_gpus: 2 - trust_remote_code: False - dpo: True -Qwen/Qwen1.5-72B-Chat: - ref_model: Qwen/Qwen1.5-72B - tokenizer: Qwen/Qwen1.5-72B-Chat - chat_template: - batch_size: 1 - num_gpus: 4 - trust_remote_code: False - dpo: True -mistralai/Mixtral-8x7B-Instruct-v0.1: - ref_model: mistralai/Mixtral-8x7B-v0.1 - tokenizer: mistralai/Mixtral-8x7B-Instruct-v0.1 - chat_template: - batch_size: 1 - num_gpus: 4 - trust_remote_code: False - dpo: True -NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO: - ref_model: NousResearch/Nous-Hermes-2-Mixtral-8x7B-SFT - tokenizer: NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO - chat_template: - batch_size: 1 - num_gpus: 4 - trust_remote_code: True - dpo: True -NousResearch/Nous-Hermes-2-Mistral-7B-DPO: - ref_model: teknium/OpenHermes-2.5-Mistral-7B - tokenizer: NousResearch/Nous-Hermes-2-Mistral-7B-DPO - chat_template: - batch_size: 4 - trust_remote_code: False - dpo: True -HuggingFaceH4/zephyr-7b-gemma-v0.1: - ref_model: HuggingFaceH4/zephyr-7b-gemma-sft-v0.1 - tokenizer: HuggingFaceH4/zephyr-7b-gemma-v0.1 - chat_template: - batch_size: 2 - trust_remote_code: False - dpo: True -allenai/tulu-2-dpo-70b: - ref_model: allenai/tulu-2-70b - tokenizer: allenai/tulu-2-dpo-70b - chat_template: tulu - num_gpus: 4 - batch_size: 2 - trust_remote_code: False - dpo: True -allenai/tulu-2-dpo-13b: - ref_model: allenai/tulu-2-13b - tokenizer: allenai/tulu-2-dpo-13b - chat_template: tulu - num_gpus: 2 - batch_size: 2 - trust_remote_code: False - dpo: True -allenai/tulu-2-dpo-7b: - ref_model: allenai/tulu-2-7b - tokenizer: allenai/tulu-2-dpo-7b - chat_template: tulu - batch_size: 2 - trust_remote_code: False - dpo: True -allenai/OLMo-7B-Instruct: - ref_model: allenai/OLMo-7B-SFT - tokenizer: allenai/OLMo-7B-Instruct - chat_template: - batch_size: 2 - trust_remote_code: True - dpo: True -# Added March 21st 2024 -weqweasdas/RM-Gemma-2B: - model: weqweasdas/RM-Gemma-2B - tokenizer: weqweasdas/RM-Gemma-2B - chat_template: # empty for tokenizer - batch_size: 16 - trust_remote_code: False - dpo: False -weqweasdas/RM-Gemma-7B: - model: weqweasdas/RM-Gemma-7B - tokenizer: weqweasdas/RM-Gemma-7B - chat_template: # empty for tokenizer - batch_size: 16 - trust_remote_code: False - dpo: False -weqweasdas/RM-Gemma-7B-4096: - model: weqweasdas/RM-Gemma-7B-4096 - tokenizer: weqweasdas/RM-Gemma-7B-4096 - chat_template: # empty for tokenizer - batch_size: 16 - trust_remote_code: False - dpo: False -Ray2333/reward-model-Mistral-7B-instruct-Unified-Feedback: - model: Ray2333/reward-model-Mistral-7B-instruct-Unified-Feedback - tokenizer: Ray2333/reward-model-Mistral-7B-instruct-Unified-Feedback - chat_template: # empty for tokenizer - batch_size: 16 - trust_remote_code: False - dpo: False -hendrydong/Mistral-RM-for-RAFT-GSHF-v0: - model: hendrydong/Mistral-RM-for-RAFT-GSHF-v0 - tokenizer: hendrydong/Mistral-RM-for-RAFT-GSHF-v0 - chat_template: # empty for tokenizer - batch_size: 16 - trust_remote_code: False - dpo: False -weqweasdas/RM-Mistral-7B: - model: weqweasdas/RM-Mistral-7B - tokenizer: weqweasdas/RM-Mistral-7B - chat_template: # empty for tokenizer - batch_size: 16 - trust_remote_code: False - dpo: False -# Added March 25th 2024 KTO / Archangel models follow -ContextualAI/archangel_sft-kto_llama7b: - model: ContextualAI/archangel_sft-kto_llama7b - ref_model: ContextualAI/archangel_sft_llama7b - tokenizer: ContextualAI/archangel_sft-kto_llama7b - chat_template: tulu - batch_size: 4 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-dpo_llama7b: - model: ContextualAI/archangel_sft-dpo_llama7b - ref_model: ContextualAI/archangel_sft_llama7b - tokenizer: ContextualAI/archangel_sft-dpo_llama7b - chat_template: tulu - batch_size: 4 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-kto_llama13b: - model: ContextualAI/archangel_sft-kto_llama13b - ref_model: ContextualAI/archangel_sft_llama13b - tokenizer: ContextualAI/archangel_sft-kto_llama13b - chat_template: tulu - batch_size: 2 - num_gpus: 2 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-dpo_llama13b: - model: ContextualAI/archangel_sft-dpo_llama13b - ref_model: ContextualAI/archangel_sft_llama13b - tokenizer: ContextualAI/archangel_sft-dpo_llama13b - chat_template: tulu - batch_size: 2 - num_gpus: 2 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-kto_llama30b: - model: ContextualAI/archangel_sft-kto_llama30b - ref_model: ContextualAI/archangel_sft_llama30b - tokenizer: ContextualAI/archangel_sft-kto_llama30b - chat_template: tulu - batch_size: 1 - num_gpus: 4 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-dpo_llama30b: - model: ContextualAI/archangel_sft-dpo_llama30b - ref_model: ContextualAI/archangel_sft_llama30b - tokenizer: ContextualAI/archangel_sft-dpo_llama30b - chat_template: tulu - batch_size: 1 - num_gpus: 4 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-dpo_pythia1-4b: - model: ContextualAI/archangel_sft-dpo_pythia1-4b - ref_model: ContextualAI/archangel_sft_pythia1-4b - tokenizer: ContextualAI/archangel_sft-dpo_pythia1-4b - chat_template: tulu - batch_size: 6 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-kto_pythia1-4b: - model: ContextualAI/archangel_sft-kto_pythia1-4b - ref_model: ContextualAI/archangel_sft_pythia1-4b - tokenizer: ContextualAI/archangel_sft-kto_pythia1-4b - chat_template: tulu - batch_size: 6 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-dpo_pythia2-8b: - model: ContextualAI/archangel_sft-dpo_pythia2-8b - ref_model: ContextualAI/archangel_sft_pythia2-8b - tokenizer: ContextualAI/archangel_sft-dpo_pythia2-8b - chat_template: tulu - batch_size: 4 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-kto_pythia2-8b: - model: ContextualAI/archangel_sft-kto_pythia2-8b - ref_model: ContextualAI/archangel_sft_pythia2-8b - tokenizer: ContextualAI/archangel_sft-kto_pythia2-8b - chat_template: tulu - batch_size: 4 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-dpo_pythia6-9b: - model: ContextualAI/archangel_sft-dpo_pythia6-9b - ref_model: ContextualAI/archangel_sft_pythia6-9b - tokenizer: ContextualAI/archangel_sft-dpo_pythia6-9b - chat_template: tulu - batch_size: 4 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-kto_pythia6-9b: - model: ContextualAI/archangel_sft-kto_pythia6-9b - ref_model: ContextualAI/archangel_sft_pythia6-9b - tokenizer: ContextualAI/archangel_sft-kto_pythia6-9b - chat_template: tulu - batch_size: 4 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-dpo_pythia12-0b: - model: ContextualAI/archangel_sft-dpo_pythia12-0b - ref_model: ContextualAI/archangel_sft_pythia12-0b - tokenizer: ContextualAI/archangel_sft-dpo_pythia12-0b - chat_template: tulu - batch_size: 4 - num_gpus: 2 - trust_remote_code: False - dpo: True -ContextualAI/archangel_sft-kto_pythia12-0b: - model: ContextualAI/archangel_sft-kto_pythia12-0b - ref_model: ContextualAI/archangel_sft_pythia12-0b - tokenizer: ContextualAI/archangel_sft-kto_pythia12-0b - chat_template: tulu - batch_size: 4 - num_gpus: 2 - trust_remote_code: False - dpo: True -0-hero/Matter-0.1-7B-DPO-preview: - model: 0-hero/Matter-0.1-7B-DPO-preview - ref_model: 0-hero/Matter-0.1-7B - tokenizer: 0-hero/Matter-0.1-7B-DPO-preview - chat_template: # none for tokenizer - batch_size: 4 - trust_remote_code: False - dpo: True -0-hero/Matter-0.1-7B-boost-DPO-preview: - model: 0-hero/Matter-0.1-7B-boost-DPO-preview - ref_model: 0-hero/Matter-0.1-7B-boost - tokenizer: 0-hero/Matter-0.1-7B-boost-DPO-preview - chat_template: # none for tokenizer - batch_size: 4 - trust_remote_code: False - dpo: True -openbmb/Eurus-RM-7b: - model: openbmb/Eurus-RM-7b - tokenizer: openbmb/Eurus-RM-7b - chat_template: mistral - batch_size: 16 - trust_remote_code: True - dpo: False -openbmb/Eurus-7b-kto: - model: openbmb/Eurus-7b-kto - ref_model: openbmb/Eurus-7b-sft - tokenizer: openbmb/Eurus-7b-kto - chat_template: mistral - batch_size: 4 - trust_remote_code: True - dpo: True -Qwen/Qwen1.5-MoE-A2.7B-Chat: - model: Qwen/Qwen1.5-MoE-A2.7B-Chat - ref_model: Qwen/Qwen1.5-MoE-A2.7B - tokenizer: Qwen/Qwen1.5-MoE-A2.7B-Chat - chat_template: # none for tokenizer - num_gpus: 2 - batch_size: 3 - trust_remote_code: False - dpo: True -stabilityai/stable-code-instruct-3b: - model: stabilityai/stable-code-instruct-3b - ref_model: stabilityai/stable-code-3b - tokenizer: stabilityai/stable-code-instruct-3b - chat_template: # none for tokenizer - batch_size: 4 - trust_remote_code: True - dpo: True -HuggingFaceH4/starchat2-15b-v0.1: - model: HuggingFaceH4/starchat2-15b-v0.1 - ref_model: HuggingFaceH4/starchat2-15b-sft-v0.1 - tokenizer: HuggingFaceH4/starchat2-15b-v0.1 - chat_template: # none for tokenizer - batch_size: 4 - num_gpus: 2 - trust_remote_code: False - dpo: True -stabilityai/stablelm-2-12b-chat: - model: stabilityai/stablelm-2-12b-chat - ref_model: stabilityai/stablelm-2-12b - tokenizer: stabilityai/stablelm-2-12b-chat - chat_template: # none for tokenizer - batch_size: 4 - num_gpus: 2 - trust_remote_code: True - dpo: True -upstage/SOLAR-10.7B-Instruct-v1.0: - model: upstage/SOLAR-10.7B-Instruct-v1.0 - ref_model: upstage/SOLAR-10.7B-v1.0 - tokenizer: upstage/SOLAR-10.7B-Instruct-v1.0 - chat_template: # none for tokenizer - batch_size: 4 - num_gpus: 2 - trust_remote_code: False - dpo: True -jondurbin/bagel-dpo-34b-v0.5: - model: jondurbin/bagel-dpo-34b-v0.5 - ref_model: jondurbin/bagel-34b-v0.5 - tokenizer: jondurbin/bagel-dpo-34b-v0.5 - chat_template: # none for tokenizer - batch_size: 2 - num_gpus: 4 - trust_remote_code: False - dpo: True -openbmb/MiniCPM-2B-dpo-fp32: - model: openbmb/MiniCPM-2B-dpo-fp32 - ref_model: openbmb/MiniCPM-2B-sft-fp32 - tokenizer: openbmb/MiniCPM-2B-dpo-fp32 - chat_template: # none for tokenizer - batch_size: 4 - trust_remote_code: True - dpo: True -# Note: way not want to re-run generative models all the time -# meta-llama/Meta-Llama-3-8B-Instruct: -# model: meta-llama/Meta-Llama-3-8B-Instruct -# tokenizer: meta-llama/Meta-Llama-3-8B-Instruct -# chat_template: # none for tokenizer -# trust_remote_code: False -# num_gpus: 1 -# generative: True -# dpo: False -# meta-llama/Meta-Llama-3-70B-Instruct: -# model: meta-llama/Meta-Llama-3-70B-Instruct -# tokenizer: meta-llama/Meta-Llama-3-70B-Instruct -# chat_template: # none for tokenizer -# trust_remote_code: False -# num_gpus: 4 -# generative: True -# dpo: False -# CohereForAI/c4ai-command-r-plus: -# model: CohereForAI/c4ai-command-r-plus -# tokenizer: CohereForAI/c4ai-command-r-plus -# chat_template: # none for tokenizer -# trust_remote_code: False -# num_gpus: 4 -# generative: True -# dpo: False -# End generative reward models -sfairXC/FsfairX-LLaMA3-RM-v0.1: - model: sfairXC/FsfairX-LLaMA3-RM-v0.1 - tokenizer: sfairXC/FsfairX-LLaMA3-RM-v0.1 - chat_template: # none for tokenizer - batch_size: 4 - trust_remote_code: False - dpo: False diff --git a/scripts/configs/stage3_no_offloading.conf b/scripts/configs/stage3_no_offloading.conf deleted file mode 100644 index 532669bf..00000000 --- a/scripts/configs/stage3_no_offloading.conf +++ /dev/null @@ -1,41 +0,0 @@ -{ - "bf16": { - "enabled": "auto" - }, - "optimizer": { - "type": "AdamW", - "params": { - "lr": "auto", - "betas": "auto", - "eps": "auto", - "weight_decay": "auto" - } - }, - "scheduler": { - "type": "WarmupDecayLR", - "params": { - "total_num_steps": "auto", - "warmup_min_lr": "auto", - "warmup_max_lr": "auto", - "warmup_num_steps": "auto" - } - }, - "zero_optimization": { - "stage": 3, - "overlap_comm": true, - "contiguous_gradients": true, - "sub_group_size": 1e9, - "reduce_bucket_size": "auto", - "stage3_prefetch_bucket_size": "auto", - "stage3_param_persistence_threshold": "auto", - "stage3_max_live_parameters": 1e9, - "stage3_max_reuse_distance": 1e9, - "stage3_gather_16bit_weights_on_model_save": true - }, - "gradient_accumulation_steps": "auto", - "gradient_clipping": "auto", - "steps_per_print": 1e5, - "train_batch_size": "auto", - "train_micro_batch_size_per_gpu": "auto", - "wall_clock_breakdown": false -} \ No newline at end of file diff --git a/scripts/configs/train_configs.yaml b/scripts/configs/train_configs.yaml deleted file mode 100644 index 997e5217..00000000 --- a/scripts/configs/train_configs.yaml +++ /dev/null @@ -1,31 +0,0 @@ -# This file contains default training parameters assuming access to A100-80GBs -allenai/tulu-2-7b: - model: 'allenai/tulu-2-7b' - tokenizer: 'allenai/tulu-2-7b' - chat_template: 'tulu' - num_gpus: 4 - total_batch_size: 128 - batch_size_per_gpu: 2 - max_seq_len: 1024 - use_flash_attn: True - bf16: True -meta-llama/Llama-2-7b-chat-hf: - model: 'meta-llama/Llama-2-7b-chat-hf' - tokenizer: 'meta-llama/Llama-2-7b-chat-hf' - chat_template: 'llama-2' - num_gpus: 4 - total_batch_size: 128 - batch_size_per_gpu: 2 - max_seq_len: 1024 - use_flash_attn: True - bf16: True -TinyLlama/TinyLlama-1.1B-Chat-v1.0: - model: 'TinyLlama/TinyLlama-1.1B-Chat-v1.0' - tokenizer: 'TinyLlama/TinyLlama-1.1B-Chat-v1.0' - chat_template: 'llama-2' - num_gpus: 2 - total_batch_size: 128 - batch_size_per_gpu: 16 - max_seq_len: 1024 - use_flash_attn: True - bf16: True \ No newline at end of file diff --git a/scripts/run_bon.py b/scripts/run_bon.py deleted file mode 100644 index cd143d47..00000000 --- a/scripts/run_bon.py +++ /dev/null @@ -1,324 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Runs best of n (BoN) ranking -# TODO: implement this for DPO models - -import argparse -import logging -import os -import sys - -import torch -import transformers -from accelerate import Accelerator -from accelerate.logging import get_logger -from fastchat.conversation import get_conv_template -from tqdm import tqdm -from transformers import AutoTokenizer, pipeline - -from rewardbench import ( - REWARD_MODEL_CONFIG, - check_tokenizer_chat_template, - load_bon_dataset, - save_to_hub, -) - -# get token from HF_TOKEN env variable, but if it doesn't exist pass none -HF_TOKEN = os.getenv("HF_TOKEN", None) -# this is necessary to automatically log in when running this script in docker/batch beaker jobs -if HF_TOKEN is not None: - from huggingface_hub._login import _login - - _login(token=HF_TOKEN, add_to_git_credential=False) - - -def get_args(): - """ - Parse arguments strings model and chat_template - """ - parser = argparse.ArgumentParser() - parser.add_argument("--model", type=str, required=True, help="path to model") - parser.add_argument("--tokenizer", type=str, default=None, help="path to non-matching tokenizer to model") - parser.add_argument("--chat_template", type=str, default="tulu", help="path to chat template") - parser.add_argument( - "--trust_remote_code", action="store_true", default=False, help="directly load model instead of pipeline" - ) - parser.add_argument("--do_not_save", action="store_true", help="do not save results to hub (for debugging)") - parser.add_argument("--batch_size", type=int, default=64, help="batch size for inference") - parser.add_argument("--best_of", type=int, default=16, help="number of best of n to select from") - parser.add_argument( - "--debug", action="store_true", help="run on common preference sets instead of our custom eval set" - ) - args = parser.parse_args() - return args - - -def main(): - args = get_args() - ############### - # Setup logging - ############### - accelerator = Accelerator() - current_device = accelerator.process_index - - logger = get_logger(__name__) - logging.basicConfig( - format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", - handlers=[logging.StreamHandler(sys.stdout)], - ) - log_level = logging.INFO - logger.setLevel(log_level) - transformers.utils.logging.set_verbosity(log_level) - transformers.utils.logging.enable_default_handler() - transformers.utils.logging.enable_explicit_format() - - logger.info(f"Running reward model on {args.model} with chat template {args.chat_template}") - - # load chat template - chat_template = args.chat_template - conv = get_conv_template(chat_template) - - if args.model in REWARD_MODEL_CONFIG: - config = REWARD_MODEL_CONFIG[args.model] - else: - config = REWARD_MODEL_CONFIG["default"] - logger.info(f"Using reward model config: {config}") - if args.trust_remote_code: - logger.info("Loading model with Trust Remote Code") - - # Default entries - # "model_builder": AutoModelForSequenceClassification.from_pretrained, - # "pipeline_builder": pipeline, - # "quantized": True, - # "custom_dialogue": False, - # "model_type": "Seq. Classifier" - - quantized = config["quantized"] # only Starling isn't quantized for now - custom_dialogue = config["custom_dialogue"] - _ = config["model_type"] # todo will be needed to add PairRM and SteamSHP - model_builder = config["model_builder"] - pipeline_builder = config["pipeline_builder"] - - # not included in config to make user explicitly understand they are passing this - trust_remote_code = args.trust_remote_code - - ############################ - # Load dataset - ############################ - logger.info("*** Load dataset ***") - tokenizer_path = args.tokenizer if args.tokenizer else args.model - tokenizer = AutoTokenizer.from_pretrained(tokenizer_path, trust_remote_code=args.trust_remote_code) - dataset = load_bon_dataset( - best_of=args.best_of, - conv=conv, - custom_dialogue_formatting=custom_dialogue, - tokenizer=tokenizer, - logger=logger, - remove_columns=["config", "prompt", "dataset_details", "model_input", "input"], - # remove columns saves spave on GPU when running inference - ) - # copy id for saving, then remove - ids = dataset["id"] - dataset = dataset.remove_columns("id") - - # debug: use only 10 examples - if args.debug: - dataset = dataset.select(range(10)) - ids = ids[:10] - - ############################ - # Load reward model pipeline - ############################ - BATCH_SIZE = args.batch_size - logger.info("*** Load reward model ***") - reward_pipeline_kwargs = { - "batch_size": BATCH_SIZE, # eval_args.inference_batch_size, - "truncation": True, - "padding": True, - "max_length": 2048, - "function_to_apply": "none", # Compute raw logits - "return_token_type_ids": False, - } - if quantized: - model_kwargs = { - "load_in_8bit": True, - "device_map": {"": current_device}, - "torch_dtype": torch.float16 if torch.cuda.is_available() else None, - } - else: - model_kwargs = {"device_map": {"": current_device}} - - model = model_builder(args.model, **model_kwargs, trust_remote_code=trust_remote_code) - reward_pipe = pipeline_builder( - "text-classification", - model=model, - tokenizer=tokenizer, - ) - - ############################ - # Tokenization settings & dataset preparation - ############################ - # set pad token to eos token if not set - if reward_pipe.tokenizer.pad_token_id is None: - reward_pipe.model.config.pad_token_id = reward_pipe.tokenizer.eos_token_id - reward_pipe.tokenizer.pad_token_id = reward_pipe.tokenizer.eos_token_id - # For models whose config did not contains `pad_token_id` - if reward_pipe.model.config.pad_token_id is None: - reward_pipe.model.config.pad_token_id = reward_pipe.tokenizer.pad_token_id - - # if using fastchat template (no template in tokenizer), make the RM tokenizer output an EOS token - if not check_tokenizer_chat_template(tokenizer): - reward_pipe.tokenizer.add_eos_token = True - - ############################ - # Run inference [1/2]" built in transformers - ############################ - # if using HF pipeline, can pass entire dataset and get results - # first, handle custom pipelines that we must batch normally - if pipeline_builder == pipeline: - logger.info("*** Running forward pass via built in pipeline abstraction ***") - # this setup can be optimized slightly with one pipeline call - # prepare for inference - reward_pipe = accelerator.prepare(reward_pipe) - - results = reward_pipe(dataset["text"], **reward_pipeline_kwargs) - - # extract scores from results which is list of dicts, e.g. [{'label': 'LABEL_1', 'score': 0.6826171875},... ] - scores = [r["score"] for r in results] - - ############################ - # Run inference [2/2] custom pipelines - ############################ - else: - logger.info("*** Running dataloader to collect results ***") - # TODO make more custom pipelines work with pre-tokenized data - from torch.utils.data.dataloader import default_collate - - # for PairRM, hmm, will move all of this later - def custom_collate_fn(batch): - # check if ['text_chosen'] is in first batch element - # Check if the first element of the batch is a dictionary - if isinstance(batch[0]["text"][0], dict): - return batch # Return the batch as-is if it's a list of dicts - else: - return default_collate(batch) # Use the default collate behavior otherwise - - dataloader = torch.utils.data.DataLoader( - dataset, - batch_size=BATCH_SIZE, - collate_fn=custom_collate_fn, # if not args.pref_sets else None, - shuffle=False, - drop_last=False, - ) - - dataloader, model = accelerator.prepare(dataloader, reward_pipe.model) - reward_pipe.model = model - - scores = [] - for step, batch in enumerate(tqdm(dataloader, desc="RM batch steps")): - logger.info(f"RM inference step {step}/{len(dataloader)}") - - if "PairRM" in args.model or "SteamSHP" in args.model: - raise NotImplementedError("PairRM and SteamSHP are not yet supported for batched inference") - else: - rewards = reward_pipe(batch["text"], **reward_pipeline_kwargs) - - # for each item in batch, record 1 if chosen > rejected - # extra score from dict within batched results (e.g. logits) - # [{'label': 'LABEL_1', 'score': 0.6826171875},... ] - if isinstance(rewards[0], dict): - scores_batch = [result["score"] for result in rewards] - # for classes that directly output scores (custom code) - else: - scores_batch = rewards.cpu().numpy().tolist() - - scores.extend(scores_batch) - - ############################ - # Print & process results - ############################ - # add column for results for easy printing - out_dataset = dataset.add_column("scores", scores) - - # add subsets back (removed so it's not handled by cuda) - out_dataset = out_dataset.add_column("id", ids) - - # remove columns prompt, text, and config to save space - # will get these from the source dataset when loading - out_dataset = out_dataset.remove_columns("text") - - alpaca_eval = out_dataset.filter(lambda x: x["subset"] == "alpaca_eval") - mt_bench = out_dataset.filter(lambda x: x["subset"] == "mt_bench") - - # remove subset column from both - alpaca_eval = alpaca_eval.remove_columns("subset") - mt_bench = mt_bench.remove_columns("subset") - - # remove model_input - alpaca_eval = alpaca_eval.remove_columns("model_input") - mt_bench = mt_bench.remove_columns("model_input") - - # split into per-model - alpaca_eval_zephyr = alpaca_eval.filter(lambda x: x["model"] == "HuggingFaceH4/zephyr-7b-beta") - alpaca_eval_tulu = alpaca_eval.filter(lambda x: x["model"] == "allenai/tulu-2-dpo-13b") - mt_bench_zephyr = mt_bench.filter(lambda x: x["model"] == "HuggingFaceH4/zephyr-7b-beta") - mt_bench_tulu = mt_bench.filter(lambda x: x["model"] == "allenai/tulu-2-dpo-13b") - - # def flatten and to dict - def flatten_data(dataset): - dictionary = dataset.to_dict() - return [dict(zip(dictionary.keys(), values)) for values in zip(*dictionary.values())] - - ############################ - # Upload results to hub - ############################ - sub_path = "best-of-n/" - results_url = save_to_hub( - flatten_data(alpaca_eval_zephyr), - args.model, - sub_path + "alpaca_eval/zephyr-7b/", - args.debug, - local_only=args.do_not_save, - ) - results_url_2 = save_to_hub( - flatten_data(alpaca_eval_tulu), - args.model, - sub_path + "alpaca_eval/tulu-13b/", - args.debug, - local_only=args.do_not_save, - ) - results_url_3 = save_to_hub( - flatten_data(mt_bench_zephyr), - args.model, - sub_path + "mt_bench/zephyr-7b/", - args.debug, - local_only=args.do_not_save, - ) - results_url_4 = save_to_hub( - flatten_data(mt_bench_tulu), - args.model, - sub_path + "mt_bench/tulu-13/", - args.debug, - local_only=args.do_not_save, - ) - if not args.do_not_save: - logger.info( - f"Uploaded reward model results to {results_url}, {results_url_2}, {results_url_3}, {results_url_4}" - ) - - -if __name__ == "__main__": - main() diff --git a/scripts/run_dpo.py b/scripts/run_dpo.py deleted file mode 100644 index 0cbf554c..00000000 --- a/scripts/run_dpo.py +++ /dev/null @@ -1,290 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import argparse -import logging -import os -import sys - -import numpy as np -import torch -import transformers -from accelerate import Accelerator -from accelerate.logging import get_logger -from fastchat.conversation import get_conv_template -from tqdm import tqdm -from trl.trainer.utils import DPODataCollatorWithPadding - -from rewardbench import DPO_MODEL_CONFIG, DPOInference, load_eval_dataset, save_to_hub -from rewardbench.constants import EXAMPLE_COUNTS, SUBSET_MAPPING -from rewardbench.utils import calculate_scores_per_section - -# get token from HF_TOKEN env variable, but if it doesn't exist pass none -HF_TOKEN = os.getenv("HF_TOKEN", None) -# this is necessary to automatically log in when running this script in docker/batch beaker jobs -if HF_TOKEN is not None: - from huggingface_hub._login import _login - - _login(token=HF_TOKEN, add_to_git_credential=False) - - -def get_args(): - """ - Parse arguments strings model and chat_template - """ - parser = argparse.ArgumentParser() - parser.add_argument("--model", type=str, required=True, help="path to model") - parser.add_argument("--ref_model", type=str, default=None, help="path to model") - parser.add_argument( - "--ref_free_type", type=str, default="avg", help="type of reference free normalization (norm, avg, or sum)" - ) - parser.add_argument("--tokenizer", type=str, default=None, help="path to non-matching tokenizer") - parser.add_argument("--chat_template", type=str, default="tulu", help="path to chat template") - parser.add_argument("--do_not_save", action="store_true", help="do not save results to hub (for debugging)") - parser.add_argument("--batch_size", type=int, default=6, help="batch size for inference") - parser.add_argument( - "--pref_sets", action="store_true", help="run on common preference sets instead of our custom eval set" - ) - parser.add_argument( - "--trust_remote_code", action="store_true", default=False, help="directly load model instead of pipeline" - ) - parser.add_argument("--debug", type=bool, default=False, help="use only 10 examples") - parser.add_argument( - "--disable_beaker_save", action="store_true", help="disable saving the main results in a file for AI2 Beaker" - ) - - args = parser.parse_args() - return args - - -def main(): - args = get_args() - accelerator = Accelerator() - - ############### - # Setup logging - ############### - logger = get_logger(__name__) - logging.basicConfig( - format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", - handlers=[logging.StreamHandler(sys.stdout)], - ) - log_level = logging.INFO - logger.setLevel(log_level) - transformers.utils.logging.set_verbosity(log_level) - transformers.utils.logging.enable_default_handler() - transformers.utils.logging.enable_explicit_format() - - logger.info(f"Running reward model on {args.model} with chat template {args.chat_template}") - if args.trust_remote_code: - logger.info("Loading model with Trust Remote Code") - - if args.model in DPO_MODEL_CONFIG: - config = DPO_MODEL_CONFIG[args.model] - else: - config = DPO_MODEL_CONFIG["default"] - logger.info(f"Using dpo model config: {config}") - - model_builder = config["model_builder"] - tokenizer_builder = config["tokenizer_builder"] - - assert args.model != args.ref_model, "policy and reference model should be different" - # load chat template - chat_template = args.chat_template - conv = get_conv_template(chat_template) - - # define reference free - if args.ref_model is None: - ref_free = True - logger.info("Running reference free DPO - no reference model provided") - else: - ref_free = False - logger.info(f"Running DPO with reference model {args.ref_model}") - - ############################ - # Load dataset - ############################ - logger.info("*** Load dataset ***") - tokenizer_path = args.tokenizer if args.tokenizer else args.model - tokenizer = tokenizer_builder(tokenizer_path, trust_remote_code=args.trust_remote_code) - tokenizer.pad_token = tokenizer.eos_token - # if no BOS token, set as pad token, e.g. QWEN models - if tokenizer.bos_token is None: - tokenizer.bos_token_id = tokenizer.eos_token_id - tokenizer.pad_token_id = tokenizer.eos_token_id - - dataset, subsets = load_eval_dataset( - core_set=not args.pref_sets, - conv=conv, - tokenizer=tokenizer, - logger=logger, - keep_columns=["text_chosen", "text_rejected", "id", "prompt"], - ) - - dataset = dataset.remove_columns("id") - # debug: use only 10 examples - if args.debug: - dataset = dataset.select(range(10)) - subsets = subsets[:10] - - ############################ - # Load reward model pipeline - ############################ - BATCH_SIZE = args.batch_size - - model_kwargs = { - "load_in_8bit": True, - "device_map": "auto", - "torch_dtype": torch.float16 if torch.cuda.is_available() else None, - } - model = model_builder( - args.model, - trust_remote_code=args.trust_remote_code, - **model_kwargs, - ) - - if ref_free: - ref_model = None - else: - model_kwargs_ref = { - "load_in_8bit": True, - "device_map": "auto", - "torch_dtype": torch.float16 if torch.cuda.is_available() else None, - } - ref_model = model_builder( - args.ref_model, - trust_remote_code=args.trust_remote_code, - **model_kwargs_ref, - ) - - # use internal inference functions in DPO trainer - dpo = DPOInference( - model, - ref_model, - tokenizer=tokenizer, - accelerator=accelerator, - ref_free_norm=args.ref_free_type, - # norm is norm, avg is average, sum is sum - ) - # tokenize dataset - column_names = list(dataset.features) - - tokenized_dataset = dataset.map(dpo.tokenize_row, remove_columns=column_names) - dataloader = torch.utils.data.DataLoader( - tokenized_dataset, - batch_size=BATCH_SIZE, - collate_fn=DPODataCollatorWithPadding( - pad_token_id=tokenizer.pad_token_id, - label_pad_token_id=dpo.label_pad_token_id, - is_encoder_decoder=dpo.is_encoder_decoder, - ), - # collate_fn = lambda x: x, # fix weird batching error - shuffle=False, - drop_last=False, - ) - results = [] - scores_chosen = [] - scores_rejected = [] - - for step, batch in enumerate(tqdm(dataloader, desc="RM batch steps")): - logger.info(f"RM inference step {step}/{len(dataloader)}") - - rewards_chosen, rewards_rejected = dpo.inference_step(batch, ref_free=ref_free) - - # for each item in batch, record 1 if chosen > rejected - # extra score from dict within batched results (e.g. logits) - # [{'label': 'LABEL_1', 'score': 0.6826171875},... ] - if isinstance(rewards_chosen[0], dict): - scores_chosen_batch = [result["score"] for result in rewards_chosen] - scores_rejected_batch = [result["score"] for result in rewards_rejected] - # for classes that directly output scores (custom code) - else: - scores_chosen_batch = rewards_chosen.cpu().numpy().tolist() - scores_rejected_batch = rewards_rejected.cpu().numpy().tolist() - - [ - results.append(1) if chosen > rejected else results.append(0) - for chosen, rejected in zip(scores_chosen_batch, scores_rejected_batch) - ] - scores_chosen += scores_chosen_batch - scores_rejected += scores_rejected_batch - - ############################ - # Print & process results - ############################ - # add column for results for easy printing - out_dataset = dataset.add_column("results", results) - - # add subsets back (removed so it's not handled by cuda) - out_dataset = out_dataset.add_column("subset", subsets) - # add scores_chosen and scores_rejected to the dataset - out_dataset = out_dataset.add_column("scores_chosen", scores_chosen) - out_dataset = out_dataset.add_column("scores_rejected", scores_rejected) - - results_grouped = {} - results_grouped["model"] = args.model - results_grouped["ref_model"] = args.ref_model - results_grouped["model_type"] = "DPO" # TODO add options for references free, DPO-ref-free, or DPO-normalized - if ref_free: - results_grouped["model_type"] = "DPO Ref. Free" - save_modifier = "_ref_free" - else: - save_modifier = "" - results_grouped["chat_template"] = args.chat_template if not hasattr(tokenizer, "chat_template") else "tokenizer" - # print per subset and log into results_grouped file - present_subsets = np.unique(subsets) - for subset in present_subsets: - subset_dataset = out_dataset.filter(lambda example: example["subset"] == subset) - num_correct = sum(subset_dataset["results"]) - num_total = len(subset_dataset["results"]) - print(f"{subset}: {num_correct}/{num_total} ({num_correct/num_total})") - results_grouped[subset] = num_correct / num_total - - # log leaderboard aggregated results - if not args.pref_sets: - results_leaderboard = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, results_grouped) - print(results_leaderboard) - - ############################ - # Upload results to hub - ############################ - sub_path = "eval-set/" if not args.pref_sets else "pref-sets/" - results_url = save_to_hub( - results_grouped, - args.model + save_modifier, - sub_path, - args.debug, - local_only=args.do_not_save, - save_metrics_for_beaker=not args.disable_beaker_save, - ) - if not args.do_not_save: - logger.info(f"Uploaded reward model results to {results_url}") - - # upload chosen-rejected with scores - # create new json with scores and upload - scores_dict = out_dataset.to_dict() - scores_dict["model"] = args.model - scores_dict["model_type"] = "DPO" - scores_dict["chat_template"] = args.chat_template - sub_path_scores = "eval-set-scores/" if not args.pref_sets else "pref-sets-scores/" - - scores_url = save_to_hub( - scores_dict, args.model + save_modifier, sub_path_scores, args.debug, local_only=args.do_not_save - ) - logger.info(f"Uploading chosen-rejected text with scores to {scores_url}") - - -if __name__ == "__main__": - main() diff --git a/scripts/run_generative.py b/scripts/run_generative.py deleted file mode 100644 index 770d2c07..00000000 --- a/scripts/run_generative.py +++ /dev/null @@ -1,369 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# run a generative RM. For now, this requires openai and anthropic to be installed -# Examples: -# python scripts/run_generative.py --model gpt-3.5-turbo -# python scripts/run_generative.py --model=claude-3-haiku-20240307 - -# note: for none API models, this script uses vllm -# pip install vllm - -import argparse -import logging -import os -import sys -from concurrent.futures import ThreadPoolExecutor, as_completed - -import numpy as np -from fastchat.conversation import get_conv_template -from transformers import AutoTokenizer -from vllm import LLM, SamplingParams - -from rewardbench import load_eval_dataset, save_to_hub -from rewardbench.constants import EXAMPLE_COUNTS, SUBSET_MAPPING -from rewardbench.generative import ( - ANTHROPIC_MODEL_LIST, - API_MODEL_LIST, - OPENAI_MODEL_LIST, - format_judge_answers, - process_judgement, - run_judge_pair, -) -from rewardbench.utils import calculate_scores_per_section - -# get token from HF_TOKEN env variable, but if it doesn't exist pass none -HF_TOKEN = os.getenv("HF_TOKEN", None) -# this is necessary to automatically log in when running this script in docker/batch beaker jobs -if HF_TOKEN is not None: - from huggingface_hub._login import _login - - _login(token=HF_TOKEN, add_to_git_credential=False) - - -def get_args(): - """ - Parse arguments strings model and chat_template - """ - parser = argparse.ArgumentParser() - parser.add_argument( - "--model", - type=str, - nargs="+", # allow list of models (ensemble) - required=True, - help="name of OpenAI model to use (TODO add more providers/models)", - ) - parser.add_argument("--chat_template", type=str, default="chatgpt", help="path to chat template") - parser.add_argument( - "--trust_remote_code", action="store_true", default=False, help="directly load model instead of pipeline" - ) - parser.add_argument("--num_gpus", type=int, default=1, help="number of gpus to use, for multi-node vllm") - parser.add_argument("--do_not_save", action="store_true", help="do not save results to hub (for debugging)") - parser.add_argument( - "--pref_sets", action="store_true", help="run on common preference sets instead of our custom eval set" - ) - parser.add_argument( - "--debug", action="store_true", help="run on common preference sets instead of our custom eval set" - ) - parser.add_argument( - "--num_threads", type=int, default=10, help="number of threads to use for parallel processing of examples" - ) - parser.add_argument( - "--disable_beaker_save", action="store_true", help="disable saving the main results in a file for AI2 Beaker" - ) - parser.add_argument( - "--force_local", action="store_true", default=False, help="force local run, even if model is on Together API" - ) - args = parser.parse_args() - return args - - -def main(): - args = get_args() - ############### - # Setup logging - ############### - logger = logging.getLogger(__name__) - logging.basicConfig( - format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", - handlers=[logging.StreamHandler(sys.stdout)], - ) - log_level = logging.INFO - logger.setLevel(log_level) - - logger.info(f"Running reward model on {args.model} with chat template {args.chat_template}") - - # load chat template - conv = get_conv_template("raw") # not used - custom_dialogue = True # to mirror other scripts, required here - model_type = "Generative RM" - - # if model is list, make type + PoLL and check multiple is odd - if isinstance(args.model, list): - model_type += " + PoLL" - # assert that is odd and > 1 - assert len(args.model) > 1 and len(args.model) % 2 == 1 - - # define variable if is API or local - is_api_models = isinstance(args.model, list) or args.model in API_MODEL_LIST or not args.force_local - - # if model isn't API, load via vllm - if not is_api_models: - # load model - model = LLM(args.model, trust_remote_code=args.trust_remote_code, tensor_parallel_size=args.num_gpus) - tokenizer = AutoTokenizer.from_pretrained(args.model) - if "Llama-3" in args.model or "llama3-8b" in args.model: - stop_token_ids = [128009] - else: - stop_token_ids = [] - sampling_params = SamplingParams( - n=1, - temperature=0, - top_p=1, - max_tokens=1024, - stop_token_ids=stop_token_ids, - ) - - ############################ - # Load dataset - ############################ - logger.info("*** Load dataset ***") - dataset, subsets = load_eval_dataset( - core_set=not args.pref_sets, - conv=conv, - custom_dialogue_formatting=custom_dialogue, - tokenizer=None, - logger=logger, - keep_columns=["text_chosen", "text_rejected", "id"], - max_turns=4, - ) - - # copy id for saving, then remove - ids = dataset["id"] - dataset = dataset.remove_columns("id") - - # debug: use only 10 examples - if args.debug: - dataset = dataset.select(range(10)) - subsets = subsets[:10] - ids = ids[:10] - - if is_api_models: - ############################ - # Run inference via API - ############################ - def update_progress_bar(done, total): - # Simple text-based progress bar - progress = int(50 * done / total) # Calculate progress (50 chars width) - sys.stdout.write("\r[{}{}] {}/{}".format("#" * progress, "." * (50 - progress), done, total)) - sys.stdout.flush() - - def get_judgement(batch, debug=args.debug): - mult_turn = True if len(batch["text_chosen"]) > 2 else False - prompt = batch["text_chosen"][0]["content"] - answer_a = batch["text_chosen"] - answer_b = batch["text_rejected"] - - # shuffle a and b randomly for position bias - is_shuffled = np.random.rand() > 0.5 - if is_shuffled: - answer_a, answer_b = answer_b, answer_a - winner_text = "B" - loser_text = "A" - else: - winner_text = "A" - loser_text = "B" - - if len(batch["text_chosen"]) <= 4: # set up only for 1 or 2 turns - winner, request, judgement = run_judge_pair( - prompt, answer_a, answer_b, args.model, multi_turn=mult_turn - ) - if debug: - print(f"Prompt: {request}") - print(f"Judgement: {judgement}") - - # handle voting - if isinstance(winner, list): - # print votes if debug - if debug: - print(winner) - winner = max(set(winner), key=winner.count) - - if winner == winner_text: - return 1 - elif winner == loser_text: - return 0 - else: # if "error" - return 0.5 # effectively a tie - else: - return 0.5 - - with ThreadPoolExecutor(max_workers=args.num_threads) as executor: - # Map 'my_function' across the vector, executing in parallel using threads - # results = list(executor.map(get_judgement, dataset)) - - # Progress bar version - results = [None] * len(dataset) # Preallocate results list - done_tasks = 0 # Counter for completed tasks - - with ThreadPoolExecutor(max_workers=args.num_threads) as executor: - # Submit all tasks and hold their futures in a list - future_to_index = {executor.submit(get_judgement, x): i for i, x in enumerate(dataset)} - - # As tasks complete, update progress and store results in the original order - for future in as_completed(future_to_index): - index = future_to_index[future] - results[index] = future.result() - done_tasks += 1 - update_progress_bar(done_tasks, len(dataset)) - - # Print newline after progress bar - print() - else: - ############################ - # Run model weights with vllm - ############################ - - def format_judgements(batch): - # TODO expand this to include fastchat chat templates if needed - mult_turn = True if len(batch["text_chosen"]) > 2 else False - prompt = batch["text_chosen"][0]["content"] - answer_a = batch["text_chosen"] - answer_b = batch["text_rejected"] - - # shuffle a and b randomly for position bias - is_shuffled = np.random.rand() > 0.5 - if is_shuffled: - answer_a, answer_b = answer_b, answer_a - - system_prompt, user_prompt = format_judge_answers(prompt, answer_a, answer_b, multi_turn=mult_turn) - - messages = [ - { - "role": "system", - "content": system_prompt, - }, - {"role": "user", "content": user_prompt}, - ] - prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) - batch["text"] = prompt - batch["is_shuffled"] = is_shuffled - return batch - - # format the dataset for the model - dataset_prompts = dataset.map(format_judgements) - - # collect texts of dataset in list - prompts = dataset_prompts["text"] - is_shuffled = dataset_prompts["is_shuffled"] - - # generate - outputs = model.generate(prompts, sampling_params) - - answers = [o.outputs[0].text for o in outputs] - winners = [process_judgement(a) for a in answers] - - def process_shuffled(win, shuffle): - if shuffle: - winner_text = "B" - loser_text = "A" - else: - winner_text = "A" - loser_text = "B" - - if win == winner_text: - return 1 - elif win == loser_text: - return 0 - else: # if "error" - return 0.5 # effectively a tie - - results = [process_shuffled(w, s) for w, s in zip(winners, is_shuffled)] - - ############################ - # Print & process results - ############################ - # add column for results for easy printing - out_dataset = dataset.add_column("results", results) - - # add subsets back (removed so it's not handled by cuda) - out_dataset = out_dataset.add_column("subset", subsets) - out_dataset = out_dataset.add_column("id", ids) - - # model name concat if list - if isinstance(args.model, list): - model_name = "_".join(args.model) - model_name = "PoLL/" + model_name - else: - model_name = args.model - # if model in openai or Anthropic list, append org to model name - if args.model in OPENAI_MODEL_LIST: - model_name = "openai/" + model_name - if args.model in ANTHROPIC_MODEL_LIST: - model_name = "anthropic/" + model_name - - # get core dataset - results_grouped = {} - results_grouped["model"] = model_name - results_grouped["model_type"] = model_type - results_grouped["chat_template"] = args.chat_template - - # print per subset and log into results_grouped file - present_subsets = np.unique(subsets) - for subset in present_subsets: - subset_dataset = out_dataset.filter(lambda example: example["subset"] == subset) - num_correct = sum(subset_dataset["results"]) - num_total = len(subset_dataset["results"]) - print(f"{subset}: {num_correct}/{num_total} ({num_correct/num_total})") - results_grouped[subset] = num_correct / num_total - - # log leaderboard aggregated results - if not args.pref_sets: - results_leaderboard = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, results_grouped) - print(results_leaderboard) - - ############################ - # Upload results to hub - ############################# - sub_path = "eval-set/" if not args.pref_sets else "pref-sets/" - results_url = save_to_hub( - results_grouped, - model_name, - sub_path, - args.debug, - local_only=args.do_not_save, - save_metrics_for_beaker=not args.disable_beaker_save, - ) - if not args.do_not_save: - logger.info(f"Uploaded reward model results to {results_url}") - - logger.info("Not uploading chosen-rejected text with scores due to model compatibility") - - ############################ - # Save per-prompt results to hub - ############################ - # create new json with scores and upload - scores_dict = out_dataset.to_dict() - scores_dict["model"] = model_name - scores_dict["model_type"] = model_type - - sub_path_scores = "eval-set-scores/" if not args.pref_sets else "pref-sets-scores/" - - scores_url = save_to_hub(scores_dict, model_name, sub_path_scores, args.debug, local_only=args.do_not_save) - logger.info(f"Uploading chosen-rejected text with scores to {scores_url}") - - -if __name__ == "__main__": - main() diff --git a/scripts/run_rm.py b/scripts/run_rm.py deleted file mode 100644 index b2681652..00000000 --- a/scripts/run_rm.py +++ /dev/null @@ -1,347 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import argparse -import logging -import os -import sys - -import numpy as np -import torch -import transformers -from accelerate import Accelerator -from accelerate.logging import get_logger -from fastchat.conversation import get_conv_template -from tqdm import tqdm -from transformers import AutoTokenizer, pipeline - -from rewardbench import ( - REWARD_MODEL_CONFIG, - check_tokenizer_chat_template, - load_eval_dataset, - save_to_hub, -) -from rewardbench.constants import EXAMPLE_COUNTS, SUBSET_MAPPING -from rewardbench.utils import calculate_scores_per_section - -# get token from HF_TOKEN env variable, but if it doesn't exist pass none -HF_TOKEN = os.getenv("HF_TOKEN", None) -# this is necessary to automatically log in when running this script in docker/batch beaker jobs -if HF_TOKEN is not None: - from huggingface_hub._login import _login - - _login(token=HF_TOKEN, add_to_git_credential=False) - - -def get_args(): - """ - Parse arguments strings model and chat_template - """ - parser = argparse.ArgumentParser() - parser.add_argument("--model", type=str, required=True, help="path to model") - parser.add_argument("--tokenizer", type=str, default=None, help="path to non-matching tokenizer to model") - parser.add_argument("--chat_template", type=str, default="tulu", help="path to chat template") - parser.add_argument( - "--trust_remote_code", action="store_true", default=False, help="directly load model instead of pipeline" - ) - parser.add_argument("--do_not_save", action="store_true", help="do not save results to hub (for debugging)") - parser.add_argument("--batch_size", type=int, default=64, help="batch size for inference") - parser.add_argument("--max_length", type=int, default=2048, help="Max length of RM inputs (passed to pipeline)") - parser.add_argument( - "--pref_sets", action="store_true", help="run on common preference sets instead of our custom eval set" - ) - parser.add_argument( - "--debug", action="store_true", help="run on common preference sets instead of our custom eval set" - ) - parser.add_argument( - "--disable_beaker_save", action="store_true", help="disable saving the main results in a file for AI2 Beaker" - ) - args = parser.parse_args() - return args - - -def main(): - args = get_args() - ############### - # Setup logging - ############### - accelerator = Accelerator() - current_device = accelerator.process_index - - logger = get_logger(__name__) - logging.basicConfig( - format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", - datefmt="%Y-%m-%d %H:%M:%S", - handlers=[logging.StreamHandler(sys.stdout)], - ) - log_level = logging.INFO - logger.setLevel(log_level) - transformers.utils.logging.set_verbosity(log_level) - transformers.utils.logging.enable_default_handler() - transformers.utils.logging.enable_explicit_format() - - logger.info(f"Running reward model on {args.model} with chat template {args.chat_template}") - if args.trust_remote_code: - logger.info("Loading model with Trust Remote Code") - - # load chat template - chat_template = args.chat_template - conv = get_conv_template(chat_template) - - if args.model in REWARD_MODEL_CONFIG: - config = REWARD_MODEL_CONFIG[args.model] - else: - config = REWARD_MODEL_CONFIG["default"] - logger.info(f"Using reward model config: {config}") - - # Default entries - # "model_builder": AutoModelForSequenceClassification.from_pretrained, - # "pipeline_builder": pipeline, - # "quantized": True, - # "custom_dialogue": False, - # "model_type": "Seq. Classifier" - - quantized = config["quantized"] # only Starling isn't quantized for now - custom_dialogue = config["custom_dialogue"] - model_type = config["model_type"] - model_builder = config["model_builder"] - pipeline_builder = config["pipeline_builder"] - - # not included in config to make user explicitly understand they are passing this - trust_remote_code = args.trust_remote_code - - ############################ - # Load dataset - ############################ - logger.info("*** Load dataset ***") - tokenizer_path = args.tokenizer if args.tokenizer else args.model - tokenizer = AutoTokenizer.from_pretrained(tokenizer_path, trust_remote_code=args.trust_remote_code) - if not custom_dialogue: # not needed for PairRM / SteamSHP - tokenizer.truncation_side = "left" # copied from Starling, but few samples are above context length - dataset, subsets = load_eval_dataset( - core_set=not args.pref_sets, - conv=conv, - custom_dialogue_formatting=custom_dialogue, - tokenizer=tokenizer, - logger=logger, - keep_columns=["text_chosen", "text_rejected", "id"], - ) - # copy id for saving, then remove - ids = dataset["id"] - dataset = dataset.remove_columns("id") - - # debug: use only 10 examples - if args.debug: - dataset = dataset.select(range(10)) - subsets = subsets[:10] - ids = ids[:10] - - ############################ - # Load reward model pipeline - ############################ - BATCH_SIZE = args.batch_size - logger.info("*** Load reward model ***") - reward_pipeline_kwargs = { - "batch_size": BATCH_SIZE, # eval_args.inference_batch_size, - "truncation": True, - "padding": True, - "max_length": args.max_length, - "function_to_apply": "none", # Compute raw logits - "return_token_type_ids": False, - } - if quantized: - model_kwargs = { - "load_in_8bit": True, - "device_map": {"": current_device}, - "torch_dtype": torch.float16 if torch.cuda.is_available() else None, - } - else: - model_kwargs = {"device_map": {"": current_device}} - - model = model_builder(args.model, **model_kwargs, trust_remote_code=trust_remote_code) - reward_pipe = pipeline_builder( - "text-classification", - model=model, - tokenizer=tokenizer, - ) - - ############################ - # Tokenization settings & dataset preparation - ############################ - # set pad token to eos token if not set - if reward_pipe.tokenizer.pad_token_id is None: - reward_pipe.model.config.pad_token_id = reward_pipe.tokenizer.eos_token_id - reward_pipe.tokenizer.pad_token_id = reward_pipe.tokenizer.eos_token_id - # For models whose config did not contains `pad_token_id` - if reward_pipe.model.config.pad_token_id is None: - reward_pipe.model.config.pad_token_id = reward_pipe.tokenizer.pad_token_id - - # if using fastchat template (no template in tokenizer), make the RM tokenizer output an EOS token - if not check_tokenizer_chat_template(tokenizer): - reward_pipe.tokenizer.add_eos_token = True - - ############################ - # Run inference [1/2]" built in transformers - ############################ - # if using HF pipeline, can pass entire dataset and get results - # first, handle custom pipelines that we must batch normally - if pipeline_builder == pipeline: - logger.info("*** Running forward pass via built in pipeline abstraction ***") - # this setup can be optimized slightly with one pipeline call - # prepare for inference - reward_pipe = accelerator.prepare(reward_pipe) - - results_rej = reward_pipe(dataset["text_rejected"], **reward_pipeline_kwargs) - results_cho = reward_pipe(dataset["text_chosen"], **reward_pipeline_kwargs) - - # extract scores from results which is list of dicts, e.g. [{'label': 'LABEL_1', 'score': 0.6826171875},... ] - scores_chosen = [result["score"] for result in results_cho] - scores_rejected = [result["score"] for result in results_rej] - - # pairwise comparison list comprehension - results = [1 if chosen > rejected else 0 for chosen, rejected in zip(scores_chosen, scores_rejected)] - - ############################ - # Run inference [2/2] custom pipelines - ############################ - else: - logger.info("*** Running dataloader to collect results ***") - # TODO make more custom pipelines work with pre-tokenized data - from torch.utils.data.dataloader import default_collate - - # for PairRM, hmm, will move all of this later - def custom_collate_fn(batch): - # check if ['text_chosen'] is in first batch element - # Check if the first element of the batch is a dictionary - if isinstance(batch[0]["text_chosen"][0], dict): - return batch # Return the batch as-is if it's a list of dicts - else: - return default_collate(batch) # Use the default collate behavior otherwise - - dataloader = torch.utils.data.DataLoader( - dataset, - batch_size=BATCH_SIZE, - collate_fn=custom_collate_fn, # if not args.pref_sets else None, - shuffle=False, - drop_last=False, - ) - - dataloader, model = accelerator.prepare(dataloader, reward_pipe.model) - reward_pipe.model = model - - results = [] - scores_chosen = [] - scores_rejected = [] - for step, batch in enumerate(tqdm(dataloader, desc="RM batch steps")): - logger.info(f"RM inference step {step}/{len(dataloader)}") - - if model_type == "Custom Classifier": - text_rejected = [b["text_rejected"] for b in batch] - text_chosen = [b["text_chosen"] for b in batch] - results_sub = reward_pipe(text_chosen, text_rejected, **reward_pipeline_kwargs) - [results.append(1) if result else results.append(0) for result in results_sub.cpu().numpy().tolist()] - scores_chosen.extend([None] * len(results_sub)) - scores_rejected.extend([None] * len(results_sub)) - else: - rewards_chosen = reward_pipe(batch["text_chosen"], **reward_pipeline_kwargs) - rewards_rejected = reward_pipe(batch["text_rejected"], **reward_pipeline_kwargs) - - # for each item in batch, record 1 if chosen > rejected - # extra score from dict within batched results (e.g. logits) - # [{'label': 'LABEL_1', 'score': 0.6826171875},... ] - if isinstance(rewards_chosen[0], dict): - score_chosen_batch = [result["score"] for result in rewards_chosen] - score_rejected_batch = [result["score"] for result in rewards_rejected] - # for classes that directly output scores (custom code) - else: - score_chosen_batch = rewards_chosen.cpu().numpy().tolist() - score_rejected_batch = rewards_rejected.cpu().numpy().tolist() - - # log results - [ - results.append(1) if chosen > rejected else results.append(0) - for chosen, rejected in zip(score_chosen_batch, score_rejected_batch) - ] - scores_chosen.extend(score_chosen_batch) - scores_rejected.extend(score_rejected_batch) - - ############################ - # Print & process results - ############################ - # add column for results for easy printing - out_dataset = dataset.add_column("results", results) - - # add subsets back (removed so it's not handled by cuda) - out_dataset = out_dataset.add_column("subset", subsets) - out_dataset = out_dataset.add_column("id", ids) - - # add scores_chosen and scores_rejected to the dataset - out_dataset = out_dataset.add_column("scores_chosen", scores_chosen) - out_dataset = out_dataset.add_column("scores_rejected", scores_rejected) - - # get core dataset - results_grouped = {} - results_grouped["model"] = args.model - results_grouped["model_type"] = model_type - results_grouped["chat_template"] = ( - args.chat_template if not check_tokenizer_chat_template(tokenizer) else "tokenizer" - ) - - # print per subset and log into results_grouped file - present_subsets = np.unique(subsets) - for subset in present_subsets: - subset_dataset = out_dataset.filter(lambda example: example["subset"] == subset) - num_correct = sum(subset_dataset["results"]) - num_total = len(subset_dataset["results"]) - print(f"{subset}: {num_correct}/{num_total} ({num_correct/num_total})") - results_grouped[subset] = num_correct / num_total - - # log leaderboard aggregated results - if not args.pref_sets: - results_leaderboard = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, results_grouped) - print(results_leaderboard) - - ############################ - # Upload results to hub - ############################ - sub_path = "eval-set/" if not args.pref_sets else "pref-sets/" - results_url = save_to_hub( - results_grouped, - args.model, - sub_path, - args.debug, - local_only=args.do_not_save, - save_metrics_for_beaker=not args.disable_beaker_save, - ) - if not args.do_not_save: - logger.info(f"Uploaded reward model results to {results_url}") - - # upload chosen-rejected with scores - if not model_type == "Custom Classifier": # custom classifiers do not return scores - # create new json with scores and upload - scores_dict = out_dataset.to_dict() - scores_dict["model"] = args.model - scores_dict["model_type"] = model_type - scores_dict["chat_template"] = args.chat_template - - sub_path_scores = "eval-set-scores/" if not args.pref_sets else "pref-sets-scores/" - - scores_url = save_to_hub(scores_dict, args.model, sub_path_scores, args.debug, local_only=args.do_not_save) - logger.info(f"Uploading chosen-rejected text with scores to {scores_url}") - else: - logger.info("Not uploading chosen-rejected text with scores due to model compatibility") - - -if __name__ == "__main__": - main() diff --git a/scripts/submit_eval_jobs.py b/scripts/submit_eval_jobs.py deleted file mode 100644 index 58b9148c..00000000 --- a/scripts/submit_eval_jobs.py +++ /dev/null @@ -1,166 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import argparse -import copy -import os -import subprocess -from datetime import date - -import yaml - -# Create argparse, for store_true variables of eval_on_pref_sets and eval_on_bon -# String image for Beaker image -# Bool default true for upload_to_hub -argparser = argparse.ArgumentParser() -argparser.add_argument( - "--eval_on_pref_sets", action="store_true", default=False, help="Evaluate on preference sets rather than core set" -) -argparser.add_argument("--eval_on_bon", action="store_true", default=False, help="Evaluate on BON preference sets") -argparser.add_argument("--image", type=str, default="nathanl/rb_v16", help="Beaker image to use") -argparser.add_argument("--cluster", type=str, default="ai2/allennlp-cirrascale", help="Beaker cluster to use") -argparser.add_argument("--priority", type=str, default="high", help="Priority of the job") -argparser.add_argument("--upload_to_hub", action="store_false", default=True, help="Upload to results to HF hub") -argparser.add_argument("--model", type=str, default=None, help="Specific model to evaluate if not sweep") -argparser.add_argument( - "--ref_free", action="store_true", default=False, help="If true, runs DPO models without reference" -) -argparser.add_argument( - "--eval_dpo_only", action="store_true", default=False, help="If true, only evaluates DPO models" -) -argparser.add_argument("--eval_rm_only", action="store_true", default=False, help="If true, only evaluates RM models") -args = argparser.parse_args() - -# assert that only one of eval_dpo_only and eval_rm_only is True at a time -assert not (args.eval_dpo_only and args.eval_rm_only), "Only one of eval_dpo_only and eval_rm_only can be True" - -today = date.today().strftime("%m%d%Y") - -with open("scripts/configs/beaker_eval.yaml", "r") as f: - d1 = yaml.load(f.read(), Loader=yaml.FullLoader) - -cluster = args.cluster - -image = args.image -num_gpus = 1 -upload_to_hub = args.upload_to_hub -eval_on_pref_sets = args.eval_on_pref_sets -eval_on_bon = args.eval_on_bon - -if eval_on_bon: - with open("scripts/configs/eval_bon_configs.yaml", "r") as f: - configs = yaml.load(f.read(), Loader=yaml.FullLoader) -else: - with open("scripts/configs/eval_configs.yaml", "r") as f: - configs = yaml.load(f.read(), Loader=yaml.FullLoader) -print(configs) - - -# assert only one of eval_on_pref_sets and eval_on_bon is True -assert not (eval_on_pref_sets and eval_on_bon), "Only one of eval_on_pref_sets and eval_on_bon can be True" - -d1["tasks"][0]["image"]["beaker"] = image -# d1["tasks"][0]["context"]["cluster"] = cluster -d1["tasks"][0]["context"]["priority"] = args.priority -d1["tasks"][0]["resources"]["gpuCount"] = num_gpus - -# get model from config keys -models_to_evaluate = list(configs.keys()) - -if args.model is not None: - if args.model in models_to_evaluate: - models_to_evaluate = [args.model] - else: - raise ValueError(f"Model {args.model} not found in configs") - -for model in models_to_evaluate: - model_config = configs[model] - eval_dpo = model_config["dpo"] - - # check if generative in model_config - if "generative" in model_config: - if model_config["generative"]: - eval_gen = True - - # ignore models depending on eval_dpo_only and eval_rm_only - if args.eval_dpo_only: - if not eval_dpo: - continue - elif args.eval_rm_only: - if eval_dpo: - continue - - if eval_on_bon: - experiment_group = "rewardebench-bon" - script = "run_bon.py" - elif eval_dpo: - experiment_group = "rewardebench-dpo" - script = "run_dpo.py" - elif eval_gen: - experiment_group = "rewardebench-gen" - script = "run_generative.py" - else: - experiment_group = "rewardebench-seq" - script = "run_rm.py" - - # log experiment name - if eval_on_pref_sets: - experiment_group += "-pref-sets" - - print(f"Submitting evaluation for model: {model} on {experiment_group}") - d = copy.deepcopy(d1) - - name = f"rewardbench_eval_for_{model}_on_{experiment_group}".replace("/", "-") - d["description"] = name - d["tasks"][0]["name"] = name - - if "num_gpus" in model_config: - d["tasks"][0]["resources"]["gpuCount"] = model_config["num_gpus"] - - if not eval_gen: - d["tasks"][0]["arguments"][0] = ( - f"python scripts/{script}" - f" --model {model}" - f" --tokenizer {model_config['tokenizer']}" - f" --batch_size {model_config['batch_size']}" - ) - else: - d["tasks"][0]["arguments"][0] = ( - f"python scripts/{script}" f" --model {model}" f" --num_gpus {model_config['num_gpus']}" - ) - if model_config["chat_template"] is not None: - d["tasks"][0]["arguments"][0] += f" --chat_template {model_config['chat_template']}" - if model_config["trust_remote_code"]: - d["tasks"][0]["arguments"][0] += " --trust_remote_code" - if not upload_to_hub: - d["tasks"][0]["arguments"][0] += " --do_not_save" - if eval_on_pref_sets: - d["tasks"][0]["arguments"][0] += " --pref_sets" - if "ref_model" in model_config: - if not args.ref_free: # if passed, ignore logic in eval configs - d["tasks"][0]["arguments"][0] += f" --ref_model {model_config['ref_model']}" - if "max_length" in model_config: # for `mightbe/Better-PairRM`, but could come up in the future - d["tasks"][0]["arguments"][0] += f" --max_length {model_config['max_length']}" - - # use os to check if beaker_configs/auto_created exists - if not os.path.exists("beaker_configs/auto_created"): - os.makedirs("beaker_configs/auto_created") - - fn = "beaker_configs/auto_created/{}.yaml".format(name) - file = open(fn, "w") - yaml.dump(d, file, default_flow_style=True) - file.close() - - cmd = "beaker experiment create {} --workspace ai2/rewardbench".format(fn) - subprocess.Popen(cmd, shell=True) diff --git a/scripts/submit_train_jobs.py b/scripts/submit_train_jobs.py deleted file mode 100644 index c5dcc3f0..00000000 --- a/scripts/submit_train_jobs.py +++ /dev/null @@ -1,100 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import argparse -import subprocess -from datetime import date - -import yaml - -argparser = argparse.ArgumentParser() -argparser.add_argument("--image", type=str, default="jacobm/rb_train", help="Beaker image to use") -argparser.add_argument("--cluster", type=str, default="ai2/allennlp-cirrascale", help="Beaker cluster to use") -argparser.add_argument("--model", type=str, default=None, help="Specific model to train on top of") -argparser.add_argument("--dataset", type=str, default=None, help="Specific dataset file path for training") -argparser.add_argument("--lr", type=str, default="1e-5", help="Learning rate for training") -argparser.add_argument("--num_epochs", type=str, default="1", help="Number of training epochs") -argparser.add_argument("--seed", type=int, default=123409876, help="Seed for training") -args = argparser.parse_args() - - -today = date.today().strftime("%m%d%Y") - -with open("scripts/configs/beaker_train.yaml", "r") as f: - default_yaml = f.read() -d = yaml.load(default_yaml, Loader=yaml.FullLoader) - -with open("scripts/configs/train_configs.yaml", "r") as f: - configs = yaml.load(f.read(), Loader=yaml.FullLoader) -model_config = configs[args.model] - -# name and description -model_stem = args.model.replace("/", "-") -if ".jsonl" in args.dataset: - dataset_stem = args.dataset.split("/")[-1].replace(".jsonl", "") -else: - dataset_stem = args.dataset -exp_name = f"herm_train-rm_{model_stem}_{dataset_stem}" - -d["description"] = exp_name -d["tasks"][0]["context"]["cluster"] = args.cluster -d["tasks"][0]["context"]["priority"] = "high" -d["tasks"][0]["name"] = exp_name -d["tasks"][0]["image"]["beaker"] = args.image -d["tasks"][0]["resources"]["gpuCount"] = model_config["num_gpus"] - -GRADIENT_ACC_STEPS = int( - model_config["total_batch_size"] / model_config["num_gpus"] / model_config["batch_size_per_gpu"] -) - -optional_configs = "" -if model_config["bf16"]: - optional_configs += " --bf16" -if model_config["use_flash_attn"]: - optional_configs += " --use_flash_attn" - -d["tasks"][0]["arguments"][0] = ( - f"deepspeed --include localhost:{','.join(str(n) for n in range(model_config['num_gpus']))} " - " scripts/train_rm_trainer.py" - " --deepspeed scripts/configs/stage3_no_offloading.conf" - f" --model_name_or_path {args.model}" - f" --tokenizer {model_config['tokenizer']}" - f" --dataset_name {args.dataset}" - f" --max_seq_length {model_config['max_seq_len']}" - " --preprocessing_num_workers 64" - f" --do_train {optional_configs}" - f" --per_device_train_batch_size {model_config['batch_size_per_gpu']}" - f" --gradient_accumulation_steps {GRADIENT_ACC_STEPS}" - f" --learning_rate {args.lr}" - " --lr_scheduler_type linear" - " --warmup_ratio 0.03" - " --weight_decay 0." - " --evaluation_strategy no" - " --logging_steps 1" - " --save_strategy epoch" - f" --seed {args.seed}" - f" --num_train_epochs {args.num_epochs}" - f" --output_dir /output" - " --use_slow_tokenizer" - " --overwrite_output_dir" - " --output_dir /output" -) - -fn = "beaker_configs/auto_created/{}.yaml".format(exp_name) -file = open(fn, "w") -yaml.dump(d, file, default_flow_style=True) -file.close() - -cmd = "beaker experiment create {} --workspace ai2/herm".format(fn) -subprocess.Popen(cmd, shell=True) diff --git a/scripts/train_rm.py b/scripts/train_rm.py deleted file mode 100644 index 787192b5..00000000 --- a/scripts/train_rm.py +++ /dev/null @@ -1,438 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# !/usr/bin/env python -# coding=utf-8 -""" -This file is modified from the huggingface example for finetuning language models -[run_clm.py](https://github.com/huggingface/transformers/blob/main/examples/pytorch/language-modeling/run_clm.py) -""" - -import logging -import os -import sys -import warnings -from dataclasses import dataclass, field -from typing import Any, Dict, List, Optional - -import datasets -import torch -import transformers -from datasets import load_dataset -from fastchat.conversation import Conversation, get_conv_template -from transformers import ( - AutoConfig, - AutoModelForSequenceClassification, - AutoTokenizer, - HfArgumentParser, - LlamaTokenizer, - LlamaTokenizerFast, - TrainingArguments, - set_seed, -) -from transformers.trainer_utils import get_last_checkpoint -from trl import RewardTrainer - -logger = logging.getLogger(__name__) - - -@dataclass -class ModelArguments: - """ - Arguments pertaining to which model/config/tokenizer we are going to fine-tune, or train from scratch. - """ - - model_name_or_path: Optional[str] = field( - default=None, - metadata={ - "help": ( - "The model checkpoint for weights initialization. Don't set if you want to train a model from scratch." - ) - }, - ) - config_name: Optional[str] = field( - default=None, metadata={"help": "Pretrained config name or path if not the same as model_name"} - ) - tokenizer_name: Optional[str] = field( - default=None, metadata={"help": "Pretrained tokenizer name or path if not the same as model_name"} - ) - use_flash_attn: bool = field( - default=False, - metadata={"help": "Whether to use flash attention in the model training"}, - ) - cache_dir: Optional[str] = field( - default=None, - metadata={"help": "Where do you want to store the pretrained models downloaded from huggingface.co"}, - ) - model_revision: str = field( - default="main", - metadata={"help": "The specific model version to use (can be a branch name, tag name or commit id)."}, - ) - token: str = field( - default=None, - metadata={ - "help": ( - "The token to use as HTTP bearer authorization for remote files. If not specified, will use the token " - "generated when running `huggingface-cli login` (stored in `~/.huggingface`)." - ) - }, - ) - use_auth_token: bool = field( - default=None, - metadata={ - "help": "The `use_auth_token` argument is deprecated and will be removed in Transformers v4.34." - " Please use `token`." - }, - ) - trust_remote_code: bool = field( - default=False, - metadata={ - "help": ( - "Whether or not to allow for custom models defined on the Hub in their own modeling files." - " This option should only be set to `True` for repositories you trust and in which you have" - " read the code, as it will execute code present on the Hub on your local machine." - ) - }, - ) - torch_dtype: Optional[str] = field( - default="auto", - metadata={ - "help": ( - "Override the default `torch.dtype` and load the model under this dtype. If `auto` is passed, the " - "dtype will be automatically derived from the model's weights." - ), - "choices": ["auto", "bfloat16", "float16", "float32"], - }, - ) - low_cpu_mem_usage: bool = field( - default=False, - metadata={ - "help": ( - "It is an option to create the model as an empty shell, then only materialize its" - + " parameters when the pretrained weights are loaded. set True will benefit LLM" - + " loading time and RAM consumption." - ) - }, - ) - use_slow_tokenizer: bool = field( - default=False, - metadata={"help": ("use slow tokenizer or not.")}, - ) - - -@dataclass -class DataTrainingArguments: - """ - Arguments pertaining to what data we are going to input our model for training and eval. - """ - - dataset_name: Optional[str] = field( - default=None, metadata={"help": "The name of the dataset to use (via the datasets library)."} - ) - dataset_config_name: Optional[str] = field( - default=None, metadata={"help": "The configuration name of the dataset to use (via the datasets library)."} - ) - train_file: Optional[str] = field( - default=None, metadata={"help": "The input training data file (a json/jsonl file)."} - ) - max_train_samples: Optional[int] = field( - default=None, - metadata={ - "help": ( - "For debugging purposes or quicker training, truncate the number of training examples to this " - "value if set." - ) - }, - ) - streaming: bool = field(default=False, metadata={"help": "Enable streaming mode"}) - overwrite_cache: bool = field( - default=False, metadata={"help": "Overwrite the cached training and evaluation sets"} - ) - preprocessing_num_workers: Optional[int] = field( - default=None, - metadata={"help": "The number of processes to use for the preprocessing."}, - ) - max_seq_length: Optional[int] = field( - default=None, - metadata={ - "help": ( - "The maximum total input sequence length after tokenization." - + " Sequences longer than this will be truncated" - ) - }, - ) - chat_template: Optional[str] = field( - default="tulu", metadata={"help": ("The chat template to apply to chosen/rejected pairs. Default is Tulu.")} - ) - - def __post_init__(self): - if self.dataset_name is None and self.train_file is None: - raise ValueError("Need either a dataset name or a training file.") - else: - if self.train_file is not None: - extension = self.train_file.split(".")[-1] - assert extension in ["json", "jsonl"], "`train_file` should be a json or a jsonl file." - - -def main(): - parser = HfArgumentParser((ModelArguments, DataTrainingArguments, TrainingArguments)) - if len(sys.argv) == 2 and sys.argv[1].endswith(".json"): - model_args, data_args, training_args = parser.parse_json_file(json_file=os.path.abspath(sys.argv[1])) - else: - model_args, data_args, training_args = parser.parse_args_into_dataclasses() - - if model_args.use_auth_token is not None: - warnings.warn( - "The `use_auth_token` argument is deprecated and will be removed in Transformers v4.34.", FutureWarning - ) - if model_args.token is not None: - raise ValueError("`token` and `use_auth_token` are both specified. Please set only the argument `token`.") - model_args.token = model_args.use_auth_token - - # Setup logging - logging.basicConfig( - format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", - datefmt="%m/%d/%Y %H:%M:%S", - handlers=[logging.StreamHandler(sys.stdout)], - ) - - if training_args.should_log: - # The default of training_args.log_level is passive, so we set log level at info here to have that default. - transformers.utils.logging.set_verbosity_info() - - log_level = training_args.get_process_log_level() - logger.setLevel(log_level) - datasets.utils.logging.set_verbosity(log_level) - transformers.utils.logging.set_verbosity(log_level) - transformers.utils.logging.enable_default_handler() - transformers.utils.logging.enable_explicit_format() - - # Log on each process the small summary: - logger.warning( - f"Process rank: {training_args.local_rank}, device: {training_args.device}, n_gpu: {training_args.n_gpu}" - + f"distributed training: {training_args.parallel_mode.value == 'distributed'}," - + f" 16-bits training: {training_args.fp16}" - ) - logger.info(f"Training parameters {training_args}") - - # Detecting last checkpoint. - last_checkpoint = None - if os.path.isdir(training_args.output_dir) and training_args.do_train and not training_args.overwrite_output_dir: - last_checkpoint = get_last_checkpoint(training_args.output_dir) - if last_checkpoint is None and len(os.listdir(training_args.output_dir)) > 0: - raise ValueError( - f"Output directory ({training_args.output_dir}) already exists and is not empty. " - "Use --overwrite_output_dir to overcome." - ) - elif last_checkpoint is not None and training_args.resume_from_checkpoint is None: - logger.info( - f"Checkpoint detected, resuming training at {last_checkpoint}. To avoid this behavior, change " - "the `--output_dir` or add `--overwrite_output_dir` to train from scratch." - ) - - # Set seed before initializing model. - if training_args.seed is None: - training_args.seed = 123409876 - set_seed(training_args.seed) - - if data_args.dataset_name is None: - raise ValueError("Must provide a valid dataset name") - elif data_args.dataset_name[-6:] == ".jsonl": - # load dataset file - train_dataset = load_dataset("json", data_files=data_args.dataset_name)["train"] - else: - train_dataset = load_dataset(data_args.dataset_name)["train"] - - config_kwargs = { - "cache_dir": model_args.cache_dir, - "revision": model_args.model_revision, - "token": model_args.token, - "trust_remote_code": model_args.trust_remote_code, - } - if model_args.config_name: - config = AutoConfig.from_pretrained(model_args.config_name, **config_kwargs) - elif model_args.model_name_or_path: - config = AutoConfig.from_pretrained(model_args.model_name_or_path, **config_kwargs) - else: - raise ValueError("You are instantiating a new config instance from scratch. This is not supported.") - - config.num_labels = 1 - - tokenizer_kwargs = { - "cache_dir": model_args.cache_dir, - "revision": model_args.model_revision, - "token": model_args.token, - "trust_remote_code": model_args.trust_remote_code, - "use_fast": not model_args.use_slow_tokenizer, - } - if model_args.tokenizer_name: - tokenizer = AutoTokenizer.from_pretrained(model_args.tokenizer_name, **tokenizer_kwargs) - elif model_args.model_name_or_path: - tokenizer = AutoTokenizer.from_pretrained(model_args.model_name_or_path, **tokenizer_kwargs) - else: - raise ValueError( - "You are instantiating a new tokenizer from scratch. This is not supported by this finetuning script." - ) - - if model_args.model_name_or_path: - torch_dtype = ( - model_args.torch_dtype - if model_args.torch_dtype in ["auto", None] - else getattr(torch, model_args.torch_dtype) - ) - model = AutoModelForSequenceClassification.from_pretrained( - model_args.model_name_or_path, - from_tf=bool(".ckpt" in model_args.model_name_or_path), - config=config, - cache_dir=model_args.cache_dir, - revision=model_args.model_revision, - token=model_args.token, - trust_remote_code=model_args.trust_remote_code, - torch_dtype=torch_dtype, - low_cpu_mem_usage=model_args.low_cpu_mem_usage, - use_flash_attention_2=True if model_args.use_flash_attn else False, - ) - else: - raise ValueError( - "You are instantiating a new model from scratch. This is not supported by this finetuning script." - ) - - if "gpt2" in model_args.model_name_or_path: - print("Adding padding token for GPT2 models") - tokenizer.add_special_tokens({"pad_token": tokenizer.eos_token}) - config.pad_token_id = config.eos_token_id - - # no default pad token for llama! - # here we add all special tokens again, because the default ones are not in the special_tokens_map - if ( - isinstance(tokenizer, LlamaTokenizer) - or isinstance(tokenizer, LlamaTokenizerFast) - or "llama" in model_args.model_name_or_path.lower() - or "tulu" in model_args.model_name_or_path.lower() - ): - print("Adding pad token for Llama/Tulu models") - num_added_tokens = tokenizer.add_special_tokens( - { - "bos_token": "", - "eos_token": "", - "unk_token": "", - "pad_token": "", - } - ) - config.pad_token_id = 32000 - model.config.pad_token_id = 32000 - assert num_added_tokens in [ - 0, - 1, - ], "LlamaTokenizer should only add one special token - the pad_token, or no tokens if pad token present." - - print(f"model config: {config}") - - # resize embeddings if needed (e.g. for LlamaTokenizer) - embedding_size = model.get_input_embeddings().weight.shape[0] - if len(tokenizer) > embedding_size: - model.resize_token_embeddings(len(tokenizer)) - - original_columns = train_dataset.column_names - - def preprocess_preference_pairs(example): - chosen = example["chosen"] - rejected = example["rejected"] - tokenized_chosen = tokenizer( - chosen, - max_length=data_args.max_seq_length, - truncation=True, - ) - tokenized_rejected = tokenizer( - rejected, - max_length=data_args.max_seq_length, - truncation=True, - ) - return { - "input_ids_chosen": tokenized_chosen["input_ids"], - "attention_mask_chosen": tokenized_chosen["attention_mask"], - "input_ids_rejected": tokenized_rejected["input_ids"], - "attention_mask_rejected": tokenized_rejected["attention_mask"], - } - - def prepare_examples( - example: Dict[str, List[Any]], - dialogue_template: Conversation, - ): - processed = {} - for key in ["chosen", "rejected"]: - dialogue_template.messages = [] - for elem in example[key]: - content = elem["content"] - role = elem["role"] - dialogue_template.messages.append([role, content]) - processed[key] = dialogue_template.get_prompt() - - return processed - - train_dataset = train_dataset.map( - prepare_examples, - fn_kwargs={"dialogue_template": get_conv_template(data_args.chat_template)}, - num_proc=data_args.preprocessing_num_workers, - load_from_cache_file=False, - ) - - train_dataset = train_dataset.filter( - lambda x: x["chosen"] != x["rejected"], - num_proc=data_args.preprocessing_num_workers, - ) - train_dataset = train_dataset.map( - preprocess_preference_pairs, - num_proc=data_args.preprocessing_num_workers, - remove_columns=original_columns, - ) - train_dataset = train_dataset.filter( - lambda x: len(x["input_ids_chosen"]) <= data_args.max_seq_length - and len(x["input_ids_rejected"]) <= data_args.max_seq_length, - num_proc=data_args.preprocessing_num_workers, - ) - - # initialize a trainer - trainer = RewardTrainer( - model=model, - args=training_args, - train_dataset=train_dataset if training_args.do_train else None, - tokenizer=tokenizer, - ) - - # Training - if training_args.do_train: - checkpoint = None - if training_args.resume_from_checkpoint is not None: - checkpoint = training_args.resume_from_checkpoint - elif last_checkpoint is not None: - checkpoint = last_checkpoint - print(f"resume from checkpoint: {checkpoint}") - train_result = trainer.train(resume_from_checkpoint=checkpoint) - trainer.save_model() # Saves the tokenizer too for easy upload - - metrics = train_result.metrics - - max_train_samples = ( - data_args.max_train_samples if data_args.max_train_samples is not None else len(train_dataset) - ) - metrics["train_samples"] = min(max_train_samples, len(train_dataset)) - - trainer.log_metrics("train", metrics) - trainer.save_metrics("train", metrics) - trainer.save_state() - - -if __name__ == "__main__": - main() diff --git a/setup.py b/setup.py deleted file mode 100644 index 93f3a82e..00000000 --- a/setup.py +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from setuptools import find_packages, setup - -# instructions for releasing new version: update the version number, then follow -# from 6 https://github.com/huggingface/diffusers/blob/49b959b5408b97274e2ee423059d9239445aea26/setup.py#L36C43-L38C1 -# this has not yet been pushed to pypyi-test -setup( - name="rewardbench", - version="0.1.1", - author="Nathan Lambert", - author_email="nathanl@allenai.org", - description="Tools for evaluating reward models", - entry_points={ - "console_scripts": ["rewardbench=rewardbench.rewardbench:main"], - }, - long_description=open("README.md").read(), - long_description_content_type="text/markdown", - url="https://github.com/allenai/rewardbench", - packages=find_packages(), - classifiers=[ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: Apache Software License", - "Operating System :: OS Independent", - ], - python_requires=">=3.10", - install_requires=[ - "accelerate", - "bitsandbytes", - "black", - "datasets", - "deepspeed", - "einops", - "flake8>=6.0", - "fschat", - "huggingface_hub", - "isort>=5.12.0", - "pandas", - "peft", - "pytest", - "scipy", - "sentencepiece", - "tabulate", # dependency for markdown rendering in pandas - "tokenizers", - "torch", - "tiktoken==0.6.0", # added for llama 3 - "transformers==4.40.0", # pinned at llama 3 - "trl>=0.8.2", # fixed transformers import error - # TODO consider vllm in setup, currently only in dockerfile - # "vllm @ git+https://github.com/vllm-project/vllm.git@d87f39e9a9dd149f5dd7a58b4d98b21f713827b6", # noqa, # TODO pin version, Command R Plus is currently only in source install - ], -) diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/test_data.py b/tests/test_data.py deleted file mode 100644 index a6ec6920..00000000 --- a/tests/test_data.py +++ /dev/null @@ -1,245 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -import unittest - -from datasets import load_dataset -from fastchat.conversation import get_conv_template -from transformers import AutoTokenizer - -from rewardbench import ( - load_eval_dataset, - prepare_dialogue, - prepare_dialogue_from_tokenizer, -) - - -class PrepareDialoguesTest(unittest.TestCase): - def setUp(self): - self.tokenizer = AutoTokenizer.from_pretrained("allenai/rlhf-test-tokenizer") - self.conv = get_conv_template("tulu") - - def test_prepare_dialogue_from_tokenizer(self): - example = {} - example["prompt"] = "What are different drawers I should have for clothes?" - example["chosen"] = "Utensils!" - example["rejected"] = "Hmm." - - prepared = prepare_dialogue_from_tokenizer(example, self.tokenizer) - desired_chosen = "<|user|>\nWhat are different drawers I should have for clothes?<|endoftext|>\n<|assistant|>\nUtensils!<|endoftext|>\n" # noqa - desired_rejected = "<|user|>\nWhat are different drawers I should have for clothes?<|endoftext|>\n<|assistant|>\nHmm.<|endoftext|>\n" # noqa - assert prepared["prompt"] == "<|user|>\nWhat are different drawers I should have for clothes?<|endoftext|>\n" - assert prepared["text_chosen"] == desired_chosen - assert prepared["text_rejected"] == desired_rejected - - def test_prepare_dialogue_from_tokenizer_multi_turn(self): - example = {} - example["prompt"] = [ - { - "content": "I love to drink coffee at work.", - "role": "user", - }, - { - "content": "Great, so that’s something you want to purchase.", - "role": "assistant", - }, - {"content": "To make coffee at work?", "role": "user"}, - ] - example["chosen"] = "Yes, you’re correct!" - example["rejected"] = "No, that's wrong!" - prepared = prepare_dialogue_from_tokenizer(example, self.tokenizer) - - desired_rejected = "<|user|>\nI love to drink coffee at work.<|endoftext|>\n<|assistant|>\nGreat, so that’s something you want to purchase.<|endoftext|>\n<|user|>\nTo make coffee at work?<|endoftext|>\n<|assistant|>\nNo, that's wrong!<|endoftext|>\n" # noqa - desired_chosen = "<|user|>\nI love to drink coffee at work.<|endoftext|>\n<|assistant|>\nGreat, so that’s something you want to purchase.<|endoftext|>\n<|user|>\nTo make coffee at work?<|endoftext|>\n<|assistant|>\nYes, you’re correct!<|endoftext|>\n" # noqa - assert ( - prepared["prompt"] - == "<|user|>\nI love to drink coffee at work.<|endoftext|>\n<|assistant|>\nGreat, so that’s something you want to purchase.<|endoftext|>\n<|user|>\nTo make coffee at work?<|endoftext|>\n" # noqa - ) - assert prepared["text_chosen"] == desired_chosen - assert prepared["text_rejected"] == desired_rejected - - def test_prepare_dialogue_from_tokenizer_ift(self): - # tokenizer = AutoTokenizer.from_pretrained("allenai/rlhf-test-tokenizer") - example = {} - example["prompt"] = "What are different drawers I should have for clothes?" - example["input"] = "Utensils!" - - prepared = prepare_dialogue_from_tokenizer(example, self.tokenizer, ift=True) - desired_text = "<|user|>\nWhat are different drawers I should have for clothes?<|endoftext|>\n<|assistant|>\nUtensils!<|endoftext|>\n" # noqa - assert prepared["text"] == desired_text - - def test_prepare_dialogue_single_turn(self): - example = {} - example["prompt"] = "What are different drawers I should have for clothes?" - example["chosen"] = "Utensils!" - example["rejected"] = "Hmm." - - prepared = prepare_dialogue(example, self.conv) - desired_chosen = "<|user|>\nWhat are different drawers I should have for clothes?\n<|assistant|>\nUtensils!\n" - desired_rejected = "<|user|>\nWhat are different drawers I should have for clothes?\n<|assistant|>\nHmm.\n" - assert prepared["prompt"] == "<|user|>\nWhat are different drawers I should have for clothes?\n" - assert prepared["text_chosen"] == desired_chosen - assert prepared["text_rejected"] == desired_rejected - - def test_prepare_dialogue_multi_turn(self): - example = {} - example["prompt"] = [ - { - "content": "I love to drink coffee at work.", - "role": "user", - }, - { - "content": "Great, so that’s something you want to purchase.", - "role": "assistant", - }, - {"content": "To make coffee at work?", "role": "user"}, - ] - example["chosen"] = "Yes, you’re correct!" - example["rejected"] = "No, that's wrong!" - prepared = prepare_dialogue(example, self.conv) - - desired_chosen = "<|user|>\nI love to drink coffee at work.\n<|assistant|>\nGreat, so that’s something you want to purchase.\n<|user|>\nTo make coffee at work?\n<|assistant|>\nYes, you’re correct!\n" # noqa - desired_rejected = "<|user|>\nI love to drink coffee at work.\n<|assistant|>\nGreat, so that’s something you want to purchase.\n<|user|>\nTo make coffee at work?\n<|assistant|>\nNo, that's wrong!\n" # noqa - assert ( - prepared["prompt"] - == "<|user|>\nI love to drink coffee at work.\n<|assistant|>\nGreat, so that’s something you want to purchase.\n<|user|>\nTo make coffee at work?\n" # noqa - ) - assert prepared["text_chosen"] == desired_chosen - assert prepared["text_rejected"] == desired_rejected - - def test_prepare_dialogue_ift(self): - example = {} - example["prompt"] = "What are different drawers I should have for clothes?" - example["input"] = "Utensils!" - - prepared = prepare_dialogue(example, self.conv, ift=True) - desired_text = "<|user|>\nWhat are different drawers I should have for clothes?\n<|assistant|>\nUtensils!\n" - assert prepared["text"] == desired_text - - -class DatasetTest(unittest.TestCase): - def test_core_dataset_lens(self): - # must be updated whenever dataset is updated - dataset = load_dataset("allenai/reward-bench", split="filtered") - assert len(dataset) == 2985 - - def test_test_sets_lens(self): - # must be updated whenever dataset is updated - dataset = load_dataset("allenai/pref-test-sets") - assert len(dataset["anthropic_harmless"]) == 2266 - assert len(dataset["anthropic_helpful"]) == 6192 - assert len(dataset["anthropic_hhh"]) == 221 - assert len(dataset["summarize"]) == 9000 - assert len(dataset["pku_better"]) == 9000 - assert len(dataset["pku_safer"]) == 9000 - assert len(dataset["shp"]) == 1741 - assert len(dataset["mtbench_human"]) == 3355 - assert len(dataset["mtbench_gpt4"]) == 2400 - - -class LoadEvalDatasetTest(unittest.TestCase): - def setUp(self): - self.tokenizer = AutoTokenizer.from_pretrained("HuggingFaceH4/zephyr-7b-beta") - self.conv = get_conv_template("tulu") - - def test_load_core_set_with_conv(self): - dataset, _ = load_eval_dataset( - core_set=True, - conv=self.conv, - custom_dialogue_formatting=False, - tokenizer=None, - keep_columns=["text_chosen", "text_rejected", "prompt"], - ) - - self.assertEqual(dataset[0]["prompt"], "<|user|>\nHow do I detail a car?\n", "Dialogue formatting error") - self.assertEqual( - dataset[0]["text_chosen"][:100], - "<|user|>\nHow do I detail a car?\n<|assistant|>\nDetailing a car involves a thorough cleaning inside an", - "Dialogue formatting error", - ) - self.assertEqual( - dataset[0]["text_chosen"][-100:], - "ember, regular detailing can prevent wear and tear and keep your car looking new for years to come.\n", - "Dialogue formatting error", - ) - - def test_load_pref_sets_with_conv(self): - dataset, _ = load_eval_dataset( - core_set=False, - conv=self.conv, - custom_dialogue_formatting=False, - tokenizer=None, - keep_columns=["text_chosen", "text_rejected", "prompt"], - ) - - self.assertEqual( - dataset[3456]["prompt"], - "<|user|>\nWhat is the main transportation in the Philippines?\n<|assistant|>\nThat depends on what you mean by “main.” Do you mean how most people move around? Or do you mean how many people use it?\n<|user|>\nYes how do they get around there?\n", # noqa - "Dialogue formatting error", - ) - self.assertEqual( - dataset[3456]["text_chosen"][:100], - "<|user|>\nWhat is the main transportation in the Philippines?\n<|assistant|>\nThat depends on what you ", - "Dialogue formatting error", - ) - self.assertEqual( - dataset[3456]["text_chosen"][-100:], - "ars - in 2017, the Philippines was the second largest car market in Southeast Asia after Indonesia.\n", - "Dialogue formatting error", - ) - - def test_load_core_set_with_tokenizer(self): - dataset, _ = load_eval_dataset( - core_set=True, - conv=None, - custom_dialogue_formatting=False, - tokenizer=self.tokenizer, - keep_columns=["text_chosen", "text_rejected", "prompt"], - ) - - self.assertEqual(dataset[0]["prompt"], "<|user|>\nHow do I detail a car?\n", "Dialogue formatting error") - self.assertEqual( - dataset[0]["text_chosen"][:100], - "<|user|>\nHow do I detail a car?\n<|assistant|>\nDetailing a car involves a thorough cleaning insid", - "Dialogue formatting error", - ) - self.assertEqual( - dataset[0]["text_chosen"][-100:], - "r, regular detailing can prevent wear and tear and keep your car looking new for years to come.\n", - "Dialogue formatting error", - ) - - def test_load_pref_sets_with_tokenizer(self): - dataset, _ = load_eval_dataset( - core_set=False, - conv=None, - custom_dialogue_formatting=False, - tokenizer=self.tokenizer, - keep_columns=["text_chosen", "text_rejected", "prompt"], - ) - - self.assertEqual( - dataset[3456]["prompt"], - "<|user|>\nWhat is the main transportation in the Philippines?\n<|assistant|>\nThat depends on what you mean by “main.” Do you mean how most people move around? Or do you mean how many people use it?\n<|user|>\nYes how do they get around there?\n", # noqa - "Dialogue formatting error", - ) - self.assertEqual( - dataset[3456]["text_chosen"][:100], - "<|user|>\nWhat is the main transportation in the Philippines?\n<|assistant|>\nThat depends on what ", - "Dialogue formatting error", - ) - self.assertEqual( - dataset[3456]["text_chosen"][-100:], - "- in 2017, the Philippines was the second largest car market in Southeast Asia after Indonesia.\n", - "Dialogue formatting error", - ) diff --git a/tests/test_package.py b/tests/test_package.py deleted file mode 100644 index 80f01423..00000000 --- a/tests/test_package.py +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# tests to make sure the code in the package is working as expected -import unittest - -from fastchat.conversation import get_conv_template -from transformers import AutoTokenizer - -from rewardbench import load_preference_dataset - - -class LoadAnyDataTest(unittest.TestCase): - """ - Simple scripts to make sure the loading scripts do not error. - """ - - def setUp(self): - self.tokenizer = AutoTokenizer.from_pretrained("allenai/rlhf-test-tokenizer") - self.conv = get_conv_template("tulu") - - def test_load_standard_tokenizer(self): - load_preference_dataset( - "allenai/ultrafeedback_binarized_cleaned", split="test_prefs", tokenizer=self.tokenizer - ) - - def test_load_standard_conv(self): - load_preference_dataset("allenai/ultrafeedback_binarized_cleaned", split="test_prefs", conv=self.conv) - - def test_load_alt_tokenizer(self): - load_preference_dataset("allenai/preference-test-sets", split="shp", tokenizer=self.tokenizer) - - def test_load_alt_conv(self): - load_preference_dataset("allenai/preference-test-sets", split="shp", conv=self.conv) diff --git a/tests/test_utils.py b/tests/test_utils.py deleted file mode 100644 index e01795e0..00000000 --- a/tests/test_utils.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright 2023 AllenAI. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -import json -import unittest - -from rewardbench import save_to_hub - - -class SaveDataTest(unittest.TestCase): - def test_save_locally(self): - model_name = "fake/fake_model" - fake_results = { - "model": model_name, - "model_type": "random", - "alpacaeval-easy": 0.12345, - "math-prm": 0.54321, - } - _ = save_to_hub( - fake_results, - model_name, # must be the same as in the json - "eval-set/", - True, # doesn't matter if not pushed to hub - local_only=True, - ) - - # read results - expected_path = "results/eval-set/fake/fake_model.json" - with open(expected_path, "r") as f: - output = json.load(f) - - self.assertAlmostEqual(output["alpacaeval-easy"], 0.12345, places=5) - self.assertAlmostEqual(output["math-prm"], 0.54321, places=5) - # accounts for weird json float conversion diff --git a/rewardbench/utils.py b/utils.py similarity index 100% rename from rewardbench/utils.py rename to utils.py From a9f82178f400c39c36eb9035a56e933161aae867 Mon Sep 17 00:00:00 2001 From: Wei Xiong Date: Tue, 14 May 2024 09:25:09 +0800 Subject: [PATCH 8/9] Revert "improve code quality" This reverts commit d66b833def1f441c004c51310a09646d92a7e12a. --- Dockerfile | 36 ++ LICENSE | 201 +++++++ Makefile | 13 + README.md | 240 ++++++++ analysis/README.md | 126 +++++ analysis/__init__.py | 0 analysis/bon_to_alpacaeval.py | 111 ++++ analysis/draw_model_histogram.py | 83 +++ analysis/draw_mtbench_analysis.py | 47 ++ analysis/draw_per_token_reward.py | 119 ++++ analysis/draw_subtoken_statistics.py | 68 +++ analysis/get_benchmark_results.py | 222 ++++++++ analysis/get_dpo_ref_free_results.py | 244 ++++++++ analysis/get_per_token_reward.py | 443 +++++++++++++++ analysis/get_subtoken_statistics.py | 164 ++++++ analysis/plot_all.sh | 12 + analysis/plot_per_model_dist.py | 203 +++++++ analysis/plot_per_subset_dist.py | 180 ++++++ analysis/run_ensemble_offline.py | 173 ++++++ analysis/utils.py | 150 +++++ analysis/visualization.py | 462 ++++++++++++++++ rewardbench.pdf | Bin 0 -> 739031 bytes __init__.py => rewardbench/__init__.py | 0 __main__.py => rewardbench/__main__.py | 0 .../chattemplates.py | 0 constants.py => rewardbench/constants.py | 0 dpo.py => rewardbench/dpo.py | 0 generative.py => rewardbench/generative.py | 0 {models => rewardbench/models}/README.md | 0 {models => rewardbench/models}/__init__.py | 2 +- {models => rewardbench/models}/beaver.py | 0 .../models}/betterpairrm.py | 0 .../models}/openassistant.py | 0 {models => rewardbench/models}/openbmb.py | 0 {models => rewardbench/models}/pairrm.py | 0 {models => rewardbench/models}/shp.py | 0 {models => rewardbench/models}/slicpairpm.py | 48 +- {models => rewardbench/models}/starling.py | 0 {models => rewardbench/models}/ziya.py | 0 rewardbench.py => rewardbench/rewardbench.py | 0 utils.py => rewardbench/utils.py | 0 scripts/configs/README.md | 6 + scripts/configs/beaker_eval.yaml | 48 ++ scripts/configs/beaker_train.yaml | 35 ++ scripts/configs/eval_bon_configs.yaml | 67 +++ scripts/configs/eval_configs.yaml | 520 ++++++++++++++++++ scripts/configs/stage3_no_offloading.conf | 41 ++ scripts/configs/train_configs.yaml | 31 ++ scripts/run_bon.py | 324 +++++++++++ scripts/run_dpo.py | 290 ++++++++++ scripts/run_generative.py | 369 +++++++++++++ scripts/run_rm.py | 347 ++++++++++++ scripts/submit_eval_jobs.py | 166 ++++++ scripts/submit_train_jobs.py | 100 ++++ scripts/train_rm.py | 438 +++++++++++++++ setup.py | 64 +++ tests/__init__.py | 0 tests/test_data.py | 245 +++++++++ tests/test_package.py | 45 ++ tests/test_utils.py | 44 ++ 60 files changed, 6497 insertions(+), 30 deletions(-) create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 analysis/README.md create mode 100644 analysis/__init__.py create mode 100644 analysis/bon_to_alpacaeval.py create mode 100644 analysis/draw_model_histogram.py create mode 100644 analysis/draw_mtbench_analysis.py create mode 100644 analysis/draw_per_token_reward.py create mode 100644 analysis/draw_subtoken_statistics.py create mode 100644 analysis/get_benchmark_results.py create mode 100644 analysis/get_dpo_ref_free_results.py create mode 100644 analysis/get_per_token_reward.py create mode 100644 analysis/get_subtoken_statistics.py create mode 100755 analysis/plot_all.sh create mode 100644 analysis/plot_per_model_dist.py create mode 100644 analysis/plot_per_subset_dist.py create mode 100644 analysis/run_ensemble_offline.py create mode 100644 analysis/utils.py create mode 100644 analysis/visualization.py create mode 100644 rewardbench.pdf rename __init__.py => rewardbench/__init__.py (100%) rename __main__.py => rewardbench/__main__.py (100%) rename chattemplates.py => rewardbench/chattemplates.py (100%) rename constants.py => rewardbench/constants.py (100%) rename dpo.py => rewardbench/dpo.py (100%) rename generative.py => rewardbench/generative.py (100%) rename {models => rewardbench/models}/README.md (100%) rename {models => rewardbench/models}/__init__.py (100%) rename {models => rewardbench/models}/beaver.py (100%) rename {models => rewardbench/models}/betterpairrm.py (100%) rename {models => rewardbench/models}/openassistant.py (100%) rename {models => rewardbench/models}/openbmb.py (100%) rename {models => rewardbench/models}/pairrm.py (100%) rename {models => rewardbench/models}/shp.py (100%) rename {models => rewardbench/models}/slicpairpm.py (73%) rename {models => rewardbench/models}/starling.py (100%) rename {models => rewardbench/models}/ziya.py (100%) rename rewardbench.py => rewardbench/rewardbench.py (100%) rename utils.py => rewardbench/utils.py (100%) create mode 100644 scripts/configs/README.md create mode 100644 scripts/configs/beaker_eval.yaml create mode 100644 scripts/configs/beaker_train.yaml create mode 100644 scripts/configs/eval_bon_configs.yaml create mode 100644 scripts/configs/eval_configs.yaml create mode 100644 scripts/configs/stage3_no_offloading.conf create mode 100644 scripts/configs/train_configs.yaml create mode 100644 scripts/run_bon.py create mode 100644 scripts/run_dpo.py create mode 100644 scripts/run_generative.py create mode 100644 scripts/run_rm.py create mode 100644 scripts/submit_eval_jobs.py create mode 100644 scripts/submit_train_jobs.py create mode 100644 scripts/train_rm.py create mode 100644 setup.py create mode 100644 tests/__init__.py create mode 100644 tests/test_data.py create mode 100644 tests/test_package.py create mode 100644 tests/test_utils.py diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..cbd9bff2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,36 @@ +# TODO: Update this when releasing RewardBench publicly +# This dockerfile is forked from ai2/cuda11.8-cudnn8-dev-ubuntu20.04 +# To get the latest id, run `beaker image pull ai2/cuda11.8-cudnn8-dev-ubuntu20.04` +# and then `docker image list`, to verify docker image is pulled +# e.g. `Image is up to date for gcr.io/ai2-beaker-core/public/cncl3kcetc4q9nvqumrg:latest` +FROM gcr.io/ai2-beaker-core/public/cojd4q5l9jpqudh7p570:latest + +RUN apt update && apt install -y openjdk-8-jre-headless + +RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash +RUN apt-get -y install git-lfs + +WORKDIR /stage/ + +RUN pip install --upgrade pip setuptools wheel +RUN pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 + +COPY rewardbench rewardbench +COPY scripts scripts +COPY setup.py setup.py +COPY Makefile Makefile +COPY README.md README.md +RUN pip install -e . +RUN chmod +x scripts/* +RUN pip install flash-attn==2.5.0 --no-build-isolation +RUN pip install ai2-olmo +# TODO remove above when olmo supported in Transformers verion +RUN pip install jinja2 +# for better-pairRM +# generative installs +RUN pip install anthropic +RUN pip install openai +RUN pip install git+https://github.com/vllm-project/vllm.git@d87f39e9a9dd149f5dd7a58b4d98b21f713827b6 + +# for interactive session +RUN chmod -R 777 /stage/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..d8403692 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +.PHONY: style quality + +# make sure to test the local checkout in scripts and not the pre-installed one (don't use quotes!) +export PYTHONPATH = src + +check_dirs := rewardbench scripts analysis tests + +style: + python -m black --line-length 119 --target-version py310 $(check_dirs) setup.py + python -m isort $(check_dirs) setup.py --profile black + +quality: + python -m flake8 --max-line-length 119 $(check_dirs) setup.py \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..d67a345f --- /dev/null +++ b/README.md @@ -0,0 +1,240 @@ +

+ + +--- + +**RewardBench** is a benchmark designed to evaluate the capabilities and safety of reward models (including those trained with Direct Preference Optimization, DPO). +The repository includes the following: +* Common inference code for a variety of reward models (Starling, PairRM, OpenAssistant, DPO, and more). +* Common dataset formatting and tests for fair reward model inference. +* Analysis and visualization tools. + +The two primary scripts to generate results (more in `scripts/`): +1. `scripts/run_rm.py`: Run evaluations for reward models. +2. `scripts/run_dpo.py`: Run evaluations for direct preference optimization (DPO) models (and other models using implicit rewards, such as KTO). +3. `scripts/train_rm.py`: A basic RM training script built on [TRL](https://github.com/huggingface/trl). + +## Quick Usage +RewardBench let's you quickly evaluate any reward model on any preference set. +To install for quick usage, install with pip as: +``` +pip install reward bench +``` +Then, run a following: +``` +rewardbench --model={yourmodel} --dataset={yourdataset} --batch_size=8 +``` +For a DPO model, pass --ref_model={} and the script will automatically route there. +Automatically uses Tokenizers chat templates, but can also use fastchat conv templates. + +To run the core Reward Bench evaluation set, run: +``` +rewardbench --model={yourmodel} +``` + +Examples: +1. Normal operation +``` +rewardbench --model=OpenAssistant/reward-model-deberta-v3-large-v2 --dataset=allenai/ultrafeedback_binarized_cleaned --split=test_gen --chat_template=raw +``` +2. DPO model from local dataset (note `--load_json`) +``` +rewardbench --model=Qwen/Qwen1.5-0.5B-Chat --ref_model=Qwen/Qwen1.5-0.5B --dataset=/net/nfs.cirrascale/allennlp/jacobm/herm/data/berkeley-nectar-binarized-preferences-random-rejected.jsonl --load_json +``` + +## Full Installation +To install from source, please install `torch` on your system, and then install the following requirements. +``` +pip install -e . +``` +Add the following to your `.bashrc`: +``` +export HF_TOKEN="{your_token}" +``` + +## Contribute Your Model + +For now, in order to contribute your model to the leaderboard, open an issue with the model name on HuggingFace (you can still evaluate local models with RewardBench, see below). +If custom code is needed, please open a PR that enables it in our inference stack (see [`rewardbench/models`](https://github.com/allenai/reward-bench/tree/main/rewardbench/models) for more information). + +# Evaluating Models + +For reference configs, see `scripts/configs/eval_configs.yaml`. +For reference on Chat Templates, many models follow the base / sft model terminology [here](https://github.com/lm-sys/FastChat/blob/main/fastchat/conversation.py). +A small model for debugging is available at `natolambert/gpt2-dummy-rm`. + +The core scripts automatically evaluate our core evaluation set. To run these on [existing preference sets](https://huggingface.co/datasets/allenai/pref-test-sets), add the argument `--pref_sets`. + +## Running Reward Models + +To run individual models with `scripts/run_rm.py`, use any of the following examples: +``` +python scripts/run_rm.py --model=openbmb/UltraRM-13b --chat_template=openbmb --batch_size=8 +python scripts/run_rm.py --model=OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5 --chat_template=oasst_pythia +python scripts/run_rm.py --model=PKU-Alignment/beaver-7b-v1.0-cost --chat_template=pku-align --batch_size=16 +python scripts/run_rm.py --model=IDEA-CCNL/Ziya-LLaMA-7B-Reward --batch_size=32 --trust_remote_code --chat_template=Ziya +``` + +To run these models with AI2 infrastructure, run: +``` +python scripts/submit_eval_jobs.py +``` +Or for example, the best of N sweep on the non-default image: +``` +python scripts/submit_eval_jobs.py --eval_on_bon --image=nathanl/herm_bon +``` +Note: for AI2 users, you must set `beaker secret write HF_TOKEN ` to make the scripts work. + +Models using the default abstraction `AutoModelForSequenceClassification.from_pretrained` can also be loaded locally. Expanding this functionality is TODO. E.g. +``` +python scripts/run_rm.py --model=/net/nfs.cirrascale/allennlp/hamishi/EasyLM/rm_13b_3ep --chat_template=tulu --batch_size=8 +``` + +## Running DPO Models + +And for DPO: +``` +python scripts/run_dpo.py --model=stabilityai/stablelm-zephyr-3b --ref_model=stabilityai/stablelm-3b-4e1t --batch_size=8 +python scripts/run_dpo.py --model=stabilityai/stablelm-2-zephyr-1_6b --ref_model=stabilityai/stablelm-2-1_6b --batch_size=16 +``` + +## Ensembling RMs +For reward models already in RewardBench, you can run an offline ensemble test to approximate using multiple reward models in your system. To try this, you can run: +``` +python analysis/run_ensemble_offline.py --models sfairXC/FsfairX-LLaMA3-RM-v0.1 openbmb/Eurus-RM-7b Nexusflow/Starling-RM-34B +``` + +## Running Generative RMs (LLM-as-a-judge) +Local and API models are supported. For example, run OpenAI's models like: +``` +python scripts/run_generative.py --model=gpt-3.5-turbo-0125 +``` +Local models are loaded from HuggingFace, though some are also available via Together's API. Run Llama 3 locally with +``` +python scripts/run_generative.py --model=meta-llama/Llama-3-70b-chat-hf --force_local +``` +Or, with Together's API with: +``` +python scripts/run_generative.py --model=meta-llama/Llama-3-70b-chat-hf +``` + +We are adding support for generative ensembles (only via API for now), run with: +``` +python scripts/run_generative.py --model gpt-3.5-turbo-0125 claude-3-sonnet-20240229 meta-llama/Llama-3-70b-chat-hf +``` +Note: these must be an odd number of models > 1. + +## Creating Best of N (BoN) rankings + +To create the ranking across the dataset, run (best_of 8 being placeholder, 16 should be fine as eval logic will handle lower best of N numbers): +``` +python scripts/run_bon.py --model=OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5 --chat_template=oasst_pythia --best_of=8 --debug +``` +## Getting Leaderboard Section Scores + +**Important**: We use prompt-weighed scores for the sections Chat, Chat Hard, Safety, and Reasoning (with math equalized to code here) to avoid assigning too much credit to small subsets (e.g. MT Bench ones). Use the following code to compute the scores for each category, assuming `RewardBench` is installed: +``` +from rewardbench.constants import EXAMPLE_COUNTS, SUBSET_MAPPING +from rewardbench.utils import calculate_scores_per_section + +metrics = { + "alpacaeval-easy": 0.5, + "alpacaeval-hard": 0.7052631578947368, + "alpacaeval-length": 0.5894736842105263, + "chat_template": "tokenizer", + "donotanswer": 0.8235294117647058, + "hep-cpp": 0.6280487804878049, + "hep-go": 0.6341463414634146, + "hep-java": 0.7073170731707317, + "hep-js": 0.6646341463414634, + "hep-python": 0.5487804878048781, + "hep-rust": 0.6463414634146342, + "llmbar-adver-GPTInst": 0.391304347826087, + "llmbar-adver-GPTOut": 0.46808510638297873, + "llmbar-adver-manual": 0.3695652173913043, + "llmbar-adver-neighbor": 0.43283582089552236, + "llmbar-natural": 0.52, + "math-prm": 0.2953020134228188, + "model": "PKU-Alignment/beaver-7b-v1.0-cost", + "model_type": "Seq. Classifier", + "mt-bench-easy": 0.5714285714285714, + "mt-bench-hard": 0.5405405405405406, + "mt-bench-med": 0.725, + "refusals-dangerous": 0.97, + "refusals-offensive": 1, + "xstest-should-refuse": 1, + "xstest-should-respond": 0.284 +} + +# Calculate and print the scores per section +scores_per_section = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, metrics) +print(scores_per_section) +``` + +## Repository structure + +``` +├── README.md <- The top-level README for researchers using this project +├── analysis/ <- Directory of tools to analyze RewardBench results or other reward model properties +├── rewardbench/ <- Core utils and modeling files +| ├── models/ ├── Standalone files for running existing reward models +| └── *.py └── RewardBench tools and utilities +├── scripts/ <- Scripts and configs to train and evaluate reward models +├── tests <- Unit tests +├── Dockerfile <- Build file for reproducible and scaleable research at AI2 +├── LICENSE +├── Makefile <- Makefile with commands like `make style` +└── setup.py <- Makes project pip installable (pip install -e .) so `alignment` can be imported +``` + +## Maintenance + +This section is designed for AI2 usage, but may help others evaluating models with Docker. + +### Updating the docker image + +When updating this repo, the docker image should be rebuilt to include those changes. +For AI2 members, please update the list below with any images you use regularly. +For example, if you update `scripts/run_rm.py` and include a new package (or change a package version), you should rebuild the image and verify it still works on known models. + +To update the image, run these commands in the root directory of this repo: +1. `docker build -t . --platform linux/amd64` +2. `beaker image create -n ` + +Notes: Do not use the character - in image names for beaker, + +When updating the `Dockerfile`, make sure to see the instructions at the top to update the base cuda version. + +In development, we have the following docker images (most recent first as it's likely what you need). +TODO: Update it so one image has VLLM (for generative RM only) and one without. Without will load much faster. +- `nathanl/rb_v16` (with VLLM): add support for vllm + llm as a judge +- `nathanl/rb_v12`: add support for llama3 +- `nathanl/rewardbench_v10`: add support for `mightbe/Better-PairRM` via jinja2 +- `nathanl/rewardbench_v8`: add support for `openbmb/Eurus-RM-7b` and starcoder2 +- `nathanl/rewardbench_v5`: improve saving with DPO script +- `nathanl/rewardbench_v4`: fix EOS token bug on FastChat models (GH #90) +- `nathanl/rewardbench_v2`: fix beaver cost model +- `nathanl/rewardbench_v1`: release version + +## Citation +Please cite our work with the following: +``` +@misc{lambert2024rewardbench, + title={RewardBench: Evaluating Reward Models for Language Modeling}, + author={Nathan Lambert and Valentina Pyatkin and Jacob Morrison and LJ Miranda and Bill Yuchen Lin and Khyathi Chandu and Nouha Dziri and Sachin Kumar and Tom Zick and Yejin Choi and Noah A. Smith and Hannaneh Hajishirzi}, + year={2024}, + eprint={2403.13787}, + archivePrefix={arXiv}, + primaryClass={cs.LG} +} +``` diff --git a/analysis/README.md b/analysis/README.md new file mode 100644 index 00000000..75701a22 --- /dev/null +++ b/analysis/README.md @@ -0,0 +1,126 @@ +# Visualizations & Eval Analysis for HERM + +We're going to add visualizations for both the eval. data and results here. +So far, we have the following tools: + +### Convert BoN outputs to AlpacaEval format +``` +python analysis/bon_to_alpacaeval.py --generation_model=zephyr-7b --reward_model=OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5 +``` + +### Get per task distribution +``` +python analysis/plot_per_subset_dist.py --output_dir=plots/whisker +``` + +### Get benchmark results +This prints out the RewardBench results in a Markdown or LaTeX table. Note that you need to pass an API token to the `HF_COLLAB_TOKEN` environment variable. +``` +# Use --render_latex for LaTeX output +python analysis/get_benchmark_results.py +``` + +Below is a snippet of the output for the RewardBench - General results: + +| model | average | alpacaeval | mt-bench | llmbar | refusals | hep | +|--------------------------------------------------|-----------|--------------|------------|----------|------------|--------| +| berkeley-nest/Starling-RM-7B-alpha | 0.74 | 0.89 | 0.84 | 0.45 | 0.7 | 0.8 | +| openbmb/UltraRM-13b | 0.68 | 0.98 | 0.93 | 0.54 | 0.08 | 0.86 | +| stabilityai/stablelm-zephyr-3b | 0.64 | 0.9 | 0.84 | 0.52 | 0.3 | | +| OpenAssistant/reward-model-deberta-v3-large-v2 | 0.64 | 0.88 | 0.81 | 0.25 | 0.61 | 0.65 | +| OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1 | 0.63 | 0.95 | 0.78 | 0.36 | 0.42 | | +| OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5 | 0.62 | 0.86 | 0.79 | 0.5 | 0.35 | | +| llm-blender/PairRM-hf | 0.6 | 0.85 | 0.86 | 0.53 | 0.13 | 0.64 | +| weqweasdas/hh_rlhf_rm_open_llama_3b | 0.54 | 0.79 | 0.72 | 0.41 | 0.22 | | +| stanfordnlp/SteamSHP-flan-t5-xl | 0.48 | 0.85 | 0.7 | 0.38 | 0.01 | 0.48 | + +Also, these can be visualized as a distribution with +``` +python analysis/plot_per_subset_dist.py +``` + + +### Per token uterrance reward +This returns the reward per-token to show how the reward evolves over a piece of text. +Use of this tool requires installation of `spacy-alignments`: +``` +pip install spacy-alignments +``` +Then, +``` +python analysis/per_token_reward.py --model=OpenAssistant/reward-model-deberta-v3-large-v2 --text="I love to walk the dog, what do you like?" +``` +E.g. with OpenAssistant/reward-model-deberta-v3-large-v2 +``` +Reward: -0.544 | Substring: I +Reward: -0.556 | Substring: I love +Reward: -0.566 | Substring: I love to +Reward: 0.099 | Substring: I love to walk +Reward: 0.096 | Substring: I love to walk the +Reward: 0.092 | Substring: I love to walk the dog +Reward: 0.09 | Substring: I love to walk the dog, +Reward: 0.087 | Substring: I love to walk the dog, what +Reward: 0.085 | Substring: I love to walk the dog, what do +Reward: 0.089 | Substring: I love to walk the dog, what do you +Reward: 0.09 | Substring: I love to walk the dog, what do you like +Reward: 0.093 | Substring: I love to walk the dog, what do you like? +``` +### Model usage within eval. dataset +To run this, execute: +``` +python analysis/draw_model_histogram output.png --log_scale +``` +![output](https://github.com/allenai/herm/assets/10695622/e5aa4c0f-83de-4997-8307-f49c22456671) + +This will also return the following table by default: + +| Model | Total | chosen_model | rejected_model | +| --- | --- | --- | --- | +| human | 2107 | 985 | 1122 | +| unknown | 838 | 419 | 419 | +| GPT-4 | 516 | 466 | 50 | +| Llama-2-70b-chat | 251 | 163 | 88 | +| Mistral-7B-Instruct-v0.1 | 244 | 117 | 127 | +| dolphin-2.0-mistral-7b | 208 | 0 | 208 | +| GPT4-Turbo | 100 | 100 | 0 | +| alpaca-7b | 100 | 0 | 100 | +| tulu-2-dpo-70b | 95 | 95 | 0 | +| davinci-003 | 95 | 0 | 95 | +| guanaco-13b | 95 | 0 | 95 | +| zephyr-7b-beta | 87 | 69 | 18 | +| ChatGLM2 | 52 | 0 | 52 | +| vicuna-7b | 38 | 0 | 38 | +| GPT-3.5-Turbo | 29 | 22 | 7 | +| claude-v1 | 23 | 9 | 14 | +| dolly-v2-12b | 19 | 1 | 18 | +| fastchat-t5-3b | 18 | 2 | 16 | +| llama-13b | 17 | 1 | 16 | +| falcon-40b-instruct | 11 | 8 | 3 | +| rwkv-4-raven-14b | 11 | 1 | 10 | +| stablelm-tuned-alpha-7b | 11 | 0 | 11 | +| alpaca-13b | 10 | 3 | 7 | +| chatglm-6b | 8 | 4 | 4 | +| mpt-30b-instruct | 7 | 6 | 1 | +| h2ogpt-oasst-open-llama-13b | 6 | 4 | 2 | +| palm-2-chat-bison-001 | 6 | 4 | 2 | +| gpt4all-13b-snoozy | 6 | 5 | 1 | +| guanaco-65b | 5 | 5 | 0 | +| oasst-sft-4-pythia-12b | 5 | 2 | 3 | +| Llama-2-7b-chat | 5 | 3 | 2 | +| mpt-30b-chat | 5 | 5 | 0 | +| mpt-7b-chat | 5 | 3 | 2 | +| guanaco-33b | 4 | 4 | 0 | +| Llama-2-13b-chat | 4 | 3 | 1 | +| vicuna-13b-v1.3 | 4 | 3 | 1 | +| koala-13b | 4 | 4 | 0 | +| baize-v2-13b | 4 | 4 | 0 | +| oasst-sft-7-llama-30b | 4 | 4 | 0 | +| nous-hermes-13b | 4 | 2 | 2 | +| vicuna-7b-v1.3 | 3 | 2 | 1 | +| claude-instant-v1 | 3 | 3 | 0 | +| wizardlm-30b | 3 | 3 | 0 | +| wizardlm-13b | 3 | 1 | 2 | +| tulu-30b | 2 | 2 | 0 | +| vicuna-33b-v1.3 | 1 | 1 | 0 | + +Total number of models involved: 44 diff --git a/analysis/__init__.py b/analysis/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/analysis/bon_to_alpacaeval.py b/analysis/bon_to_alpacaeval.py new file mode 100644 index 00000000..0338550c --- /dev/null +++ b/analysis/bon_to_alpacaeval.py @@ -0,0 +1,111 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Script for converting RewardBench best of n (BoN) results into the AlpacaEval format + +import argparse +import os +from pathlib import Path + +from datasets import load_dataset +from huggingface_hub import hf_hub_download + +LOCAL_DIR = "hf_snapshot_evals" + + +def get_args(): + parser = argparse.ArgumentParser() + # optional arguments + parser.add_argument( + "--hf_evals_repo", + type=str, + default="allenai/reward-bench-results", + help="HuggingFace repository containing the evaluation results.", + ) + parser.add_argument( + "--output_dir", + type=Path, + default="outputs/", + help="Directory to save the results.", + ) + parser.add_argument( + "--generation_model", # zephyr-7b or tulu-13b + required=True, + nargs=1, + choices=["zephyr-7b", "tulu-13b"], + help="The generation model used for the evaluation.", + ) + parser.add_argument( + "--reward_model", + required=True, + type=str, + help="The reward model used for the evaluation.", + ) + parser.add_argument( + "--best_of", + type=int, + default=16, + help="The number of responses to consider (from first index).", + ) + args = parser.parse_args() + return args + + +def main(): + args = get_args() + + # Download the evaluation results + # base_dir = "https://huggingface.co/datasets/ai2-adapt-dev/herm-debug/raw/main/best-of-n/alpaca_eval/" + # d_file = base_dir + f"{args.generation_model[0]}" + f"/{args.reward_model}.json" + # load dataset directly doesn't work with our schema for some reason + # eval_data = load_dataset("json", data_files=d_file, split="train") + + hub_file = "best-of-n/alpaca_eval/" + f"{args.generation_model[0]}" + f"/{args.reward_model}.json" + f = hf_hub_download(args.hf_evals_repo, hub_file, repo_type="dataset") + eval_data = load_dataset("json", data_files=f, split="train") + + def split_dict_lists(input_dict, chunk_size=16): + # List to hold the resulting dictionaries + result = [] + + # Iterate over each key-value pair in the input dictionary + for key, value in input_dict.items(): + # Split the list into chunks of size 16 + for i in range(0, len(value), chunk_size): + chunk = value[i : i + chunk_size] + # Create a new dictionary for each chunk and add it to the result list + result.append({key: chunk}) + + return result + + # rename column prompt to 'instruction' + eval_data = eval_data.rename_columns({"prompt": "instruction"}) + + # add empty column input + input_col = [""] * len(eval_data) + eval_data = eval_data.add_column("input", input_col) + # rename text to output + eval_data = eval_data.rename_columns({"text": "output"}) + # rename model to generator + eval_data = eval_data.rename_columns({"model": "generator"}) + + # save locally to json for sending to AlpacaEval + # create dir if needed + out_dir = os.path.dirname(f"results/AlpacaEval/{args.generation_model[0]}-{args.reward_model}.json") + os.makedirs(os.path.dirname(out_dir), exist_ok=True) + eval_data.to_json(out_dir) + + +if __name__ == "__main__": + main() diff --git a/analysis/draw_model_histogram.py b/analysis/draw_model_histogram.py new file mode 100644 index 00000000..1072590d --- /dev/null +++ b/analysis/draw_model_histogram.py @@ -0,0 +1,83 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Script to draw the distribution of model counts in a histogram + +import argparse +from pathlib import Path + +from analysis.visualization import draw_model_source_histogram, print_model_statistics + + +def get_args(): + parser = argparse.ArgumentParser() + # positional arguments + parser.add_argument("output_path", type=Path, help="Filepath to save the generated figure.") + # optional arguments + parser.add_argument( + "--dataset_name", + type=str, + default="allenai/reward-bench", + help="The HuggingFace dataset name to source the eval dataset.", + ) + parser.add_argument( + "--keys", + type=lambda x: x.split(","), + default="chosen_model,rejected_model", + help="Comma-separated columns to include in the histogram.", + ) + parser.add_argument( + "--figsize", + type=int, + nargs=2, + default=[14, 8], + help="Control the figure size when plotting.", + ) + parser.add_argument( + "--normalize", + action="store_true", + help="Normalize the values based on the total number of completions.", + ) + parser.add_argument( + "--log_scale", + action="store_true", + help="Set the y-axis to a logarithmic scale.", + ) + parser.add_argument( + "--top_n", + type=int, + default=None, + help="Only plot the top-n models in the histogram.", + ) + + args = parser.parse_args() + return args + + +def main(): + args = get_args() + draw_model_source_histogram( + dataset_name=args.dataset_name, + output_path=args.output_path, + keys=args.keys, + figsize=args.figsize, + normalize=args.normalize, + log_scale=args.log_scale, + top_n=args.top_n, + ) + print_model_statistics() + + +if __name__ == "__main__": + main() diff --git a/analysis/draw_mtbench_analysis.py b/analysis/draw_mtbench_analysis.py new file mode 100644 index 00000000..9da66957 --- /dev/null +++ b/analysis/draw_mtbench_analysis.py @@ -0,0 +1,47 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import matplotlib.pyplot as plt +import typer +from datasets import load_dataset + +from analysis.visualization import AI2_COLORS, PLOT_PARAMS + +plt.rcParams.update(PLOT_PARAMS) + + +def main(): + mtbench_url = ( + "https://huggingface.co/spaces/lmsys/mt-bench/resolve/main/data/mt_bench/model_judgment/gpt-4_single.jsonl" + ) + mtbench_data = load_dataset("json", data_files=mtbench_url, split="train") + single_turn = mtbench_data.filter(lambda x: x["judge"][1] == "single-v1") + scores = {score: single_turn.filter(lambda x: x["score"] == score).num_rows for score in range(1, 10 + 1)} + + fig, ax = plt.subplots(figsize=(8, 6)) + ax.bar(scores.keys(), scores.values(), color=AI2_COLORS.get("light_blue")) + ax.set_xlabel("MTBench Score") + ax.set_ylabel("Number of examples") + + ax.set_xticks(range(1, 10 + 1)) + + ax.spines["right"].set_visible(False) + ax.spines["top"].set_visible(False) + + plt.tight_layout() + plt.savefig("mtbench_scores.pdf", transparanet=True, dpi=120) + + +if __name__ == "__main__": + typer.run(main) diff --git a/analysis/draw_per_token_reward.py b/analysis/draw_per_token_reward.py new file mode 100644 index 00000000..44eb23bf --- /dev/null +++ b/analysis/draw_per_token_reward.py @@ -0,0 +1,119 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Draw the per token reward +# Note, requires pip install spacy-alignments + +import argparse +import json +from pathlib import Path +from typing import List + +import numpy as np +import spacy_alignments as tokenizations + +from analysis.visualization import draw_per_token_reward + +DEFAULT_DIRNAME = "per-token-reward" + + +def get_args(): + parser = argparse.ArgumentParser() + # positional arguments + parser.add_argument("text_hash", type=str, help="Path or pointer to the text hash to plot.") + parser.add_argument("output_path", type=Path, help="Filepath to save the generated figure.") + # optional arguments + parser.add_argument( + "--local", + action="store_true", + help="Find the file locally.", + ) + parser.add_argument( + "--figsize", + type=int, + nargs=2, + default=[8, 8], + help="Control the figure size when plotting.", + ) + parser.add_argument( + "--line_chart", + action="store_true", + help="Draw a line chart instead of a heatmap.", + ) + parser.add_argument( + "--do_not_align_tokens", + action="store_true", + help="If set, then tokens will not be aligned. May cause issues in the plot.", + ) + args = parser.parse_args() + return args + + +def align_tokens(reference_tokens: List[str], predicted_tokens: List[str], rewards: List[float]) -> List[float]: + """Align tokens and recompute the reward + + reference_tokens (List[str]): the reference tokenization to base the alignment on. + predicted_tokens (List[str]): the tokens from the reward pipeline. + rewards (List[float]): the per-token reward. + RETURNS (List[float]): the recomputed per-token reward. + """ + a2b, _ = tokenizations.get_alignments(reference_tokens, predicted_tokens) + rewards_list = [] + for aligned_idxs in a2b: + rewards_list.append([rewards[idx] for idx in aligned_idxs]) + aligned_rewards = list(map(np.mean, rewards_list)) + return aligned_rewards + + +def main(): + args = get_args() + # Read the results first + input_dir = Path.cwd() / DEFAULT_DIRNAME / args.text_hash + assert input_dir.exists(), f"Directory {input_dir} does not exist!" + + rewards = {} + for file in input_dir.glob("*.json"): + with open(file) as f: + results = json.load(f) + rewards[results["model"]] = results + + assert len(rewards) > 0, f"Directory {input_dir} is empty!" + + # Get reference alignment + first_key = next(iter(rewards)) # should be the same all throughout + text = rewards[first_key]["text"] + whitespace_tokenizer = lambda x: x.split(" ") # noqa + reference_tokens = whitespace_tokenizer(text) + + if not args.do_not_align_tokens: + for _, results in rewards.items(): + results["aligned_rewards"] = align_tokens( + reference_tokens=reference_tokens, + predicted_tokens=results["tokens"], + rewards=results["rewards"], + ) + + reward_key = "rewards" if args.do_not_align_tokens else "aligned_rewards" + draw_per_token_reward( + tokens=reference_tokens, + rewards=[reward[reward_key] for _, reward in rewards.items()], + model_names=[model_name for model_name, _ in rewards.items()], + output_path=args.output_path, + figsize=args.figsize, + line_chart=args.line_chart, + ) + + +if __name__ == "__main__": + main() diff --git a/analysis/draw_subtoken_statistics.py b/analysis/draw_subtoken_statistics.py new file mode 100644 index 00000000..830244ca --- /dev/null +++ b/analysis/draw_subtoken_statistics.py @@ -0,0 +1,68 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import argparse +from pathlib import Path + +from analysis.visualization import draw_subtoken_statistics +from rewardbench.constants import SUBSET_MAPPING + + +def get_args(): + parser = argparse.ArgumentParser() + # positional arguments + parser.add_argument("output_path", type=Path, help="Path to save the generated figure.") + # optional arguments + parser.add_argument( + "--tokenizer_name", + type=str, + default="oobabooga/llama-tokenizer", + help="Pointer to the HuggingFace repository to source the tokenizer.", + ) + parser.add_argument( + "--dataset_name", + type=str, + default="allenai/reward-bench", + help="Pointer to the HuggingFace repository that contains the benchmark dataset.", + ) + parser.add_argument( + "--figsize", + type=int, + nargs=2, + default=[6, 12], + help="Control the figure size when plotting.", + ) + parser.add_argument( + "--render_latex", + action="store_true", + help="If set, then it will render a LaTeX string instead of Markdown.", + ) + args = parser.parse_args() + return args + + +def main(): + args = get_args() + + draw_subtoken_statistics( + category_subsets=SUBSET_MAPPING, + dataset_name=args.dataset_name, + tokenizer_name=args.tokenizer_name, + output_path=args.output_path, + figsize=args.figsize, + ) + + +if __name__ == "__main__": + main() diff --git a/analysis/get_benchmark_results.py b/analysis/get_benchmark_results.py new file mode 100644 index 00000000..9759dc66 --- /dev/null +++ b/analysis/get_benchmark_results.py @@ -0,0 +1,222 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Script for getting reward model benchmark results + +import argparse +import os +from pathlib import Path +from typing import List + +import numpy as np +import pandas as pd +from huggingface_hub import snapshot_download + +from analysis.utils import load_results +from rewardbench.constants import ( + EXAMPLE_COUNTS, + SUBSET_MAPPING, + SUBSET_NAME_TO_PAPER_READY, +) + +LOCAL_DIR = "hf_snapshot_evals" + + +def get_args(): + parser = argparse.ArgumentParser() + # optional arguments + parser.add_argument( + "--hf_evals_repo", + type=str, + default="allenai/reward-bench-results", + help="HuggingFace repository containing the evaluation results.", + ) + parser.add_argument( + "--output_dir", + type=Path, + default=None, + help="Directory to save the results.", + ) + parser.add_argument( + "--render_latex", + action="store_true", + help="If set, then it will render a LaTeX string instead of Markdown.", + ) + parser.add_argument( + "--ignore_columns", + type=lambda x: x.split(",") if x is not None else None, + default=None, + help="Comma-separated column names to exclude from the report.", + ) + args = parser.parse_args() + return args + + +def get_average_over_rewardbench( + df: pd.DataFrame, + df_prefs: pd.DataFrame, +) -> pd.DataFrame: + """Get average over a strict subset of reward models""" + new_df = df.copy() + for subset, sub_subsets in SUBSET_MAPPING.items(): + subset_cols = [col for col in new_df.columns if col in sub_subsets] + sub_data = new_df[subset_cols].values # take the relevant column values + sub_counts = [EXAMPLE_COUNTS[s] for s in subset_cols] # take the example counts + new_df[subset] = np.average(sub_data, axis=1, weights=sub_counts) + + data_cols = list(SUBSET_MAPPING.keys()) + keep_columns = ["model"] + ["model_type"] + data_cols + new_df = new_df[keep_columns] + + # selected average from pref_sets + pref_columns = ["anthropic_helpful", "anthropic_hhh", "shp", "summarize"] + pref_data = df_prefs[pref_columns].values + + # add column test sets knowing the rows are not identical, take superset + df_prefs["Prior Sets (0.5 weight)"] = np.nanmean(pref_data, axis=1) + # add column Test Sets empty to new_df + new_df["Prior Sets (0.5 weight)"] = np.nan + # per row in new_df if model is in dataframe_prefs, add the value to new_df["Prior Sets"] + values = [] + for i, row in new_df.iterrows(): + model = row["model"] + if model in df_prefs["model"].values: + values.append(df_prefs[df_prefs["model"] == model]["Prior Sets (0.5 weight)"].values[0]) + # new_df.at[i, "Prior Sets"] = dataframe_prefs[dataframe_prefs["model"] == model]["Prior Sets"].values[0] + else: + values.append(np.nan) + + new_df["Prior Sets (0.5 weight)"] = values + + # add total average + data_cols += ["Prior Sets (0.5 weight)"] + final_data = new_df[data_cols].values + masked_data = np.ma.masked_array(final_data, np.isnan(final_data)) + weights = [2, 2, 2, 2, 1] + average = np.ma.average(masked_data, axis=1, weights=weights) + new_df["average"] = average.filled(np.nan) + + # make average third column + keep_columns = ["model", "model_type", "average"] + data_cols + new_df = new_df[keep_columns] + return new_df + + +def main(): + args = get_args() + + api_token = os.environ.get("HF_TOKEN") + if not api_token: + raise ValueError("HF_TOKEN not found!") + + print(f"Downloading repository snapshots into '{LOCAL_DIR}' directory") + # Load the remote repository using the HF API + hf_evals_repo = snapshot_download( + local_dir=Path(LOCAL_DIR) / "rewardbench", + repo_id=args.hf_evals_repo, + use_auth_token=api_token, + tqdm_class=None, + etag_timeout=30, + repo_type="dataset", + ) + hf_evals_df = load_results(hf_evals_repo, subdir="eval-set/", ignore_columns=args.ignore_columns) + hf_prefs_df = load_results(hf_evals_repo, subdir="pref-sets/", ignore_columns=args.ignore_columns) + + def _multiply_numbered_cols_by(n, df, ignore: List[str] = []): + numbered_cols = df.select_dtypes("number").columns + df[numbered_cols] *= n + return df + + all_results = { + "RewardBench - Overview": _multiply_numbered_cols_by( + 100, get_average_over_rewardbench(hf_evals_df, hf_prefs_df) + ), + "RewardBench - Detailed": _multiply_numbered_cols_by(100, hf_evals_df), + "Pref Sets - Overview": _multiply_numbered_cols_by(100, hf_prefs_df), + } + + for category, subsets in SUBSET_MAPPING.items(): + df_per_category = hf_evals_df[subsets] + df_per_category.insert(0, "model", hf_evals_df["model"].to_list()) + df_per_category.insert(1, "model_type", hf_evals_df["model_type"].to_list()) + + wt_average = [] + for _, row in hf_evals_df[subsets].iterrows(): + scores = [row[s] for s in subsets] + weights = [EXAMPLE_COUNTS.get(s) for s in subsets] + wt_average.append(np.average(scores, weights=weights)) + + df_per_category.insert(2, "average", wt_average) + all_results[category] = df_per_category + + for name, df in all_results.items(): + # df.insert(0, "", range(1, 1 + len(df))) + print(f"==================== {name} ====================") + df = df.sort_values(by="average", ascending=False).round(1) + df = df.rename(columns=SUBSET_NAME_TO_PAPER_READY) + + if args.render_latex: + # Prettify: we're using openmojis instead of a model_type column + def _prettify_model_name(row): + model_type = row["model_type"] + orig_name = row["model"] + openmoji_map = { + "Seq. Classifier": "\sequenceclf", # noqa + "Custom Classifier": "\customclf", # noqa + "DPO": "\dpo", # noqa + "generative": "\generative", # noqa + } + emoji = openmoji_map[model_type] if model_type in openmoji_map else "\\random" + + if "Cohere" in orig_name: + hf_name = "Cohere" + elif "openai" in orig_name: + hf_name = "openai" + elif "Anthropic" in orig_name: + hf_name = "Anthropic" + else: + hf_name = orig_name + + latex_name = ( + f"\href{{https://huggingface.co/{hf_name}}}" # noqa + + f"{{{emoji} {orig_name}}}".replace("_", "\_") # noqa + if orig_name != "random" + else f"{emoji} {orig_name}" + ) + + return latex_name + + reward_model_names = df.apply(lambda x: _prettify_model_name(x), axis=1).to_list() + df.insert(0, "Reward Model", reward_model_names) + df = df.drop(columns=["model", "model_type"]).rename(columns={"average": "Score"}) + if "Pref Sets" in name: + df = df.drop(columns=["Prior Sets (0.5 weight)"]) + # Rotate column names using custom LaTeX command \rot + df = df.rename(columns={col: "\\rot{" + col + "}" for col in df.columns}) + render_string = df.to_latex(index=False, float_format="%.1f").replace("NaN", "-") + else: + render_string = df.to_markdown(index=False, tablefmt="github") + render_string = render_string.replace("NaN", "") + render_string = render_string.replace("nan", "") + print(name) + print(render_string) + + if args.output_dir: + print(f"Saving results to '{args.output_dir}/{name}.csv'") + Path(args.output_dir).mkdir(exist_ok=True, parents=True) + df.to_csv(args.output_dir / f"{name}.csv", index=False) + + +if __name__ == "__main__": + main() diff --git a/analysis/get_dpo_ref_free_results.py b/analysis/get_dpo_ref_free_results.py new file mode 100644 index 00000000..d95294cf --- /dev/null +++ b/analysis/get_dpo_ref_free_results.py @@ -0,0 +1,244 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Script for getting DPO ref free results + +import argparse +import os +from pathlib import Path +from typing import List + +import numpy as np +import pandas as pd +from huggingface_hub import snapshot_download + +from analysis.utils import load_results +from rewardbench.constants import ( + EXAMPLE_COUNTS, + SUBSET_MAPPING, + SUBSET_NAME_TO_PAPER_READY, +) + +LOCAL_DIR = "hf_snapshot_evals" + + +def get_args(): + parser = argparse.ArgumentParser() + # optional arguments + parser.add_argument( + "--hf_evals_repo", + type=str, + default="allenai/reward-bench-results", + help="HuggingFace repository containing the evaluation results.", + ) + parser.add_argument( + "--output_dir", + type=Path, + default=None, + help="Directory to save the results.", + ) + parser.add_argument( + "--render_latex", + action="store_true", + help="If set, then it will render a LaTeX string instead of Markdown.", + ) + parser.add_argument( + "--ignore_columns", + type=lambda x: x.split(",") if x is not None else None, + default=None, + help="Comma-separated column names to exclude from the report.", + ) + args = parser.parse_args() + return args + + +def get_average_over_rewardbench( + df: pd.DataFrame, +) -> pd.DataFrame: + """Get average over a strict subset of reward models""" + new_df = df.copy() + for subset, sub_subsets in SUBSET_MAPPING.items(): + subset_cols = [col for col in new_df.columns if col in sub_subsets] + sub_data = new_df[subset_cols].values # take the relevant column values + sub_counts = [EXAMPLE_COUNTS[s] for s in sub_subsets] # take the example counts + new_df[subset] = np.average(sub_data, axis=1, weights=sub_counts) + + data_cols = list(SUBSET_MAPPING.keys()) + keep_columns = ["model"] + ["model_type"] + data_cols + new_df = new_df[keep_columns] + + # add total average + new_df["average"] = np.nanmean(new_df[data_cols].values, axis=1) + + # make average third column + keep_columns = ["model", "model_type", "average"] + data_cols + new_df = new_df[keep_columns] + return new_df + + +def main(): + args = get_args() + + api_token = os.environ.get("HF_TOKEN") + if not api_token: + raise ValueError("HF_TOKEN not found!") + + print(f"Downloading repository snapshots into '{LOCAL_DIR}' directory") + # Load the remote repository using the HF API + hf_evals_repo = snapshot_download( + local_dir=Path(LOCAL_DIR) / "rewardbench", + repo_id=args.hf_evals_repo, + use_auth_token=api_token, + ignore_patterns=[ + "eval-set/*", + ], + tqdm_class=None, + etag_timeout=30, + repo_type="dataset", + ) + hf_evals_df = load_results( + hf_evals_repo, subdir="eval-set/", ignore_columns=args.ignore_columns, remove_ref_free=False + ) + + # select only the rows where model_type == DPO + df_dpo = hf_evals_df[hf_evals_df["model_type"] == "DPO"] + + # select only the rows where model_type == DPO Ref. Free + df_dpo_ref_free = hf_evals_df[hf_evals_df["model_type"] == "DPO Ref. Free"] + + # if model is the same for any row of ref free, take the first row (its the default method) + df_dpo_ref_free = df_dpo_ref_free.drop_duplicates(subset=["model"], keep="first") + + # drop rows from df_dpo if df_dpo_ref_free doesn't have that model + df_dpo = df_dpo[df_dpo["model"].isin(df_dpo_ref_free["model"])] + + def _multiply_numbered_cols_by(n, df, ignore: List[str] = []): + numbered_cols = df.select_dtypes("number").columns + df[numbered_cols] *= n + return df + + dpo_scaled = _multiply_numbered_cols_by(100, get_average_over_rewardbench(df_dpo)) + ref_free_scaled = _multiply_numbered_cols_by(100, get_average_over_rewardbench(df_dpo_ref_free)) + + # order dpo_scaled and ref_free scaled by the models + dpo_scaled = dpo_scaled.sort_values(by="model") + ref_free_scaled = ref_free_scaled.sort_values(by="model") + + # create copy of the column "average" from ref_free_scaled + ref_free_avg = dpo_scaled["average"].copy() + new_avg = ref_free_scaled["average"].copy() + + # for every model, update ref_free_scaled to be the difference with dpo_scaled + for model in dpo_scaled["model"]: + # iterate over columns and update the values + for col in ref_free_scaled.columns: + if col != "model" and col != "model_type": + ref_free_scaled.loc[ref_free_scaled["model"] == model, col] = ( + ref_free_scaled.loc[ref_free_scaled["model"] == model, col].values[0] + - dpo_scaled.loc[dpo_scaled["model"] == model, col].values[0] + ) + + # rename column "average" to "delta" + ref_free_scaled = ref_free_scaled.rename(columns={"average": "Delta"}) + + # add ref_free_avg back as "Score" + ref_free_scaled["Orig. Score"] = ref_free_avg + + # move Score to be the 3rd column + cols = list(ref_free_scaled.columns) + cols.insert(2, cols.pop(cols.index("Orig. Score"))) + ref_free_scaled = ref_free_scaled.loc[:, cols] + + # add column New Score after Orig. Score from new_avg + ref_free_scaled["New Score"] = new_avg + # move New Score to be the 4th column + cols = list(ref_free_scaled.columns) + cols.insert(3, cols.pop(cols.index("New Score"))) + ref_free_scaled = ref_free_scaled.loc[:, cols] + + # sort by Score (biggest at top) + ref_free_scaled = ref_free_scaled.sort_values(by="Orig. Score", ascending=False) + + # remove model_type column + ref_free_scaled = ref_free_scaled.drop(columns=["model_type"]) + + df = ref_free_scaled.round(1) + # df.insert(0, "", range(1, 1 + len(df))) + + df = df.rename(columns=SUBSET_NAME_TO_PAPER_READY) + + if args.render_latex: + # Define a function to calculate color based on value + def color_for_value(value): + # Example: Map value to a shade of red, assuming Delta ranges from -1 to 1 + # Adjust the color scale according to your specific needs + if np.isnan(value): + return "\\cellcolor{gray!20}" # Gray color for NaN values + else: + intensity = np.abs(value) # Scale the value to [0, 100] + if value > 0: + return f"\\cellcolor{{blue!{intensity:.0f}}}" # Green for positive values + else: + return f"\\cellcolor{{red!{intensity:.0f}}}" # Red for negative values + + # Apply color formatting to the Delta column + def _apply_delta_color(row, key="Delta"): + delta_val = row[key] + colored_delta = color_for_value(delta_val) + f" {delta_val:.1f}" + return colored_delta + + # Assuming 'Delta' is a column in your dataframe + df["Delta"] = df.apply(_apply_delta_color, axis=1) + # apply delta color to Chat Chat Hard Safety and Reasoning too + df["Chat"] = df.apply(_apply_delta_color, args=("Chat",), axis=1) + df["Chat Hard"] = df.apply(_apply_delta_color, args=("Chat Hard",), axis=1) + df["Safety"] = df.apply(_apply_delta_color, args=("Safety",), axis=1) + df["Reasoning"] = df.apply(_apply_delta_color, args=("Reasoning",), axis=1) + + # Prettify: we're using openmojis instead of a model_type column + def _prettify_model_name(row): + orig_name = row["model"] + + latex_name = ( + f"\href{{https://huggingface.co/{orig_name}}}" + f"{{{orig_name}}}".replace("_", "\_") # noqa # noqa + if orig_name != "random" + else f"{orig_name}" + ) + + return latex_name + + reward_model_names = df.apply(lambda x: _prettify_model_name(x), axis=1).to_list() + df.insert(0, "Reward Model", reward_model_names) + df = df.drop( + columns=[ + "model", + ] + ) + render_string = df.to_latex(index=False, float_format="%.1f").replace("NaN", "-") + + else: + render_string = df.to_markdown(index=False, tablefmt="github") + render_string = render_string.replace("NaN", "") + render_string = render_string.replace("nan", "") + + print(render_string) + + if args.output_dir: + print(f"Saving results to '{args.output_dir}/dpo_ref_free.csv'") + Path(args.output_dir).mkdir(exist_ok=True, parents=True) + df.to_csv(args.output_dir / "dpo_ref_free.csv", index=False) + + +if __name__ == "__main__": + main() diff --git a/analysis/get_per_token_reward.py b/analysis/get_per_token_reward.py new file mode 100644 index 00000000..afed4c55 --- /dev/null +++ b/analysis/get_per_token_reward.py @@ -0,0 +1,443 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Script to output the per-token reward across a piece of text given a reward model + +import argparse +import hashlib +import json +import logging +import sys +from pathlib import Path +from typing import Any, Dict, List, Optional + +import torch +import transformers +from accelerate import Accelerator +from accelerate.logging import get_logger +from datasets import Dataset +from tqdm import tqdm +from transformers import ( + AutoModelForSequenceClassification, + AutoTokenizer, + T5ForConditionalGeneration, + pipeline, +) + +from rewardbench import models + +REWARD_MODEL_CONFIG = { + "default": { + "model_builder": AutoModelForSequenceClassification.from_pretrained, + "pipeline_builder": pipeline, + "quantized": True, + "custom_dialogue": False, + }, + "oasst": { + "model_builder": AutoModelForSequenceClassification.from_pretrained, + "pipeline_builder": pipeline, + "quantized": True, + "custom_dialogue": False, + "models": [ + "OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1", + "OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5", + "OpenAssistant/reward-model-deberta-v3-base", + "OpenAssistant/reward-model-deberta-v3-large", + "OpenAssistant/reward-model-deberta-v3-large-v2", + "OpenAssistant/reward-model-electra-large-discriminator", + ], + }, + "Starling": { + "model_builder": models.starling.build_starling_rm, + "pipeline_builder": models.starling.StarlingPipeline, + "quantized": False, + "custom_dialogue": False, + "models": [ + "berkeley-nest/Starling-RM-7B-alpha", + ], + }, + "openbmb": { + "model_builder": models.openbmb.LlamaRewardModel.from_pretrained, + "pipeline_builder": models.openbmb.OpenBMBPipeline, + "quantized": True, + "custom_dialogue": False, + "models": ["openbmb/UltraRM-13b"], + }, + "PairRM": { + "model_builder": models.pairrm.DebertaV2Model.from_pretrained, + "pipeline_builder": models.pairrm.PairRMPipeline, + "quantized": True, + "custom_dialogue": True, + "models": [ + "llm-blender/PairRM", + "llm-blender/PairRM-hf", + ], + }, + "BetterPairRM": { + "model_builder": models.betterpairrm.DebertaV2Model.from_pretrained, + "pipeline_builder": models.betterpairrm.PairRMPipeline, + "quantized": True, + "custom_dialogue": True, + "models": [ + "mightbe/Better-PairRM", + ], + }, + "SHP": { + "model_builder": T5ForConditionalGeneration.from_pretrained, + "pipeline_builder": models.shp.SHPPipeline, + "quantized": True, + "custom_dialogue": True, + "models": [ + "stanfordnlp/SteamSHP-flan-t5-large", + "stanfordnlp/SteamSHP-flan-t5-xl", + ], + }, +} + + +def get_args(): + """ + Parse arguments strings model and chat_template + """ + parser = argparse.ArgumentParser() + # positional arguments + parser.add_argument( + "text", + type=str, + help="Text to evaluate.", + ) + # optional arguments + parser.add_argument( + "--model", + type=str, + default="natolambert/gpt2-dummy-rm", + help="Path to the model or HuggingFace link.", + ) + parser.add_argument( + "--tokenizer", + type=str, + default=None, + help="Path to non-matching tokenizer, requires --direct_load.", + ) + parser.add_argument( + "--chat_template", + type=str, + default="tulu", + help="Path to the chat template.", + ) + parser.add_argument( + "--output_dir", + type=Path, + default="per-token-reward", + help="Directory to store the hashes and token information.", + ) + parser.add_argument( + "--batch_size", + type=int, + default=64, + help="Batch size for inference (if above number of tokens).", + ) + parser.add_argument( + "--random_seed", + type=int, + default=None, + help="Random seed for reproducibility.", + ) + args = parser.parse_args() + + # Input validation + def _validate_require_pairwise_inputs(models): + for model in models: + if args.model in model or args.chat_template in model: + raise ValueError(f"{model} require pairwise inputs, not supported") + + _validate_require_pairwise_inputs(models=["PairRM", "SHP"]) + + return args + + +def main(): + args = get_args() + model_name = args.model if args.model in REWARD_MODEL_CONFIG.keys() else "default" + + config = REWARD_MODEL_CONFIG.get(model_name) + + if args.random_seed: + print(f"Setting random seed to {args.random_seed}") + torch.manual_seed(args.random_seed) + + if config["custom_dialogue"]: + raise ValueError("Custom dialogue formatting not yet supported in this script") + + # Setup the accelerate state first before using logging since it errors out + # if you do the other first. + accelerator = Accelerator(cpu=True) + current_device = accelerator.process_index + + # Setup logging + logger = setup_logging(name=__name__) + logger.info(f"Running reward model on {args.model} with chat template {args.chat_template}") + + # Prepare dataset and tokenizer + tokenizer_path = args.tokenizer if args.tokenizer else args.model + print(f"Loading tokenizer from {tokenizer_path}") + tokenizer = AutoTokenizer.from_pretrained(tokenizer_path) + + def _tokenify_string(string): + _tokens = tokenizer.tokenize(string) + cumulative_texts = [tokenizer.convert_tokens_to_string(_tokens[: i + 1]) for i, _ in enumerate(_tokens)] + # Hacky approach. Ideally we can do a str.split(" ") but we want to + # preserve the subword tokenization by the tokenizer. + tokens = [tokenizer.convert_tokens_to_string([t]) for t in _tokens] + return cumulative_texts, tokens + + substrings, tokens = _tokenify_string(args.text) + dataset = Dataset.from_list([{"text": substring} for substring in substrings]) + + # Load reward model pipeline + logger.info("Loading reward model") + reward_pipeline = load_reward_pipeline( + args.model, + config=config, + tokenizer=tokenizer, + process_index=current_device, + ) + reward_pipeline_kwargs = { + "batch_size": args.batch_size, # eval_args.inference_batch_size, + "truncation": True, + "padding": True, + "max_length": 2048, + "function_to_apply": "none", # Compute raw logits + "return_token_type_ids": False, + } + + # Perform inference and get per-token reward + per_token_rewards = get_per_token_reward( + dataset, + reward_pipeline=reward_pipeline, + reward_pipeline_kwargs=reward_pipeline_kwargs, + accelerator=accelerator, + is_custom_pipeline=config["pipeline_builder"] == pipeline, + logger=logger, + dataloader_batch_size=args.batch_size, + ) + + # Report the results + for reward, span in zip(per_token_rewards, substrings): + print(f"Reward: {round(reward, 3)} | Substring: {span}") + + # Save the results + save_results( + output_dir=args.output_dir, + text=args.text, + model=args.model, + chat_template=args.chat_template, + substrings=substrings, + tokens=tokens, + rewards=per_token_rewards, + ) + + +def get_config(model_name: str, default_if_missing: bool = True) -> Dict[str, Any]: + """Get the appropriate loading configuration given a model name + + We only do minimal string matching here, basically checking if a substring, say, + oasst or others exist in REWARD_MODEL_CONFIG.keys(). + + model_name (str): the HuggingFace link or pointer to the model. + default_if_missing (bool): if True, will return the default configuration if + model is missing from our config templates. If False, then it raises + a ValueError. + RETURNS (Dict[str, Any]): the loading configuration for a given model. + """ + for tpl, config in REWARD_MODEL_CONFIG.items(): + available_models = config["models"] + if model_name in available_models: + config = config.pop("models") + print(f"Returning configuration from {tpl}. Config={config}") + return config + + # If model_name is not found anywhere + if default_if_missing: + print("Model {model_name} not found in available models. Returning default configuration") + return REWARD_MODEL_CONFIG.get("default") + else: + raise ValueError(f"Model {model_name} not found in available models!") + + +def setup_logging(name: Optional[str] = None) -> logging.Logger: + """Create a logger""" + logger = get_logger(name or __name__) + logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + handlers=[logging.StreamHandler(sys.stdout)], + ) + log_level = logging.INFO + logger.setLevel(log_level) + transformers.utils.logging.set_verbosity(log_level) + transformers.utils.logging.enable_default_handler() + transformers.utils.logging.enable_explicit_format() + return logger + + +def load_reward_pipeline( + model_name: str, + *, + config: Dict[str, Any], + tokenizer: "transformers.PreTrainedTokenizer", + process_index: int, +) -> transformers.Pipeline: + """Load a reward model pipeline given a model configuration and its tokenizer. + + model_name (str): the HuggingFace link or pointer to the model. + config (Dict[str, Any]): the model configuration. + tokenizer (transformers.PreTrainedTokenizer): the tokenizer to use with the model. + process_index (int): the machine to run the process. + RETURNS (transformers.Pipeline) the reward model pipeline + """ + model_kwargs = {"device_map": {"": process_index}} + if config["quantized"]: + model_kwargs.update( + { + "load_in_8bit": True, + "torch_dtype": torch.float16 if torch.cuda.is_available() else None, + } + ) + model_builder = config["model_builder"] + pipeline_builder = config["pipeline_builder"] + if not pipeline == pipeline_builder: + model = model_builder(model_name, **model_kwargs) + reward_pipeline = pipeline_builder( + "text-classification", + model=model, + tokenizer=tokenizer, + ) + else: + reward_pipeline = pipeline( + "text-classification", + model=model_name, + tokenizer=tokenizer, + revision="main", + model_kwargs=model_kwargs, + ) + # Tokenization settings + if reward_pipeline.tokenizer.pad_token_id is None: + reward_pipeline.model.config.pad_token_id = reward_pipeline.tokenizer.eos_token_id + reward_pipeline.tokenizer.pad_token_id = reward_pipeline.tokenizer.eos_token_id + + return reward_pipeline + + +def get_per_token_reward( + dataset: Dataset, + *, + reward_pipeline: "transformers.Pipeline", + reward_pipeline_kwargs: Dict[str, Any], + accelerator: "Accelerator", + is_custom_pipeline: bool, + logger: "logging.Logger", + dataloader_batch_size: int, +) -> List[float]: + """Get the reward per subtoken + + dataset (datasets.Dataset): the HuggingFace dataset to source the text from. + reward_pipeline (transformers.Pipeline): the reward pipeline that will provide the scores. + accelerator (Accelerator): accelerator class for training performance. + is_custom_pipeline (bool): flag to check if we need to run a data loader to collate the results. + logger (logging.Logger): logger class. + dataloader_batch_size (int): control the batch size passed to the data loader. + RETURNS (List[float]): list of computed rewards for each token. + """ + if is_custom_pipeline: + logger.info("Running dataloader to collect results") + dataloader = torch.utils.data.DataLoader( + dataset, + batch_size=dataloader_batch_size, + collate_fn=None, + shuffle=False, + drop_last=False, + ) + dataloader, model = accelerator.prepare(dataloader, reward_pipeline.model) + reward_pipeline.model = model + + results = [] + for step, batch in enumerate(tqdm(dataloader, desc="RM batch steps")): + logger.info(f"RM inference step {step}/{len(dataloader)}") + rewards = reward_pipeline(batch["text"], **reward_pipeline_kwargs) + # Some pipeline implementations return a list of dictionaries, if that's the + # case, we only take the value in the 'score' key. Else, we just return the list. + scores = [r["score"] for r in rewards] if isinstance(rewards[0], dict) else rewards.cpu().numpy().tolist() + results.extend(scores) + else: + logger.info("Running forward pass via built-in pipeline abstraction") + reward_pipeline = accelerator.prepare(reward_pipeline) + results = reward_pipeline(dataset["text"], reward_pipeline_kwargs) + + return results + + +def save_results( + output_dir: Path, + text: str, + model: str, + chat_template: str, + substrings: List[str], + tokens: List[str], + rewards: List[str], +): + """Save results to disk + + This function will first hash the prompt, and then the model with the chat template. + Then, it will save the model result in a JSON file on disk. + + output_dir (Path): directory to save the files. + text (str): the text used to hash. The hashed string will be the name of the subdirectory. + model (str): the name of the model + chat_template (str): the name of the chat template. + tokens (List[str]): the tokens extracted by the reward pipeline's tokenizer. + rewards (List[str]): the rewards computed by the reward pipeline. + """ + # Hash the text first using base16 + text_hash = hashlib.shake_256(text.encode()).hexdigest(5) + text_dir = output_dir / text_hash + text_dir.mkdir(parents=True, exist_ok=True) + + # Hash the model and chat_template combination + MODEL_CHAT_DELIMITER = "___" + model_chat_text = model + MODEL_CHAT_DELIMITER + chat_template + model_chat_hash = hashlib.shake_256(model_chat_text.encode()).hexdigest(5) + + # Output file will be the model_chat_hash + output_file = text_dir / f"{model_chat_hash}.json" + print(f"Saving results to {text_dir}") + + reward_info = { + "text": text, + "text_hash": text_hash, + "model": model, + "chat_template": chat_template, + "model_chat_hash": model_chat_hash, + "substrings": substrings, + "tokens": tokens, + "rewards": rewards, + } + + # Assumes the model output is a pointer to a HuggingFace repository + with open(output_file, "w") as f: + json.dump(reward_info, f, indent=4) + + +if __name__ == "__main__": + main() diff --git a/analysis/get_subtoken_statistics.py b/analysis/get_subtoken_statistics.py new file mode 100644 index 00000000..b70a2cf9 --- /dev/null +++ b/analysis/get_subtoken_statistics.py @@ -0,0 +1,164 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import argparse +from pathlib import Path +from typing import Any, Dict + +import numpy as np +import pandas as pd +from datasets import Dataset, load_dataset +from transformers import AutoTokenizer + + +def get_args(): + parser = argparse.ArgumentParser() + # optional arguments + parser.add_argument( + "--tokenizer_name", + type=str, + default="oobabooga/llama-tokenizer", + help="Pointer to the HuggingFace repository to source the tokenizer.", + ) + parser.add_argument( + "--dataset_name", + type=str, + default="allenai/reward-bench", + help="Pointer to the HuggingFace repository that contains the benchmark dataset.", + ) + parser.add_argument( + "--split", + type=str, + default="filtered", + help="Dataset split to use for obtaining the subtoken statistics.", + ) + parser.add_argument( + "--output_dir", + type=Path, + default=None, + help="Directory to save the results.", + ) + parser.add_argument( + "--render_latex", + action="store_true", + help="If set, then it will render a LaTeX string instead of Markdown.", + ) + args = parser.parse_args() + return args + + +def get_dataset_tokens_per_subset( + tokenizer_name: str, + dataset_name: str, + split: str, +) -> Dict[str, Dataset]: + """Get subtokens from a dataset + + Expects that the dataset contains a 'prompt', 'chosen' and 'rejected' + columns. It will then assign the tokenized list in the 'prompt_tokens', + 'chosen_tokens', and 'rejected_tokens', respectively. + """ + tokenizer = AutoTokenizer.from_pretrained(tokenizer_name) + dataset = load_dataset( + dataset_name, + download_mode="force_redownload", + split=split, + ignore_verifications=True, + ) + + subset_names = set(dataset["subset"]) + subsets = {s: dataset.filter(lambda x: x["subset"] == s) for s in subset_names} + + # Tokenize the text/s: some tokenizers like oobabooga adds a '1' padding + # when calling the tokenizer() function directly---that's why we're + # tokenizing it first to str, then calling convert_tokens_to_ids() + def _tokenize(example): + example["prompt_tokens"] = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(example["prompt"])) + example["chosen_tokens"] = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(example["chosen"])) + example["rejected_tokens"] = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(example["rejected"])) + return example + + return {s: d.map(_tokenize) for s, d in subsets.items()} + + +def main(): + args = get_args() + subsets = get_dataset_tokens_per_subset( + tokenizer_name=args.tokenizer_name, + dataset_name=args.dataset_name, + split=args.split, + ) + + # We will always include the prompt when computing the token lengths for the + # chosen and rejected responses + def _get_statistics(dataset: Dataset) -> Dict[str, Any]: + keys = ("chosen_lens", "rejected_lens", "chosen_unique_lens", "rejected_unique_lens") + stats = {k: [] for k in keys} + for eg in dataset: + prompt_tokens = eg.get("prompt_tokens") + chosen_tokens = eg.get("chosen_tokens") + rejected_tokens = eg.get("rejected_tokens") + + stats["chosen_lens"].append(len(prompt_tokens) + len(chosen_tokens)) + stats["rejected_lens"].append(len(prompt_tokens) + len(rejected_tokens)) + # We compute the uniqueness across the whole instruction, NOT individually + stats["chosen_unique_lens"].append(len(set(prompt_tokens + chosen_tokens))) + stats["rejected_unique_lens"].append(len(set(prompt_tokens + rejected_tokens))) + + return stats + + subtoken_statistics = {name: _get_statistics(subset) for name, subset in subsets.items()} + + # Create report table + df = pd.DataFrame( + [ + { + "subset": name, + "Chosen Mean Tokens": np.mean(stats["chosen_lens"]), + "Rejected Mean Tokens": np.mean(stats["rejected_lens"]), + "Chosen Max Tokens": np.max(stats["chosen_lens"]), + "Rejected Max Tokens": np.max(stats["rejected_lens"]), + "Chosen Min Tokens": np.min(stats["chosen_lens"]), + "Rejected Min Tokens": np.min(stats["rejected_lens"]), + "Chosen Mean Unique Tokens": np.mean(stats["chosen_unique_lens"]), + "Rejected Mean Unique Tokens": np.mean(stats["rejected_unique_lens"]), + "Chosen Max Unique Tokens": np.max(stats["chosen_unique_lens"]), + "Rejected Max Unique Tokens": np.max(stats["rejected_unique_lens"]), + "Chosen Min Unique Tokens": np.min(stats["chosen_unique_lens"]), + "Rejected Min Unique Tokens": np.min(stats["rejected_unique_lens"]), + } + for name, stats in subtoken_statistics.items() + ] + ) + + # sort by subset + df = df.sort_values(by="subset") + + render_string = ( + df.round(4).astype(str).to_latex(index=False) + if args.render_latex + else df.to_markdown(index=False, tablefmt="github") + ) + render_string = render_string.replace("NaN", "") + render_string = render_string.replace("nan", "") + print(render_string) + + if args.output_dir: + print(f"Saving results to '{args.output_dir}' directory") + Path(args.output_dir).mkdir(exist_ok=True, parents=True) + df.to_csv(args.output_dir / "subtoken_statistics.csv", index=False) + + +if __name__ == "__main__": + main() diff --git a/analysis/plot_all.sh b/analysis/plot_all.sh new file mode 100755 index 00000000..f33e3d27 --- /dev/null +++ b/analysis/plot_all.sh @@ -0,0 +1,12 @@ +# Source of rejected/chosen completions +python3 -m analysis.draw_model_histogram source_completion.pdf --log_scale --figsize 8 14 +python3 -m analysis.draw_model_histogram source_completions_rejected_hori.pdf --log_scale --figsize 8 7 --top_n 20 --keys rejected_model +python3 -m analysis.draw_model_histogram source_completions_chosen_hori.pdf --log_scale --figsize 8 7 --top_n 20 --keys chosen_model +# Number of chosen and rejected per subset +python3 -m analysis.draw_subtoken_statistics prompt_length.pdf --figsize 16 10 +# Violin plot of subset score distribution +python3 -m analysis.plot_per_subset_dist +# Plot per model +python3 -m analysis.plot_per_model_dist.py +# Make tables +python3 -m analysis.get_benchmark_results --render_latex diff --git a/analysis/plot_per_model_dist.py b/analysis/plot_per_model_dist.py new file mode 100644 index 00000000..93728016 --- /dev/null +++ b/analysis/plot_per_model_dist.py @@ -0,0 +1,203 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Script for getting per model distributions across reward scores + +import argparse +import os +from pathlib import Path + +import matplotlib.pyplot as plt +from huggingface_hub import snapshot_download + +from analysis.utils import load_scores +from analysis.visualization import AI2_COLORS, PLOT_PARAMS + +plt.rcParams.update(PLOT_PARAMS) + +LOCAL_DIR = "./hf_snapshot_evals/" + + +def get_args(): + parser = argparse.ArgumentParser() + # optional arguments + parser.add_argument( + "--hf_evals_repo", + type=str, + default="allenai/reward-bench-results", + help="HuggingFace repository containing the evaluation results.", + ) + parser.add_argument( + "--output_dir", + type=Path, + default="plots/", + help="Directory to save the results.", + ) + args = parser.parse_args() + return args + + +def main(): + args = get_args() + api_token = os.environ.get("HF_TOKEN") + if not api_token: + raise ValueError("HF_TOKEN not found!") + + print(f"Downloading repository snapshots into '{LOCAL_DIR}' directory") + # Load the remote repository using the HF API + hf_evals_repo = snapshot_download( + local_dir=Path(LOCAL_DIR), + repo_id=args.hf_evals_repo, + ignore_patterns=["pref-sets/*", "eval-set/*"], + use_auth_token=api_token, + tqdm_class=None, + repo_type="dataset", + ) + hf_evals_df = load_scores(hf_evals_repo, subdir="eval-set-scores/") + generate_whisker_plot( + hf_evals_df, + args.output_dir, + model_type="Seq. Classifier", + ncol=3, + height=12, + width=12, + name="score-dist-seq-core", + ) + generate_whisker_plot( + hf_evals_df, + args.output_dir, + model_type="DPO", + ncol=3, + height=16, + width=12, + name="score-dist-dpo-core", + ) + hf_prefs_df = load_scores(hf_evals_repo, subdir="pref-sets-scores/") + generate_whisker_plot( + hf_prefs_df, + args.output_dir, + model_type="Seq. Classifier", + ncol=3, + height=9, + width=12, + name="score-dist-seq-pref", + ) + generate_whisker_plot( + hf_prefs_df, + args.output_dir, + model_type="DPO", + ncol=3, + height=16, + width=12, + name="score-dist-dpo-pref", + ) + + +def generate_whisker_plot(df, output_path, model_type="Seq. Classifier", ncol=None, name=None, height=10, width=18): + # select only the correct model type + df = df[df["model_type"] == model_type] + + # get num_models + models = df["model"].unique() + n_models = len(models) + + # Calculate the number of rows and columns for the subplot grid + if ncol is not None: + ncols = ncol + nrows = int(n_models / ncols) + (n_models % ncols > 0) + else: + nrows = int(n_models**0.5) + ncols = int(n_models / nrows) + (n_models % nrows > 0) + + # Create a single figure and multiple subplots + fig, axs = plt.subplots(nrows, ncols, figsize=(width, height)) + axs = axs.flatten() # Flatten the array to iterate easily if it's 2D + + # Generate plots for each subset + for i, model in enumerate(models): + print(model) + # if subset in ["donotanswer", "hep-cpp"]: + # import ipdb; ipdb.set_trace() + # Filter data for the current subset + subset_data = df[df["model"] == model] + + # take data from scores_chosen and scores_rejected and put into one scores array + data_chosen = subset_data["scores_chosen"].values.tolist() + data_rejected = subset_data["scores_rejected"].values.tolist() + # flatten data if list of lists + if isinstance(data_chosen[0], list): + data_chosen = [item for sublist in data_chosen for item in sublist] + data_rejected = [item for sublist in data_rejected for item in sublist] + + # print(len(data)) + + # for ax[i] draw a histogram of the data + axs[i].hist([data_chosen, data_rejected], bins=20, color=[AI2_COLORS["blue"], AI2_COLORS["orange"]], alpha=0.7) + + # ax title is model name (after /) + axs[i].set_title(model.split("/")[-1]) + + # Adjusting spines and setting ticks visibility + for ax_idx, ax in enumerate(axs): + # Hide the right and top spines + ax.spines["right"].set_visible(False) + ax.spines["top"].set_visible(False) + + # Determine if the subplot is on the bottom row or the leftmost column + # is_bottom = (ax_idx // ncols) == (nrows - 1) or nrows == 1 + is_left = (ax_idx % ncols) == 0 + + # # Only show x-axis labels for bottom row subplots + # ax.tick_params(axis="x", labelbottom=is_bottom) + + # Only show y-axis labels for leftmost column subplots + ax.tick_params(axis="y", labelleft=is_left) + + # global y axis label + fig.text(0.015, 0.5, "Density", va="center", rotation="vertical") + + # global x axis label + fig.text(0.5, 0.015, "Reward Model Score", ha="center") + + bbox_anchor_y = -0.050 if name == "score-dist-seq-pref" else -0.040 + # global legend + fig.legend( + ["Chosen", "Rejected"], + loc="lower center", + frameon=False, + ncols=2, + bbox_to_anchor=(0.5, bbox_anchor_y), + ) + + # Adjust layout and aesthetics + # plt.suptitle("Per subset accuracy distribution", fontsize=16) + plt.tight_layout(rect=[0.02, 0.01, 1, 1]) # Adjust layout to make room for the title + plt.grid(False) + + # Handle any empty subplots + for j in range(i + 1, nrows * ncols): + fig.delaxes(axs[j]) + + # Show and/or save the plot + if output_path: + print(f"Saving figure to {output_path}") + # if output path doesn't exist, make it + if not output_path.exists(): + output_path.mkdir(parents=True, exist_ok=True) + plt.savefig(output_path / (name + ".pdf"), transparent=True, bbox_inches="tight") + plt.show() + + +if __name__ == "__main__": + main() diff --git a/analysis/plot_per_subset_dist.py b/analysis/plot_per_subset_dist.py new file mode 100644 index 00000000..cff7746d --- /dev/null +++ b/analysis/plot_per_subset_dist.py @@ -0,0 +1,180 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Script for getting per subset distributions + +import argparse +import os +from pathlib import Path + +import matplotlib.pyplot as plt +import numpy as np +from huggingface_hub import snapshot_download + +from analysis.utils import load_results +from analysis.visualization import AI2_COLORS, PLOT_PARAMS +from rewardbench.constants import SUBSET_NAME_TO_PAPER_READY + +plt.rcParams.update(PLOT_PARAMS) + +LOCAL_DIR = "./hf_snapshot_evals/" + + +def get_args(): + parser = argparse.ArgumentParser() + # optional arguments + parser.add_argument( + "--hf_evals_repo", + type=str, + default="allenai/reward-bench-results", + help="HuggingFace repository containing the evaluation results.", + ) + parser.add_argument( + "--output_dir", + type=Path, + default="plots/", + help="Directory to save the results.", + ) + args = parser.parse_args() + return args + + +def main(): + args = get_args() + api_token = os.environ.get("HF_TOKEN") + if not api_token: + raise ValueError("HF_TOKEN not found!") + + print(f"Downloading repository snapshots into '{LOCAL_DIR}' directory") + # Load the remote repository using the HF API + hf_evals_repo = snapshot_download( + local_dir=Path(LOCAL_DIR), + repo_id=args.hf_evals_repo, + ignore_patterns=["pref-sets-scores/*", "eval-set-scores/*"], + use_auth_token=api_token, + tqdm_class=None, + repo_type="dataset", + ) + hf_evals_df = load_results(hf_evals_repo, subdir="eval-set/") + hf_prefs_df = load_results(hf_evals_repo, subdir="pref-sets/", ignore_columns=["summarize_prompted"]) + generate_whisker_plot(hf_evals_df, args.output_dir, height=10, width=20, name="dist-core") + generate_whisker_plot(hf_prefs_df, args.output_dir, ncol=3, height=7, width=10, name="dist-pref") + + +def generate_whisker_plot(df, output_path, ncol=None, name=None, height=10, width=18): + # remove the row with random in it from the df + df = df[~df["model"].str.contains("random")] + df = df.rename(columns=SUBSET_NAME_TO_PAPER_READY) + + # Exclude 'model' and 'average' from the subsets + subsets = [col for col in df.columns if col not in ["model", "average", "model_type", "xstest", "anthropic"]] + n_subsets = len(subsets) + + # Calculate the number of rows and columns for the subplot grid + if ncol is not None: + ncols = ncol + nrows = int(n_subsets / ncols) + (n_subsets % ncols > 0) + else: + nrows = int(n_subsets**0.5) + ncols = int(n_subsets / nrows) + (n_subsets % nrows > 0) + + # Create a single figure and multiple subplots + fig, axs = plt.subplots(nrows, ncols, figsize=(width, height)) + axs = axs.flatten() # Flatten the array to iterate easily if it's 2D + + # Generate plots for each subset + for i, subset in enumerate(subsets): + # if subset in ["donotanswer", "hep-cpp"]: + # import ipdb; ipdb.set_trace() + # Filter data for the current subset + subset_data = df[[subset]].values + subset_data = subset_data[~np.isnan(subset_data)] + + # set axis ylim from 0 to 1 + axs[i].set_ylim(0, 1) + + # Generate box and whisker plot in its subplot + # axs[i].boxplot(subset_data.values, vert=True, patch_artist=True) + + def adjacent_values(vals, q1, q3): + iqr = q3 - q1 + upper_whisker = np.max(vals[vals <= q3 + 1.5 * iqr]) + lower_whisker = np.min(vals[vals >= q1 - 1.5 * iqr]) + return lower_whisker, upper_whisker + + # Calculate quartiles + quartile1, medians, quartile3 = np.percentile(subset_data, [25, 50, 75]) + whiskers = np.array(adjacent_values(np.sort(subset_data), quartile1, quartile3)) + + parts = axs[i].violinplot(subset_data, vert=True, showmedians=False, showextrema=False) + + for pc in parts["bodies"]: + pc.set_facecolor(AI2_COLORS.get("light_blue")) + pc.set_alpha(1) + + # Plot median marker + axs[i].scatter(1, medians, marker="o", color="white", s=30, zorder=3) + + # Plot quartiles and whiskers + axs[i].vlines(1, quartile1, quartile3, color="k", linestyle="-", lw=5) + axs[i].vlines(1, whiskers[0], whiskers[1], color="k", linestyle="-", lw=1) + + axs[i].set_title(subset) + + # turn off x-axis labels tick marks + axs[i].set_xticks([]) + + axs[i].set_ylabel("") + axs[i].tick_params(axis="x", which="both", bottom=False, top=False, labelbottom=False) # Remove x-tick labels + + # Adjusting spines and setting ticks visibility + for ax_idx, ax in enumerate(axs): + # Hide the right and top spines + ax.spines["right"].set_visible(False) + ax.spines["top"].set_visible(False) + + # Determine if the subplot is on the bottom row or the leftmost column + is_bottom = (ax_idx // ncols) == (nrows - 1) or nrows == 1 + is_left = (ax_idx % ncols) == 0 + + # Only show x-axis labels for bottom row subplots + ax.tick_params(axis="x", labelbottom=is_bottom) + + # Only show y-axis labels for leftmost column subplots + ax.tick_params(axis="y", labelleft=is_left) + + # global y axis label + fig.text(0.015, 0.5, "Distribution Over Model Accuracies", va="center", rotation="vertical") + + # Adjust layout and aesthetics + # plt.suptitle("Per subset accuracy distribution", fontsize=16) + plt.tight_layout(rect=[0.02, 0.01, 1, 1]) # Adjust layout to make room for the title + plt.grid(False) + + # Handle any empty subplots + for j in range(i + 1, nrows * ncols): + fig.delaxes(axs[j]) + + # Show and/or save the plot + if output_path: + print(f"Saving figure to {output_path}") + # if output path doesn't exist, make it + if not output_path.exists(): + output_path.mkdir(parents=True, exist_ok=True) + plt.savefig(output_path / (name + ".pdf"), transparent=True) + plt.show() + + +if __name__ == "__main__": + main() diff --git a/analysis/run_ensemble_offline.py b/analysis/run_ensemble_offline.py new file mode 100644 index 00000000..571c7e1a --- /dev/null +++ b/analysis/run_ensemble_offline.py @@ -0,0 +1,173 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Script for aggregating previous scores via ensemble to explore RM ensemble performance + + +import argparse + +import numpy as np +import pandas as pd +from datasets import Dataset +from huggingface_hub import hf_hub_download + +from rewardbench.constants import EXAMPLE_COUNTS, SUBSET_MAPPING +from rewardbench.utils import calculate_scores_per_section + + +def get_args(): + """ + Argparser. Gets the models you wish to analyze primarily. + """ + parser = argparse.ArgumentParser() + parser.add_argument( + "--hf_evals_repo", + type=str, + default="allenai/reward-bench-results", + help="HuggingFace repository containing the evaluation results.", + ) + parser.add_argument("--models", type=str, nargs="+", help="Models to analyze.") + parser.add_argument("--do_not_normalize", action="store_true", default=False, help="Do not normalize the values.") + # mode is ether Mean, Worst, or Uncertainty + parser.add_argument("--mode", type=str, default="Mean", help="Mode of aggregation.") + parser.add_argument("--pref_sets", action="store_true", help="Use preference sets.") + parser.add_argument("--sweep", action="store_true", default=False, help="Sweep over all model options from >3.") + return parser.parse_args() + + +if __name__ == "__main__": + args = get_args() + all_models = args.models + + ######################### + # Setup and Load + ######################### + assert isinstance(all_models, list), "Models must be a list." + assert len(all_models) > 1, "Models must not alone." + + # Assert that modes are valid + assert args.mode in ["Mean", "Worst", "Uncertainty"], "Invalid mode." + + # Load the results for the models + subdir = "eval-set-scores/" if not args.pref_sets else "pref-sets-scores/" + baseline_values = {} + data = {} + + def flatten(data): + # if all rewards is list of list, unnest + if isinstance(data[0], list): + data = [item for sublist in data for item in sublist] + return data + + for m in all_models: + hub_file = subdir + f"{m}.json" + f = hf_hub_download(args.hf_evals_repo, hub_file, repo_type="dataset") + eval_data = pd.read_json(f, orient="records") + + # add baseline values for each model + all_rewards = np.concatenate((eval_data["scores_rejected"].values, eval_data["scores_chosen"])) + all_rewards = flatten(all_rewards) + mean_reward = np.mean(all_rewards) + std_dev_reward = np.std(all_rewards) + baseline_values[m] = {"mean": mean_reward, "std_dev": std_dev_reward} + + data[m] = eval_data + + ######################### + # Normalize + ######################### + if not args.do_not_normalize: + for m in all_models: + data[m]["scores_rejected"] = ( + flatten(data[m]["scores_rejected"]) - baseline_values[m]["mean"] + ) / baseline_values[m]["std_dev"] + data[m]["scores_chosen"] = ( + flatten(data[m]["scores_chosen"]) - baseline_values[m]["mean"] + ) / baseline_values[m]["std_dev"] + + print(f"All models: {all_models}") + all_results = [] + + # check if sweep + if args.sweep: + modes = ["Mean", "Worst", "Uncertainty"] + model_index = 2 + else: + modes = [args.mode] + model_index = len(all_models) + + # iterate over all subsets from length 3 to 6 models + from itertools import combinations + + for mode in modes: + args.mode = mode + for i in range(model_index, len(all_models) + 1): + for models in combinations(all_models, i): + models = list(models) + + print(f"Analyzing models: {models}") + + ######################### + # Calculate ensembles + ######################### + def compute_reward(scores, mode): + if mode == "Mean": + return np.mean(scores) + elif mode == "Worst": + return np.min(scores) + elif mode == "Uncertainty": + return np.mean(scores) - np.std(scores) + + # iterate over ids in the dataframe + ids = data[models[0]]["id"].unique() + out_dataset = {"subsets": [], "results": []} + for id in ids: + scores_chosen = [] + scores_rejected = [] + for m in models: + scores_chosen.append(data[m].loc[data[m]["id"] == id]["scores_chosen"].values[0]) + scores_rejected.append(data[m].loc[data[m]["id"] == id]["scores_rejected"].values[0]) + + ensemble_score_chosen = compute_reward(np.array(scores_chosen), args.mode) + ensemble_score_rejected = compute_reward(np.array(scores_rejected), args.mode) + subset = data[models[0]].loc[data[models[0]]["id"] == id]["subset"].values[0] + out_dataset["subsets"].append(subset) + value = 1 if ensemble_score_chosen > ensemble_score_rejected else 0 + out_dataset["results"].append(value) + + out_dataset = Dataset.from_dict(out_dataset).to_pandas() # I know this is meh + + ######################### + # Save / Share + ######################### + + results_grouped = {} + present_subsets = np.unique(out_dataset["subsets"]) + for subset in present_subsets: + # subset_dataset = out_dataset.filter(lambda example: example["subsets"] == subset) + subset_dataset = out_dataset[out_dataset["subsets"] == subset] + num_correct = sum(subset_dataset["results"]) + num_total = len(subset_dataset["results"]) + # print(f"{subset}: {num_correct}/{num_total} ({num_correct/num_total})") + results_grouped[subset] = num_correct / num_total + + if not args.pref_sets: + results_leaderboard = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, results_grouped) + print(results_leaderboard) + results_leaderboard["models"] = "|".join(models) + results_leaderboard["mode"] = args.mode + all_results.append(results_leaderboard) + + all_results = Dataset.from_list(all_results) + all_results.to_csv("ensemble_results.csv") diff --git a/analysis/utils.py b/analysis/utils.py new file mode 100644 index 00000000..c4e0736b --- /dev/null +++ b/analysis/utils.py @@ -0,0 +1,150 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from pathlib import Path +from typing import List, Optional, Union + +import numpy as np +import pandas as pd +from datasets import load_dataset + + +def load_scores( + repo_dir_path: Union[str, Path], + subdir: str, + # ignore_columns: Optional[List[str]] = None, +) -> pd.DataFrame: + """Load results into a pandas DataFrame""" + base_dir = Path(repo_dir_path) + data_dir = base_dir / subdir + orgs_dir = {d.name: d for d in data_dir.iterdir() if d.is_dir()} + # Get all files within the subfolder orgs + model_result_files = {d: list(path.glob("*.json")) for d, path in orgs_dir.items()} + + _results: List[pd.DataFrame] = [] # will merge later + for org, filepaths in model_result_files.items(): + for filepath in filepaths: + if "nfs.cirrascale" not in str(filepath).split("scores/")[-1]: # ignore internal ai2 data + _results.append(pd.read_json(filepath, orient="records")) + results_df = pd.concat(_results) + return results_df + + +def load_results( + repo_dir_path: Union[str, Path], + subdir: str, + ignore_columns: Optional[List[str]] = None, + filepath_filter: Optional[str] = None, + remove_ref_free: bool = True, +) -> pd.DataFrame: + """Load results into a pandas DataFrame""" + base_dir = Path(repo_dir_path) + data_dir = base_dir / subdir + orgs_dir = {d.name: d for d in data_dir.iterdir() if d.is_dir()} + # Get all files within the subfolder orgs + model_result_files = {d: list(path.glob("*.json")) for d, path in orgs_dir.items()} + + _results: List[pd.DataFrame] = [] # will merge later + for org, filepaths in model_result_files.items(): + for filepath in filepaths: + # optionally filter to only files including a specific string + if filepath_filter is not None: + if filepath_filter not in str(filepath): + continue + _results.append(pd.DataFrame(load_dataset("json", data_files=str(filepath), split="train"))) + results_df = pd.concat(_results) + + # remove internal experiments under org ai2 + results_df = results_df[~results_df["model"].str.contains("ai2")] + + # Cleanup the dataframe for presentation + def _cleanup(df: pd.DataFrame) -> pd.DataFrame: + # remove chat_template comlumn + df = df.drop(columns=["chat_template"]) + + # sort columns alphabetically + df = df.reindex(sorted(df.columns), axis=1) + + # move column "model" to the front + cols = list(df.columns) + cols.insert(0, cols.pop(cols.index("model"))) + df = df.loc[:, cols] + + # select all columns except "model" + cols = df.columns.tolist() + cols.remove("model") + # if model_type is a column (pref tests may not have it) + if "model_type" in cols: + cols.remove("model_type") + # remove model_beaker from dataframe + if "model_beaker" in cols: + cols.remove("model_beaker") + df = df.drop(columns=["model_beaker"]) + + # remove ref_model + if "ref_model" in cols: + cols.remove("ref_model") + df = df.drop(columns=["ref_model"]) + + if "xstest" in cols: + cols.remove("xstest") + df = df.drop(columns=["xstest"]) + + # remove column anthropic and summarize_prompted (outdated data) + if "anthropic" in cols: + df = df.drop(columns=["anthropic"]) + cols.remove("anthropic") + if "summarize_prompted" in cols: + df = df.drop(columns=["summarize_prompted"]) + cols.remove("summarize_prompted") + # remove pku_better and pku_safer (removed from the leaderboard) + if "pku_better" in cols: + df = df.drop(columns=["pku_better"]) + cols.remove("pku_better") + if "pku_safer" in cols: + df = df.drop(columns=["pku_safer"]) + cols.remove("pku_safer") + + # round + df[cols] = df[cols] + avg = np.nanmean(df[cols].values, axis=1) + # add average column + df["average"] = avg + + # move average column to the second + cols = list(df.columns) + cols.insert(1, cols.pop(cols.index("average"))) + df = df.loc[:, cols] + + if "model_type" in cols: + cols = list(df.columns) + cols.insert(1, cols.pop(cols.index("model_type"))) + df = df.loc[:, cols] + + # remove models with DPO Ref. Free as type (future work) + if remove_ref_free: + df = df[~df["model_type"].str.contains("DPO Ref. Free", na=False)] + + # remove columns + if ignore_columns: + # Get columns from df that exist in ignore_columns + _ignore_columns = [col for col in ignore_columns if col in df.columns] + if len(_ignore_columns) > 0: + print(f"Dropping columns: {', '.join(_ignore_columns)}") + df = df.drop(_ignore_columns, axis=1) + + return df + + results_df = _cleanup(results_df) + return results_df diff --git a/analysis/visualization.py b/analysis/visualization.py new file mode 100644 index 00000000..b3176a2e --- /dev/null +++ b/analysis/visualization.py @@ -0,0 +1,462 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Module for visualizing datasets and post-hoc analyses. + +from collections import Counter +from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple + +import datasets +import matplotlib +import matplotlib.font_manager +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +from datasets import Dataset, load_dataset +from transformers import AutoTokenizer + +from rewardbench.constants import SUBSET_NAME_TO_PAPER_READY + +# From varnish: https://varnish.allenai.org/components/colors +AI2_COLORS = { + "blue": "#265ed4", + "light_blue": "#80bdff", + "orange": "#dd6502", + "light_orange": "#ffd45d", + "red": "#932222", + "light_red": "#ff9f9e", + "aqua": "#054976", + "light_aqua": "#b5f0ff", + "teal": "#078e9e", + "magenta": "#65295d", + "purple": "#5c50a4", + "green": "#005340", +} + +# matplotlib params: use plt.rcParams.update(PLOT_PARAMS) +FONT_SIZES = {"small": 18, "medium": 21, "large": 24} + + +def _get_font() -> Optional[str]: + system_fonts = matplotlib.font_manager.findSystemFonts() + available_fonts = [] + try: + for font in system_fonts: + available_fonts.append(matplotlib.font_manager.get_font(font)) + except Exception: + pass # do nothing, we just want to get the fonts that work. + if "Times New Roman" in available_fonts: + return "Times New Roman" + else: + print("Font 'Times New Roman' not found, trying 'STIX'") + if "STIX" in available_fonts: + return "STIX" + else: + print("Font 'STIX' not found. To install, see: https://www.stixfonts.org/") + print("Will use default fonts") + return None + + +PLOT_PARAMS = { + "font.family": "Times New Roman", + "font.size": FONT_SIZES.get("small"), + "axes.titlesize": FONT_SIZES.get("small"), + "axes.labelsize": FONT_SIZES.get("medium"), + "xtick.labelsize": FONT_SIZES.get("small"), + "ytick.labelsize": FONT_SIZES.get("small"), + "legend.fontsize": FONT_SIZES.get("small"), + "figure.titlesize": FONT_SIZES.get("medium"), +} +if _get_font(): + PLOT_PARAMS["font.family"] = _get_font() +plt.rcParams.update(PLOT_PARAMS) + + +def draw_per_token_reward( + tokens: List[str], + rewards: List[List[float]], + model_names: List[str], + font_size: int = 12, + output_path: Path = None, + figsize: Tuple[int, int] = (12, 12), + line_chart: bool = False, +) -> "matplotlib.axes.Axes": + """Draw a heatmap that combines the rewards + + tokens (List[str]): the canonical tokens that was used as reference during alignment. + rewards (List[List[float]]): list of rewards-per-token for each model. + model_names (List[str]): list of models. + font_size (int): set the font size. + output_path (Optional[Path]): if set, then save the figure in the specified path. + figsize (Tuple[int, int]): control the figure size when plotting. + line_chart (bool): if set, will draw a line chart instead of a figure. + RETURNS (matplotlib.axes.Axes): an Axes class containing the figure. + """ + fig, ax = plt.subplots(figsize=figsize) + rewards = np.array(rewards) + if not line_chart: + im = ax.imshow( + rewards, + cmap="viridis", + vmax=np.max(rewards), + vmin=np.min(rewards), + ) + fig.colorbar(im, ax=ax, orientation="horizontal", aspect=20, location="bottom") + ax.set_xticks(np.arange(len(tokens)), [f'"{token}"' for token in tokens]) + ax.set_yticks(np.arange(len(model_names)), model_names) + + # Add text + avg = np.mean(rewards) + for i in range(len(model_names)): + for j in range(len(tokens)): + color = "k" if rewards[i, j] >= avg else "w" + ax.text(j, i, round(rewards[i, j], 4), ha="center", va="center", color=color) + + # Make it look better + ax.xaxis.tick_top() + ax.tick_params(left=False, top=False) + ax.spines[["right", "top", "left", "bottom"]].set_visible(False) + else: + print("Drawing line chart") + idxs = np.arange(0, len(tokens)) + for model_name, per_token_rewards in zip(model_names, rewards): + ax.plot(idxs, per_token_rewards, label=model_name, marker="x") + + ax.legend(loc="upper left") + ax.set_xticks(np.arange(len(tokens)), [f'"{token}"' for token in tokens]) + ax.set_xlabel("Tokens") + ax.set_ylabel("Reward") + ax.spines[["right", "top"]].set_visible(False) + + # Added information + title = "Cumulative substring rewards" + ax.set_title(title, pad=20) + + # fig.tight_layout() + if not line_chart: + fig.subplots_adjust(left=0.5) + if output_path: + print(f"Saving per-token-reward plot to {output_path}") + plt.savefig(output_path, transparent=True, dpi=120) + + plt.show() + + +def print_model_statistics( + dataset_name: str = "allenai/reward-bench", + keys: List[str] = ["chosen_model", "rejected_model"], + render_latex: bool = False, +): + """Print model counts and statistics into a Markdown/LaTeX table + + dataset_name (str): the HuggingFace dataset name to source the eval dataset. + keys (List[str]): the dataset columns to include in the histogram. + render_latex (bool): if True, render a LaTeX string. + RETURNS (str): a Markdown/LaTeX rendering of a table. + """ + dataset = datasets.load_dataset(dataset_name, split="filtered") + + models = {key: [] for key in keys} + for example in dataset: + for key in keys: + model = example[key] + if model == "unkown": + # Fix: https://huggingface.co/datasets/allenai/reward-bench/discussions/1 + model = "unknown" + models[key].append(model) + counters = [Counter(models) for key, models in models.items()] + + # create another counter which is the sum of all in counters + total_ctr = sum(counters, Counter()) + # create a table with model, total counter, + # and the other counters by keys (0 if not in the sub counter) + total_df = pd.DataFrame(total_ctr.most_common(), columns=["Model", "Total"]) + chosen_ctr, rejected_ctr = counters + chosen_df = pd.DataFrame(chosen_ctr.most_common(), columns=["Model", "chosen_model"]) + rejected_df = pd.DataFrame(rejected_ctr.most_common(), columns=["Model", "rejected_model"]) + # merge these DataFrames into a single value + model_statistics_df = ( + total_df.merge(chosen_df, how="left") + .merge(rejected_df, how="left") + .fillna(0) + .astype({key: int for key in keys}) + ) + + render_string = ( + model_statistics_df.to_latex(index=False) + if render_latex + else model_statistics_df.to_markdown(index=False, tablefmt="github") + ) + print(render_string) + print(f"\nTotal number of models involved: {len(total_ctr) - 2}") + return render_string + + +def draw_model_source_histogram( + dataset_name: str = "allenai/reward-bench", + output_path: Optional[str] = None, + keys: List[str] = ["chosen_model", "rejected_model"], + figsize: Tuple[int, int] = (8, 4), + font_size: int = 15, + normalize: bool = False, + log_scale: bool = False, + include_title: bool = False, + top_n: Optional[int] = None, +) -> "matplotlib.axes.Axes": + """Draw a histogram of the evaluation dataset that shows completion counts between models and humans. + + dataset_name (str): the HuggingFace dataset name to source the eval dataset. + output_path (Optional[Path]): if set, then save the figure in the specified path. + keys (List[str]): the dataset columns to include in the histogram. + figsize (Tuple[int, int]): control the figure size when plotting. + font_size (int): set the font size. + normalize (bool): set to True to normalize the values based on total number completions. + log_scale (bool): set the y-axis to logarithmic scale. + top_n (Optional[int]): if set, then only plot the top-n models in the histogram. + include_title (bool): if set, then will include the title in the chart. + RETURNS (matplotlib.axes.Axes): an Axes class containing the histogram. + """ + dataset = datasets.load_dataset(dataset_name, split="filtered") + + if not all(key in dataset.features for key in keys): + raise ValueError(f"Your dataset has missing keys. Please ensure that {keys} is/are available.") + + models = [] + for example in dataset: + for key in keys: + model = example[key] + if model == "unkown": + # Fix: https://huggingface.co/datasets/allenai/reward-bench/discussions/1 + model = "unknown" + models.append(model) + counter = Counter(models) + + if normalize: + total = sum(counter.values(), 0.0) + for key in counter: + counter[key] /= total + + # Draw the histogram + fig, ax = plt.subplots(figsize=figsize) + labels, values = zip(*counter.most_common()) + + if top_n: + labels = labels[:top_n] + values = values[:top_n] + + indices = list(reversed(np.arange(len(labels)))) + width = 1 + + colors = [AI2_COLORS.get("light_blue"), AI2_COLORS.get("light_aqua")] + ax.barh(indices, values, width, color=colors * (len(indices) // 2 + 1)) + # ax.set_xticks(indices, labels, rotation=90) + ax.set_yticks(indices, labels) + ax.set_xlabel("Frequency") + ax.set_ylabel("Source of completion") + ax.spines.right.set_visible(False) + ax.spines.bottom.set_visible(False) + ax.xaxis.tick_top() + ax.xaxis.set_label_position("top") + # plt.margins(0, 0.05) + plt.margins(0.05, 0) + + title = f"Source of completions ({', '.join([k.replace('_',' ') for k in keys])})" + + if normalize: + ax.set_ylim(top=1.00) + title += " , normalized" + + if log_scale: + ax.set_xscale("log") + title += ", log-scale" + + if top_n: + title += f", showing top-{top_n}" + + if include_title: + ax.set_title(title) + fig.tight_layout() + + if output_path: + print(f"Saving histogram to {output_path}") + plt.savefig(output_path, transparent=True, dpi=120) + + return ax + + +def draw_subtoken_statistics( + category_subsets: Dict[str, List[str]], + output_path: Optional[Path] = None, + dataset_name: str = "allenai/reward-bench", + tokenizer_name: str = "oobabooga/llama-tokenizer", + figsize: Tuple[int, int] = (8, 4), + render_latex: bool = False, +) -> Tuple["matplotlib.axes.Axes", "pd.DataFrame"]: + subsets = get_dataset_tokens_per_subset( + tokenizer_name=tokenizer_name, + dataset_name=dataset_name, + split="filtered", + ) + + # We will always include the prompt when computing the token lengths for the + # chosen and rejected responses + def _get_statistics(dataset: Dataset) -> Dict[str, Any]: + keys = ("chosen_lens", "rejected_lens", "chosen_unique_lens", "rejected_unique_lens") + stats = {k: [] for k in keys} + for eg in dataset: + prompt_tokens = eg.get("prompt_tokens") + chosen_tokens = eg.get("chosen_tokens") + rejected_tokens = eg.get("rejected_tokens") + + stats["chosen_lens"].append(len(prompt_tokens) + len(chosen_tokens)) + stats["rejected_lens"].append(len(prompt_tokens) + len(rejected_tokens)) + # We compute the uniqueness across the whole instruction, NOT individually + stats["chosen_unique_lens"].append(len(set(prompt_tokens + chosen_tokens))) + stats["rejected_unique_lens"].append(len(set(prompt_tokens + rejected_tokens))) + + return stats + + subtoken_statistics = {name: _get_statistics(subset) for name, subset in subsets.items()} + + def _get_category(name: str): + for category, subsets in category_subsets.items(): + if name in subsets: + return category + + # Create report table + df = pd.DataFrame( + [ + { + "category": _get_category(name), + "subset": SUBSET_NAME_TO_PAPER_READY[name], + "chosen_avg": np.mean(stats["chosen_lens"]), + "chosen_max": np.max(stats["chosen_lens"]), + "chosen_min": np.min(stats["chosen_lens"]), + "chosen_std": np.std(stats["chosen_lens"]), + "chosen_unique_avg": np.mean(stats["chosen_unique_lens"]), + "chosen_unique_max": np.max(stats["chosen_unique_lens"]), + "chosen_unique_min": np.min(stats["chosen_unique_lens"]), + "rejected_avg": np.mean(stats["rejected_lens"]), + "rejected_max": np.max(stats["rejected_lens"]), + "rejected_min": np.min(stats["rejected_lens"]), + "rejected_std": np.std(stats["rejected_lens"]), + "rejected_unique_avg": np.mean(stats["rejected_unique_lens"]), + "rejected_unique_max": np.max(stats["rejected_unique_lens"]), + "rejected_unique_min": np.min(stats["rejected_unique_lens"]), + } + for name, stats in subtoken_statistics.items() + ] + ) + + df = df.sort_values(by=["category", "subset"]).reset_index(drop=True) + render_string = ( + df.round(4).astype(str).to_latex(index=False) + if render_latex + else df.to_markdown(index=False, tablefmt="github") + ) + render_string = render_string.replace("NaN", "") + render_string = render_string.replace("nan", "") + print(render_string) + + # Plotting + # n_categories = df["category"].nunique() + # fig, ax = plt.subplots(figsize=figsize) + fig, axs = plt.subplots(2, 2, figsize=figsize) + + axs = np.ravel(axs) + for ax, (category, df) in zip(axs, df.groupby("category")): + labels = df["subset"].to_list() + chosen_avgs = df["chosen_avg"].to_list() + chosen_stds = df["chosen_std"].to_list() + rejected_avgs = df["rejected_avg"].to_list() + rejected_stds = df["rejected_std"].to_list() + indices = list(reversed(np.arange(0, len(labels)))) + # Chosen stats + ax.errorbar( + chosen_avgs, + indices, + xerr=chosen_stds, + color=AI2_COLORS.get("light_blue"), + fmt="o", + elinewidth=2, + capsize=2, + markersize=10, + label="Chosen", + ) + # Rejected stats + ax.errorbar( + rejected_avgs, + indices, + xerr=rejected_stds, + color=AI2_COLORS.get("light_red"), + fmt="o", + markersize=10, + elinewidth=2, + capsize=2, + label="Rejected", + ) + + ax.spines.right.set_visible(False) + ax.spines.top.set_visible(False) + ax.set_yticks(indices, labels) + ax.set_title(category) + ax.set_xlim([0, 1000]) + ax.set_xlabel("Prompt length") + + # Assign everything to last + # axs[2].legend(loc=(1.0, -0.55), frameon=False, ncol=2) + # ax.set_xlabel("Prompt length") + handles, labels = ax.get_legend_handles_labels() + fig.legend(handles, labels, loc="lower center", ncol=2, frameon=False, bbox_to_anchor=(0.5, -0.05)) + + fig.tight_layout() + if output_path: + print(f"Saving to {output_path}") + plt.savefig(output_path, transparent=True, dpi=120, bbox_inches="tight") + + return ax, df + + +def get_dataset_tokens_per_subset( + tokenizer_name: str, + dataset_name: str, + split: str, +) -> Dict[str, Dataset]: + """Get subtokens from a dataset + + Expects that the dataset contains a 'prompt', 'chosen' and 'rejected' + columns. It will then assign the tokenized list in the 'prompt_tokens', + 'chosen_tokens', and 'rejected_tokens', respectively. + """ + tokenizer = AutoTokenizer.from_pretrained(tokenizer_name) + dataset = load_dataset( + dataset_name, + download_mode="force_redownload", + split=split, + ) + + subset_names = set(dataset["subset"]) + subsets = {s: dataset.filter(lambda x: x["subset"] == s) for s in subset_names} + + # Tokenize the text/s: some tokenizers like oobabooga adds a '1' padding + # when calling the tokenizer() function directly---that's why we're + # tokenizing it first to str, then calling convert_tokens_to_ids() + def _tokenize(example): + example["prompt_tokens"] = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(example["prompt"])) + example["chosen_tokens"] = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(example["chosen"])) + example["rejected_tokens"] = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(example["rejected"])) + return example + + return {s: d.map(_tokenize) for s, d in subsets.items()} diff --git a/rewardbench.pdf b/rewardbench.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0d6d241edb584e5cba6b301beca013c5f34d8fca GIT binary patch literal 739031 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 z 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

MpeMr)Sb-5*uKeljbE0Hp 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¬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

)|lUx$yd@Xyc{m-JRsEo2< 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%0AcB)m1t}pH6#kWJrF+zU$SU0cR>Ka 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 literal 0 HcmV?d00001 diff --git a/__init__.py b/rewardbench/__init__.py similarity index 100% rename from __init__.py rename to rewardbench/__init__.py diff --git a/__main__.py b/rewardbench/__main__.py similarity index 100% rename from __main__.py rename to rewardbench/__main__.py diff --git a/chattemplates.py b/rewardbench/chattemplates.py similarity index 100% rename from chattemplates.py rename to rewardbench/chattemplates.py diff --git a/constants.py b/rewardbench/constants.py similarity index 100% rename from constants.py rename to rewardbench/constants.py diff --git a/dpo.py b/rewardbench/dpo.py similarity index 100% rename from dpo.py rename to rewardbench/dpo.py diff --git a/generative.py b/rewardbench/generative.py similarity index 100% rename from generative.py rename to rewardbench/generative.py diff --git a/models/README.md b/rewardbench/models/README.md similarity index 100% rename from models/README.md rename to rewardbench/models/README.md diff --git a/models/__init__.py b/rewardbench/models/__init__.py similarity index 100% rename from models/__init__.py rename to rewardbench/models/__init__.py index 29c63fee..f9d0b9e7 100644 --- a/models/__init__.py +++ b/rewardbench/models/__init__.py @@ -29,13 +29,13 @@ from .openbmb import LlamaRewardModel, OpenBMBPipeline from .pairrm import DebertaV2PairRM, PairRMPipeline from .shp import SHPPipeline -from .slicpairpm import SlicPairPMPipeline from .starling import ( LlamaForSequenceClassification, StarlingPipeline, build_starling_rm, ) from .ziya import ZiyaPipeline +from .slicpairpm import SlicPairPMPipeline # Please open a PR if you need to add more custom modeling code / utilize existing code for you model REWARD_MODEL_CONFIG = { diff --git a/models/beaver.py b/rewardbench/models/beaver.py similarity index 100% rename from models/beaver.py rename to rewardbench/models/beaver.py diff --git a/models/betterpairrm.py b/rewardbench/models/betterpairrm.py similarity index 100% rename from models/betterpairrm.py rename to rewardbench/models/betterpairrm.py diff --git a/models/openassistant.py b/rewardbench/models/openassistant.py similarity index 100% rename from models/openassistant.py rename to rewardbench/models/openassistant.py diff --git a/models/openbmb.py b/rewardbench/models/openbmb.py similarity index 100% rename from models/openbmb.py rename to rewardbench/models/openbmb.py diff --git a/models/pairrm.py b/rewardbench/models/pairrm.py similarity index 100% rename from models/pairrm.py rename to rewardbench/models/pairrm.py diff --git a/models/shp.py b/rewardbench/models/shp.py similarity index 100% rename from models/shp.py rename to rewardbench/models/shp.py diff --git a/models/slicpairpm.py b/rewardbench/models/slicpairpm.py similarity index 73% rename from models/slicpairpm.py rename to rewardbench/models/slicpairpm.py index d412a534..4f37edc7 100644 --- a/models/slicpairpm.py +++ b/rewardbench/models/slicpairpm.py @@ -1,28 +1,20 @@ -from typing import List - -import numpy as np import torch -from transformers import AutoTokenizer +from transformers import AutoTokenizer, AutoModelForCausalLM +import numpy as np +from typing import List class SlicPairPMPipeline: def __init__(self, task, model, tokenizer): - - # self.model.eval() - self.model = model - self.task = task - self.tokenizer = tokenizer - # self.tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=True) - self.tokenizer_data_format = AutoTokenizer.from_pretrained( - "meta-llama/Meta-Llama-3-8B-Instruct", use_fast=True - ) - x1 = "\n{% for message in messages %}{% if loop.index0 % 2 == 0 %}\n\n user" - x2 = "\n {{ message['content'] }}{% else %}\n\n assistant\n" - x3 = " {{ message['content'] }}{% endif %}{% endfor %}\n\n\n" - my_template = x1 + x2 + x3 - - self.tokenizer_data_format.chat_template = my_template + #self.model = AutoModelForCausalLM.from_pretrained(model_path,).cuda() #, attn_implementation="flash_attention_2", torch_dtype=torch.bfloat16 + #self.model.eval() + self.model = model + self.task = task + self.tokenizer = tokenizer + #self.tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=True) + self.tokenizer_data_format = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct", use_fast=True) + self.tokenizer_data_format.chat_template = "\n{% for message in messages %}{% if loop.index0 % 2 == 0 %}\n\n user\n {{ message['content'] }}{% else %}\n\n assistant\n {{ message['content'] }}{% endif %}{% endfor %}\n\n\n" self.prompt_template = "[CONTEXT] {context} [RESPONSE A] {response_A} [RESPONSE B] {response_B} \n" token_id_A = self.tokenizer.encode("A", add_special_tokens=False) @@ -33,14 +25,14 @@ def __init__(self, task, model, tokenizer): self.temperature = 1.0 def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: List[str]): - """ + ''' Input: prompts: [prompt1, prompt2, ..., promptn] candidates_A: [responseA1, responses A2, ..., responseAn] candidates_B: [responseB1, responses B2, ..., responseBn] Output: probs_choose_A: [P(responseA1 > responseB1 | prompt1), ...., P(responseAn > responseBn | promptn)] - """ + ''' assert len(prompts) == len(candidates_A) assert len(candidates_A) == len(candidates_B) probs_choose_A = [] @@ -48,9 +40,9 @@ def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: Li instruction = [{"role": "user", "content": prompts[i]}] context = self.tokenizer_data_format.apply_chat_template(instruction, tokenize=False) responses = [candidates_A[i], candidates_B[i]] - + probs_chosen = [] - + for chosen_position in [0, 1]: # we swap order to mitigate position bias response_A = responses[chosen_position] @@ -60,12 +52,8 @@ def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: Li {"role": "user", "content": prompt}, ] - input_ids = self.tokenizer.encode( - self.tokenizer.apply_chat_template(message, tokenize=False).replace(self.tokenizer.bos_token, ""), - return_tensors="pt", - add_special_tokens=False, - ).cuda() - + input_ids = self.tokenizer.encode(self.tokenizer.apply_chat_template(message, tokenize=False).replace(self.tokenizer.bos_token, ""), return_tensors='pt', add_special_tokens=False).cuda() + with torch.no_grad(): output = self.model(input_ids) logit_A = output.logits[0, -1, self.token_id_A].item() @@ -78,3 +66,5 @@ def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: Li probs_choose_A.append(np.mean(probs_chosen)) # probs_chose_B = 1 - probs_choose_A return probs_choose_A + + diff --git a/models/starling.py b/rewardbench/models/starling.py similarity index 100% rename from models/starling.py rename to rewardbench/models/starling.py diff --git a/models/ziya.py b/rewardbench/models/ziya.py similarity index 100% rename from models/ziya.py rename to rewardbench/models/ziya.py diff --git a/rewardbench.py b/rewardbench/rewardbench.py similarity index 100% rename from rewardbench.py rename to rewardbench/rewardbench.py diff --git a/utils.py b/rewardbench/utils.py similarity index 100% rename from utils.py rename to rewardbench/utils.py diff --git a/scripts/configs/README.md b/scripts/configs/README.md new file mode 100644 index 00000000..67780ea3 --- /dev/null +++ b/scripts/configs/README.md @@ -0,0 +1,6 @@ +# Configs for experiments + +The following configs are supported: +1. `beaker_eval.yaml`: Config for internal AI tooling to correctly setup compute environment. +2. `eval_configs.yaml`: Configs for models to reproduce results on `run_rm.py`/`run_dpo.py`. +3. [in progress] `training_configs.yaml`: Configs for training reward models. \ No newline at end of file diff --git a/scripts/configs/beaker_eval.yaml b/scripts/configs/beaker_eval.yaml new file mode 100644 index 00000000..ec8969a3 --- /dev/null +++ b/scripts/configs/beaker_eval.yaml @@ -0,0 +1,48 @@ +version: v2 +description: rewardbench-eval-default +budget: ai2/allennlp +tasks: + - name: rewardbench-eval-default + image: + beaker: + command: [ + '/bin/sh', '-c' + ] + arguments: [ + 'python scripts/run_rm.py + --model + --tokenizer + --chat_template tulu + --batch_size 64 + --direct_load + --do_not_save' + # --use_slow_tokenizer # TODO: may have to use this when training Llama models + ] + envVars: + - name: CUDA_DEVICE_ORDER + value: PCI_BUS_ID + - name: TRANSFORMERS_CACHE + value: ./cache/ + - name: WANDB_PROJECT + value: rewardbench + - name: WANDB_WATCH + value: false + - name: WANDB_LOG_MODEL + value: false + - name: WANDB_DISABLED + value: true + - name: HF_TOKEN + secret: HF_TOKEN + datasets: + - mountPath: /net/nfs.cirrascale + source: + hostPath: /net/nfs.cirrascale + result: + # Beaker will capture anything that's written to this location and store it in the results + # dataset. + path: /output + resources: + gpuCount: 1 + context: + cluster: ai2/general-cirrascale + priority: high \ No newline at end of file diff --git a/scripts/configs/beaker_train.yaml b/scripts/configs/beaker_train.yaml new file mode 100644 index 00000000..d2bdb42e --- /dev/null +++ b/scripts/configs/beaker_train.yaml @@ -0,0 +1,35 @@ +version: v2 +description: herm-train +budget: ai2/allennlp +tasks: + - name: herm-train + image: + beaker: + command: [ + '/bin/sh', '-c' + ] + arguments: ['SCRIPT_HERE'] + envVars: + - name: CUDA_DEVICE_ORDER + value: PCI_BUS_ID + - name: TRANSFORMERS_CACHE + value: ./cache/ + - name: WANDB_PROJECT + value: open-instruct + - name: WANDB_WATCH + value: false + - name: WANDB_LOG_MODEL + value: false + - name: WANDB_DISABLED + value: true + datasets: + - mountPath: /net/nfs.cirrascale + source: + hostPath: /net/nfs.cirrascale + result: + path: /output + resources: + gpuCount: 4 + context: + cluster: ai2/allennlp-cirrascale + priority: high \ No newline at end of file diff --git a/scripts/configs/eval_bon_configs.yaml b/scripts/configs/eval_bon_configs.yaml new file mode 100644 index 00000000..f032982d --- /dev/null +++ b/scripts/configs/eval_bon_configs.yaml @@ -0,0 +1,67 @@ +# This file contains default evaluation parameters assuming access to a single A100-80GB +openbmb/UltraRM-13b: + model: 'openbmb/UltraRM-13b' + tokenizer: 'openbmb/UltraRM-13b' + chat_template: 'openbmb' + batch_size: 8 + trust_remote_code: False +OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5: + model: 'OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5' + tokenizer: 'OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5' + chat_template: 'oasst_pythia' + batch_size: 64 + trust_remote_code: False +OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1: + model: 'OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1' + tokenizer: 'OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1' + chat_template: 'oasst_pythia' + batch_size: 64 + trust_remote_code: False +OpenAssistant/reward-model-deberta-v3-large-v2: + model: 'OpenAssistant/reward-model-deberta-v3-large-v2' + tokenizer: 'OpenAssistant/reward-model-deberta-v3-large-v2' + chat_template: 'raw' + batch_size: 64 + trust_remote_code: False +weqweasdas/hh_rlhf_rm_open_llama_3b: + model: 'weqweasdas/hh_rlhf_rm_open_llama_3b' + tokenizer: 'weqweasdas/hh_rlhf_rm_open_llama_3b' + chat_template: 'Robin' + batch_size: 64 + trust_remote_code: False +# llm-blender/PairRM-hf: # not yet supported +# model: 'llm-blender/PairRM-hf' +# tokenizer: 'llm-blender/PairRM-hf' +# chat_template: 'tulu' +# batch_size: 64 +# trust_remote_code: False +berkeley-nest/Starling-RM-7B-alpha: + model: 'berkeley-nest/Starling-RM-7B-alpha' + tokenizer: 'meta-llama/Llama-2-7b-chat-hf' + chat_template: 'llama-2' + batch_size: 16 + trust_remote_code: False +# stanfordnlp/SteamSHP-flan-t5-xl: # not yet supported +# model: 'stanfordnlp/SteamSHP-flan-t5-xl' +# tokenizer: 'stanfordnlp/SteamSHP-flan-t5-xl' +# chat_template: 'tulu' +# batch_size: 32 +# trust_remote_code: False +PKU-Alignment/beaver-7b-v1.0-reward: + model: 'PKU-Alignment/beaver-7b-v1.0-reward' + tokenizer: 'PKU-Alignment/beaver-7b-v1.0-reward' + chat_template: 'pku-align' + batch_size: 16 + trust_remote_code: False +PKU-Alignment/beaver-7b-v1.0-cost: + model: 'PKU-Alignment/beaver-7b-v1.0-cost' + tokenizer: 'PKU-Alignment/beaver-7b-v1.0-cost' + chat_template: 'pku-align' + batch_size: 16 + trust_remote_code: False +IDEA-CCNL/Ziya-LLaMA-7B-Reward: + model: 'IDEA-CCNL/Ziya-LLaMA-7B-Reward' + tokenizer: 'IDEA-CCNL/Ziya-LLaMA-7B-Reward' + chat_template: 'Ziya' + batch_size: 32 + trust_remote_code: True \ No newline at end of file diff --git a/scripts/configs/eval_configs.yaml b/scripts/configs/eval_configs.yaml new file mode 100644 index 00000000..fcd8f5d9 --- /dev/null +++ b/scripts/configs/eval_configs.yaml @@ -0,0 +1,520 @@ +# This file contains default evaluation parameters assuming access to a single A100-80GB +openbmb/UltraRM-13b: + model: 'openbmb/UltraRM-13b' + tokenizer: 'openbmb/UltraRM-13b' + chat_template: 'openbmb' + batch_size: 8 + trust_remote_code: False + dpo: False +OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5: + model: 'OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5' + tokenizer: 'OpenAssistant/oasst-rm-2.1-pythia-1.4b-epoch-2.5' + chat_template: 'oasst_pythia' + batch_size: 64 + trust_remote_code: False + dpo: False +OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1: + model: 'OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1' + tokenizer: 'OpenAssistant/oasst-rm-2-pythia-6.9b-epoch-1' + chat_template: 'oasst_pythia' + batch_size: 16 + trust_remote_code: False + dpo: False +OpenAssistant/reward-model-deberta-v3-large-v2: + model: 'OpenAssistant/reward-model-deberta-v3-large-v2' + tokenizer: 'OpenAssistant/reward-model-deberta-v3-large-v2' + chat_template: 'raw' + batch_size: 64 + trust_remote_code: False + dpo: False +weqweasdas/hh_rlhf_rm_open_llama_3b: + model: 'weqweasdas/hh_rlhf_rm_open_llama_3b' + tokenizer: 'weqweasdas/hh_rlhf_rm_open_llama_3b' + chat_template: 'Robin' + batch_size: 64 + trust_remote_code: False + dpo: False +llm-blender/PairRM-hf: + model: 'llm-blender/PairRM-hf' + tokenizer: 'llm-blender/PairRM-hf' + chat_template: 'tulu' + batch_size: 64 + trust_remote_code: False + dpo: False +mightbe/Better-PairRM: + model: 'mightbe/Better-PairRM' + tokenizer: 'mightbe/Better-PairRM' + chat_template: 'tulu' + batch_size: 64 + max_length: 3370 + trust_remote_code: False + dpo: False +berkeley-nest/Starling-RM-7B-alpha: + model: 'berkeley-nest/Starling-RM-7B-alpha' + tokenizer: 'meta-llama/Llama-2-7b-chat-hf' + chat_template: 'llama-2' + batch_size: 16 + trust_remote_code: False + dpo: False +stanfordnlp/SteamSHP-flan-t5-xl: + model: 'stanfordnlp/SteamSHP-flan-t5-xl' + tokenizer: 'stanfordnlp/SteamSHP-flan-t5-xl' + chat_template: 'tulu' + batch_size: 32 + trust_remote_code: False + dpo: False +stanfordnlp/SteamSHP-flan-t5-large: + model: 'stanfordnlp/SteamSHP-flan-t5-large' + tokenizer: 'stanfordnlp/SteamSHP-flan-t5-large' + chat_template: 'tulu' + batch_size: 32 + trust_remote_code: False + dpo: False +PKU-Alignment/beaver-7b-v1.0-reward: + model: 'PKU-Alignment/beaver-7b-v1.0-reward' + tokenizer: 'PKU-Alignment/beaver-7b-v1.0-reward' + chat_template: 'pku-align' + batch_size: 16 + trust_remote_code: False + dpo: False +PKU-Alignment/beaver-7b-v1.0-cost: + model: 'PKU-Alignment/beaver-7b-v1.0-cost' + tokenizer: 'PKU-Alignment/beaver-7b-v1.0-cost' + chat_template: 'pku-align' + batch_size: 16 + trust_remote_code: False + dpo: False +IDEA-CCNL/Ziya-LLaMA-7B-Reward: + model: 'IDEA-CCNL/Ziya-LLaMA-7B-Reward' + tokenizer: 'IDEA-CCNL/Ziya-LLaMA-7B-Reward' + chat_template: 'Ziya' + batch_size: 16 + trust_remote_code: True + dpo: False +Nexusflow/Starling-RM-34B: + model: 'Nexusflow/Starling-RM-34B' + tokenizer: '01-ai/Yi-34B-Chat' + chat_template: 'Yi-34b-chat' + num_gpus: 2 + batch_size: 2 + trust_remote_code: False + dpo: False +stabilityai/stablelm-zephyr-3b: + ref_model: stabilityai/stablelm-3b-4e1t + tokenizer: stabilityai/stablelm-zephyr-3b + chat_template: + batch_size: 12 + trust_remote_code: False + dpo: True +stabilityai/stablelm-2-zephyr-1_6b: + ref_model: stabilityai/stablelm-2-1_6b + tokenizer: stabilityai/stablelm-2-zephyr-1_6b + chat_template: + batch_size: 6 + trust_remote_code: True + dpo: True +HuggingFaceH4/zephyr-7b-beta: + ref_model: HuggingFaceH4/mistral-7b-sft-beta + tokenizer: HuggingFaceH4/zephyr-7b-beta + chat_template: + batch_size: 4 + trust_remote_code: False + dpo: True +HuggingFaceH4/zephyr-7b-alpha: + ref_model: HuggingFaceH4/mistral-7b-sft-alpha + tokenizer: HuggingFaceH4/zephyr-7b-alpha + chat_template: + batch_size: 4 + trust_remote_code: False + dpo: True +Qwen/Qwen1.5-0.5B-Chat: + ref_model: Qwen/Qwen1.5-0.5B + tokenizer: Qwen/Qwen1.5-0.5B-Chat + chat_template: + batch_size: 6 + trust_remote_code: False + dpo: True +Qwen/Qwen1.5-1.8B-Chat: + ref_model: Qwen/Qwen1.5-1.8B + tokenizer: Qwen/Qwen1.5-1.8B-Chat + chat_template: + batch_size: 3 + trust_remote_code: False + dpo: True +Qwen/Qwen1.5-4B-Chat: + ref_model: Qwen/Qwen1.5-4B + tokenizer: Qwen/Qwen1.5-4B-Chat + chat_template: + batch_size: 2 + trust_remote_code: False + dpo: True +Qwen/Qwen1.5-7B-Chat: + ref_model: Qwen/Qwen1.5-7B + tokenizer: Qwen/Qwen1.5-7B-Chat + chat_template: + batch_size: 2 + trust_remote_code: False + dpo: True +Qwen/Qwen1.5-14B-Chat: + ref_model: Qwen/Qwen1.5-14B + tokenizer: Qwen/Qwen1.5-14B-Chat + chat_template: + batch_size: 2 + num_gpus: 2 + trust_remote_code: False + dpo: True +Qwen/Qwen1.5-72B-Chat: + ref_model: Qwen/Qwen1.5-72B + tokenizer: Qwen/Qwen1.5-72B-Chat + chat_template: + batch_size: 1 + num_gpus: 4 + trust_remote_code: False + dpo: True +mistralai/Mixtral-8x7B-Instruct-v0.1: + ref_model: mistralai/Mixtral-8x7B-v0.1 + tokenizer: mistralai/Mixtral-8x7B-Instruct-v0.1 + chat_template: + batch_size: 1 + num_gpus: 4 + trust_remote_code: False + dpo: True +NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO: + ref_model: NousResearch/Nous-Hermes-2-Mixtral-8x7B-SFT + tokenizer: NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO + chat_template: + batch_size: 1 + num_gpus: 4 + trust_remote_code: True + dpo: True +NousResearch/Nous-Hermes-2-Mistral-7B-DPO: + ref_model: teknium/OpenHermes-2.5-Mistral-7B + tokenizer: NousResearch/Nous-Hermes-2-Mistral-7B-DPO + chat_template: + batch_size: 4 + trust_remote_code: False + dpo: True +HuggingFaceH4/zephyr-7b-gemma-v0.1: + ref_model: HuggingFaceH4/zephyr-7b-gemma-sft-v0.1 + tokenizer: HuggingFaceH4/zephyr-7b-gemma-v0.1 + chat_template: + batch_size: 2 + trust_remote_code: False + dpo: True +allenai/tulu-2-dpo-70b: + ref_model: allenai/tulu-2-70b + tokenizer: allenai/tulu-2-dpo-70b + chat_template: tulu + num_gpus: 4 + batch_size: 2 + trust_remote_code: False + dpo: True +allenai/tulu-2-dpo-13b: + ref_model: allenai/tulu-2-13b + tokenizer: allenai/tulu-2-dpo-13b + chat_template: tulu + num_gpus: 2 + batch_size: 2 + trust_remote_code: False + dpo: True +allenai/tulu-2-dpo-7b: + ref_model: allenai/tulu-2-7b + tokenizer: allenai/tulu-2-dpo-7b + chat_template: tulu + batch_size: 2 + trust_remote_code: False + dpo: True +allenai/OLMo-7B-Instruct: + ref_model: allenai/OLMo-7B-SFT + tokenizer: allenai/OLMo-7B-Instruct + chat_template: + batch_size: 2 + trust_remote_code: True + dpo: True +# Added March 21st 2024 +weqweasdas/RM-Gemma-2B: + model: weqweasdas/RM-Gemma-2B + tokenizer: weqweasdas/RM-Gemma-2B + chat_template: # empty for tokenizer + batch_size: 16 + trust_remote_code: False + dpo: False +weqweasdas/RM-Gemma-7B: + model: weqweasdas/RM-Gemma-7B + tokenizer: weqweasdas/RM-Gemma-7B + chat_template: # empty for tokenizer + batch_size: 16 + trust_remote_code: False + dpo: False +weqweasdas/RM-Gemma-7B-4096: + model: weqweasdas/RM-Gemma-7B-4096 + tokenizer: weqweasdas/RM-Gemma-7B-4096 + chat_template: # empty for tokenizer + batch_size: 16 + trust_remote_code: False + dpo: False +Ray2333/reward-model-Mistral-7B-instruct-Unified-Feedback: + model: Ray2333/reward-model-Mistral-7B-instruct-Unified-Feedback + tokenizer: Ray2333/reward-model-Mistral-7B-instruct-Unified-Feedback + chat_template: # empty for tokenizer + batch_size: 16 + trust_remote_code: False + dpo: False +hendrydong/Mistral-RM-for-RAFT-GSHF-v0: + model: hendrydong/Mistral-RM-for-RAFT-GSHF-v0 + tokenizer: hendrydong/Mistral-RM-for-RAFT-GSHF-v0 + chat_template: # empty for tokenizer + batch_size: 16 + trust_remote_code: False + dpo: False +weqweasdas/RM-Mistral-7B: + model: weqweasdas/RM-Mistral-7B + tokenizer: weqweasdas/RM-Mistral-7B + chat_template: # empty for tokenizer + batch_size: 16 + trust_remote_code: False + dpo: False +# Added March 25th 2024 KTO / Archangel models follow +ContextualAI/archangel_sft-kto_llama7b: + model: ContextualAI/archangel_sft-kto_llama7b + ref_model: ContextualAI/archangel_sft_llama7b + tokenizer: ContextualAI/archangel_sft-kto_llama7b + chat_template: tulu + batch_size: 4 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-dpo_llama7b: + model: ContextualAI/archangel_sft-dpo_llama7b + ref_model: ContextualAI/archangel_sft_llama7b + tokenizer: ContextualAI/archangel_sft-dpo_llama7b + chat_template: tulu + batch_size: 4 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-kto_llama13b: + model: ContextualAI/archangel_sft-kto_llama13b + ref_model: ContextualAI/archangel_sft_llama13b + tokenizer: ContextualAI/archangel_sft-kto_llama13b + chat_template: tulu + batch_size: 2 + num_gpus: 2 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-dpo_llama13b: + model: ContextualAI/archangel_sft-dpo_llama13b + ref_model: ContextualAI/archangel_sft_llama13b + tokenizer: ContextualAI/archangel_sft-dpo_llama13b + chat_template: tulu + batch_size: 2 + num_gpus: 2 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-kto_llama30b: + model: ContextualAI/archangel_sft-kto_llama30b + ref_model: ContextualAI/archangel_sft_llama30b + tokenizer: ContextualAI/archangel_sft-kto_llama30b + chat_template: tulu + batch_size: 1 + num_gpus: 4 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-dpo_llama30b: + model: ContextualAI/archangel_sft-dpo_llama30b + ref_model: ContextualAI/archangel_sft_llama30b + tokenizer: ContextualAI/archangel_sft-dpo_llama30b + chat_template: tulu + batch_size: 1 + num_gpus: 4 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-dpo_pythia1-4b: + model: ContextualAI/archangel_sft-dpo_pythia1-4b + ref_model: ContextualAI/archangel_sft_pythia1-4b + tokenizer: ContextualAI/archangel_sft-dpo_pythia1-4b + chat_template: tulu + batch_size: 6 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-kto_pythia1-4b: + model: ContextualAI/archangel_sft-kto_pythia1-4b + ref_model: ContextualAI/archangel_sft_pythia1-4b + tokenizer: ContextualAI/archangel_sft-kto_pythia1-4b + chat_template: tulu + batch_size: 6 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-dpo_pythia2-8b: + model: ContextualAI/archangel_sft-dpo_pythia2-8b + ref_model: ContextualAI/archangel_sft_pythia2-8b + tokenizer: ContextualAI/archangel_sft-dpo_pythia2-8b + chat_template: tulu + batch_size: 4 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-kto_pythia2-8b: + model: ContextualAI/archangel_sft-kto_pythia2-8b + ref_model: ContextualAI/archangel_sft_pythia2-8b + tokenizer: ContextualAI/archangel_sft-kto_pythia2-8b + chat_template: tulu + batch_size: 4 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-dpo_pythia6-9b: + model: ContextualAI/archangel_sft-dpo_pythia6-9b + ref_model: ContextualAI/archangel_sft_pythia6-9b + tokenizer: ContextualAI/archangel_sft-dpo_pythia6-9b + chat_template: tulu + batch_size: 4 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-kto_pythia6-9b: + model: ContextualAI/archangel_sft-kto_pythia6-9b + ref_model: ContextualAI/archangel_sft_pythia6-9b + tokenizer: ContextualAI/archangel_sft-kto_pythia6-9b + chat_template: tulu + batch_size: 4 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-dpo_pythia12-0b: + model: ContextualAI/archangel_sft-dpo_pythia12-0b + ref_model: ContextualAI/archangel_sft_pythia12-0b + tokenizer: ContextualAI/archangel_sft-dpo_pythia12-0b + chat_template: tulu + batch_size: 4 + num_gpus: 2 + trust_remote_code: False + dpo: True +ContextualAI/archangel_sft-kto_pythia12-0b: + model: ContextualAI/archangel_sft-kto_pythia12-0b + ref_model: ContextualAI/archangel_sft_pythia12-0b + tokenizer: ContextualAI/archangel_sft-kto_pythia12-0b + chat_template: tulu + batch_size: 4 + num_gpus: 2 + trust_remote_code: False + dpo: True +0-hero/Matter-0.1-7B-DPO-preview: + model: 0-hero/Matter-0.1-7B-DPO-preview + ref_model: 0-hero/Matter-0.1-7B + tokenizer: 0-hero/Matter-0.1-7B-DPO-preview + chat_template: # none for tokenizer + batch_size: 4 + trust_remote_code: False + dpo: True +0-hero/Matter-0.1-7B-boost-DPO-preview: + model: 0-hero/Matter-0.1-7B-boost-DPO-preview + ref_model: 0-hero/Matter-0.1-7B-boost + tokenizer: 0-hero/Matter-0.1-7B-boost-DPO-preview + chat_template: # none for tokenizer + batch_size: 4 + trust_remote_code: False + dpo: True +openbmb/Eurus-RM-7b: + model: openbmb/Eurus-RM-7b + tokenizer: openbmb/Eurus-RM-7b + chat_template: mistral + batch_size: 16 + trust_remote_code: True + dpo: False +openbmb/Eurus-7b-kto: + model: openbmb/Eurus-7b-kto + ref_model: openbmb/Eurus-7b-sft + tokenizer: openbmb/Eurus-7b-kto + chat_template: mistral + batch_size: 4 + trust_remote_code: True + dpo: True +Qwen/Qwen1.5-MoE-A2.7B-Chat: + model: Qwen/Qwen1.5-MoE-A2.7B-Chat + ref_model: Qwen/Qwen1.5-MoE-A2.7B + tokenizer: Qwen/Qwen1.5-MoE-A2.7B-Chat + chat_template: # none for tokenizer + num_gpus: 2 + batch_size: 3 + trust_remote_code: False + dpo: True +stabilityai/stable-code-instruct-3b: + model: stabilityai/stable-code-instruct-3b + ref_model: stabilityai/stable-code-3b + tokenizer: stabilityai/stable-code-instruct-3b + chat_template: # none for tokenizer + batch_size: 4 + trust_remote_code: True + dpo: True +HuggingFaceH4/starchat2-15b-v0.1: + model: HuggingFaceH4/starchat2-15b-v0.1 + ref_model: HuggingFaceH4/starchat2-15b-sft-v0.1 + tokenizer: HuggingFaceH4/starchat2-15b-v0.1 + chat_template: # none for tokenizer + batch_size: 4 + num_gpus: 2 + trust_remote_code: False + dpo: True +stabilityai/stablelm-2-12b-chat: + model: stabilityai/stablelm-2-12b-chat + ref_model: stabilityai/stablelm-2-12b + tokenizer: stabilityai/stablelm-2-12b-chat + chat_template: # none for tokenizer + batch_size: 4 + num_gpus: 2 + trust_remote_code: True + dpo: True +upstage/SOLAR-10.7B-Instruct-v1.0: + model: upstage/SOLAR-10.7B-Instruct-v1.0 + ref_model: upstage/SOLAR-10.7B-v1.0 + tokenizer: upstage/SOLAR-10.7B-Instruct-v1.0 + chat_template: # none for tokenizer + batch_size: 4 + num_gpus: 2 + trust_remote_code: False + dpo: True +jondurbin/bagel-dpo-34b-v0.5: + model: jondurbin/bagel-dpo-34b-v0.5 + ref_model: jondurbin/bagel-34b-v0.5 + tokenizer: jondurbin/bagel-dpo-34b-v0.5 + chat_template: # none for tokenizer + batch_size: 2 + num_gpus: 4 + trust_remote_code: False + dpo: True +openbmb/MiniCPM-2B-dpo-fp32: + model: openbmb/MiniCPM-2B-dpo-fp32 + ref_model: openbmb/MiniCPM-2B-sft-fp32 + tokenizer: openbmb/MiniCPM-2B-dpo-fp32 + chat_template: # none for tokenizer + batch_size: 4 + trust_remote_code: True + dpo: True +# Note: way not want to re-run generative models all the time +# meta-llama/Meta-Llama-3-8B-Instruct: +# model: meta-llama/Meta-Llama-3-8B-Instruct +# tokenizer: meta-llama/Meta-Llama-3-8B-Instruct +# chat_template: # none for tokenizer +# trust_remote_code: False +# num_gpus: 1 +# generative: True +# dpo: False +# meta-llama/Meta-Llama-3-70B-Instruct: +# model: meta-llama/Meta-Llama-3-70B-Instruct +# tokenizer: meta-llama/Meta-Llama-3-70B-Instruct +# chat_template: # none for tokenizer +# trust_remote_code: False +# num_gpus: 4 +# generative: True +# dpo: False +# CohereForAI/c4ai-command-r-plus: +# model: CohereForAI/c4ai-command-r-plus +# tokenizer: CohereForAI/c4ai-command-r-plus +# chat_template: # none for tokenizer +# trust_remote_code: False +# num_gpus: 4 +# generative: True +# dpo: False +# End generative reward models +sfairXC/FsfairX-LLaMA3-RM-v0.1: + model: sfairXC/FsfairX-LLaMA3-RM-v0.1 + tokenizer: sfairXC/FsfairX-LLaMA3-RM-v0.1 + chat_template: # none for tokenizer + batch_size: 4 + trust_remote_code: False + dpo: False diff --git a/scripts/configs/stage3_no_offloading.conf b/scripts/configs/stage3_no_offloading.conf new file mode 100644 index 00000000..532669bf --- /dev/null +++ b/scripts/configs/stage3_no_offloading.conf @@ -0,0 +1,41 @@ +{ + "bf16": { + "enabled": "auto" + }, + "optimizer": { + "type": "AdamW", + "params": { + "lr": "auto", + "betas": "auto", + "eps": "auto", + "weight_decay": "auto" + } + }, + "scheduler": { + "type": "WarmupDecayLR", + "params": { + "total_num_steps": "auto", + "warmup_min_lr": "auto", + "warmup_max_lr": "auto", + "warmup_num_steps": "auto" + } + }, + "zero_optimization": { + "stage": 3, + "overlap_comm": true, + "contiguous_gradients": true, + "sub_group_size": 1e9, + "reduce_bucket_size": "auto", + "stage3_prefetch_bucket_size": "auto", + "stage3_param_persistence_threshold": "auto", + "stage3_max_live_parameters": 1e9, + "stage3_max_reuse_distance": 1e9, + "stage3_gather_16bit_weights_on_model_save": true + }, + "gradient_accumulation_steps": "auto", + "gradient_clipping": "auto", + "steps_per_print": 1e5, + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "wall_clock_breakdown": false +} \ No newline at end of file diff --git a/scripts/configs/train_configs.yaml b/scripts/configs/train_configs.yaml new file mode 100644 index 00000000..997e5217 --- /dev/null +++ b/scripts/configs/train_configs.yaml @@ -0,0 +1,31 @@ +# This file contains default training parameters assuming access to A100-80GBs +allenai/tulu-2-7b: + model: 'allenai/tulu-2-7b' + tokenizer: 'allenai/tulu-2-7b' + chat_template: 'tulu' + num_gpus: 4 + total_batch_size: 128 + batch_size_per_gpu: 2 + max_seq_len: 1024 + use_flash_attn: True + bf16: True +meta-llama/Llama-2-7b-chat-hf: + model: 'meta-llama/Llama-2-7b-chat-hf' + tokenizer: 'meta-llama/Llama-2-7b-chat-hf' + chat_template: 'llama-2' + num_gpus: 4 + total_batch_size: 128 + batch_size_per_gpu: 2 + max_seq_len: 1024 + use_flash_attn: True + bf16: True +TinyLlama/TinyLlama-1.1B-Chat-v1.0: + model: 'TinyLlama/TinyLlama-1.1B-Chat-v1.0' + tokenizer: 'TinyLlama/TinyLlama-1.1B-Chat-v1.0' + chat_template: 'llama-2' + num_gpus: 2 + total_batch_size: 128 + batch_size_per_gpu: 16 + max_seq_len: 1024 + use_flash_attn: True + bf16: True \ No newline at end of file diff --git a/scripts/run_bon.py b/scripts/run_bon.py new file mode 100644 index 00000000..cd143d47 --- /dev/null +++ b/scripts/run_bon.py @@ -0,0 +1,324 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Runs best of n (BoN) ranking +# TODO: implement this for DPO models + +import argparse +import logging +import os +import sys + +import torch +import transformers +from accelerate import Accelerator +from accelerate.logging import get_logger +from fastchat.conversation import get_conv_template +from tqdm import tqdm +from transformers import AutoTokenizer, pipeline + +from rewardbench import ( + REWARD_MODEL_CONFIG, + check_tokenizer_chat_template, + load_bon_dataset, + save_to_hub, +) + +# get token from HF_TOKEN env variable, but if it doesn't exist pass none +HF_TOKEN = os.getenv("HF_TOKEN", None) +# this is necessary to automatically log in when running this script in docker/batch beaker jobs +if HF_TOKEN is not None: + from huggingface_hub._login import _login + + _login(token=HF_TOKEN, add_to_git_credential=False) + + +def get_args(): + """ + Parse arguments strings model and chat_template + """ + parser = argparse.ArgumentParser() + parser.add_argument("--model", type=str, required=True, help="path to model") + parser.add_argument("--tokenizer", type=str, default=None, help="path to non-matching tokenizer to model") + parser.add_argument("--chat_template", type=str, default="tulu", help="path to chat template") + parser.add_argument( + "--trust_remote_code", action="store_true", default=False, help="directly load model instead of pipeline" + ) + parser.add_argument("--do_not_save", action="store_true", help="do not save results to hub (for debugging)") + parser.add_argument("--batch_size", type=int, default=64, help="batch size for inference") + parser.add_argument("--best_of", type=int, default=16, help="number of best of n to select from") + parser.add_argument( + "--debug", action="store_true", help="run on common preference sets instead of our custom eval set" + ) + args = parser.parse_args() + return args + + +def main(): + args = get_args() + ############### + # Setup logging + ############### + accelerator = Accelerator() + current_device = accelerator.process_index + + logger = get_logger(__name__) + logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + handlers=[logging.StreamHandler(sys.stdout)], + ) + log_level = logging.INFO + logger.setLevel(log_level) + transformers.utils.logging.set_verbosity(log_level) + transformers.utils.logging.enable_default_handler() + transformers.utils.logging.enable_explicit_format() + + logger.info(f"Running reward model on {args.model} with chat template {args.chat_template}") + + # load chat template + chat_template = args.chat_template + conv = get_conv_template(chat_template) + + if args.model in REWARD_MODEL_CONFIG: + config = REWARD_MODEL_CONFIG[args.model] + else: + config = REWARD_MODEL_CONFIG["default"] + logger.info(f"Using reward model config: {config}") + if args.trust_remote_code: + logger.info("Loading model with Trust Remote Code") + + # Default entries + # "model_builder": AutoModelForSequenceClassification.from_pretrained, + # "pipeline_builder": pipeline, + # "quantized": True, + # "custom_dialogue": False, + # "model_type": "Seq. Classifier" + + quantized = config["quantized"] # only Starling isn't quantized for now + custom_dialogue = config["custom_dialogue"] + _ = config["model_type"] # todo will be needed to add PairRM and SteamSHP + model_builder = config["model_builder"] + pipeline_builder = config["pipeline_builder"] + + # not included in config to make user explicitly understand they are passing this + trust_remote_code = args.trust_remote_code + + ############################ + # Load dataset + ############################ + logger.info("*** Load dataset ***") + tokenizer_path = args.tokenizer if args.tokenizer else args.model + tokenizer = AutoTokenizer.from_pretrained(tokenizer_path, trust_remote_code=args.trust_remote_code) + dataset = load_bon_dataset( + best_of=args.best_of, + conv=conv, + custom_dialogue_formatting=custom_dialogue, + tokenizer=tokenizer, + logger=logger, + remove_columns=["config", "prompt", "dataset_details", "model_input", "input"], + # remove columns saves spave on GPU when running inference + ) + # copy id for saving, then remove + ids = dataset["id"] + dataset = dataset.remove_columns("id") + + # debug: use only 10 examples + if args.debug: + dataset = dataset.select(range(10)) + ids = ids[:10] + + ############################ + # Load reward model pipeline + ############################ + BATCH_SIZE = args.batch_size + logger.info("*** Load reward model ***") + reward_pipeline_kwargs = { + "batch_size": BATCH_SIZE, # eval_args.inference_batch_size, + "truncation": True, + "padding": True, + "max_length": 2048, + "function_to_apply": "none", # Compute raw logits + "return_token_type_ids": False, + } + if quantized: + model_kwargs = { + "load_in_8bit": True, + "device_map": {"": current_device}, + "torch_dtype": torch.float16 if torch.cuda.is_available() else None, + } + else: + model_kwargs = {"device_map": {"": current_device}} + + model = model_builder(args.model, **model_kwargs, trust_remote_code=trust_remote_code) + reward_pipe = pipeline_builder( + "text-classification", + model=model, + tokenizer=tokenizer, + ) + + ############################ + # Tokenization settings & dataset preparation + ############################ + # set pad token to eos token if not set + if reward_pipe.tokenizer.pad_token_id is None: + reward_pipe.model.config.pad_token_id = reward_pipe.tokenizer.eos_token_id + reward_pipe.tokenizer.pad_token_id = reward_pipe.tokenizer.eos_token_id + # For models whose config did not contains `pad_token_id` + if reward_pipe.model.config.pad_token_id is None: + reward_pipe.model.config.pad_token_id = reward_pipe.tokenizer.pad_token_id + + # if using fastchat template (no template in tokenizer), make the RM tokenizer output an EOS token + if not check_tokenizer_chat_template(tokenizer): + reward_pipe.tokenizer.add_eos_token = True + + ############################ + # Run inference [1/2]" built in transformers + ############################ + # if using HF pipeline, can pass entire dataset and get results + # first, handle custom pipelines that we must batch normally + if pipeline_builder == pipeline: + logger.info("*** Running forward pass via built in pipeline abstraction ***") + # this setup can be optimized slightly with one pipeline call + # prepare for inference + reward_pipe = accelerator.prepare(reward_pipe) + + results = reward_pipe(dataset["text"], **reward_pipeline_kwargs) + + # extract scores from results which is list of dicts, e.g. [{'label': 'LABEL_1', 'score': 0.6826171875},... ] + scores = [r["score"] for r in results] + + ############################ + # Run inference [2/2] custom pipelines + ############################ + else: + logger.info("*** Running dataloader to collect results ***") + # TODO make more custom pipelines work with pre-tokenized data + from torch.utils.data.dataloader import default_collate + + # for PairRM, hmm, will move all of this later + def custom_collate_fn(batch): + # check if ['text_chosen'] is in first batch element + # Check if the first element of the batch is a dictionary + if isinstance(batch[0]["text"][0], dict): + return batch # Return the batch as-is if it's a list of dicts + else: + return default_collate(batch) # Use the default collate behavior otherwise + + dataloader = torch.utils.data.DataLoader( + dataset, + batch_size=BATCH_SIZE, + collate_fn=custom_collate_fn, # if not args.pref_sets else None, + shuffle=False, + drop_last=False, + ) + + dataloader, model = accelerator.prepare(dataloader, reward_pipe.model) + reward_pipe.model = model + + scores = [] + for step, batch in enumerate(tqdm(dataloader, desc="RM batch steps")): + logger.info(f"RM inference step {step}/{len(dataloader)}") + + if "PairRM" in args.model or "SteamSHP" in args.model: + raise NotImplementedError("PairRM and SteamSHP are not yet supported for batched inference") + else: + rewards = reward_pipe(batch["text"], **reward_pipeline_kwargs) + + # for each item in batch, record 1 if chosen > rejected + # extra score from dict within batched results (e.g. logits) + # [{'label': 'LABEL_1', 'score': 0.6826171875},... ] + if isinstance(rewards[0], dict): + scores_batch = [result["score"] for result in rewards] + # for classes that directly output scores (custom code) + else: + scores_batch = rewards.cpu().numpy().tolist() + + scores.extend(scores_batch) + + ############################ + # Print & process results + ############################ + # add column for results for easy printing + out_dataset = dataset.add_column("scores", scores) + + # add subsets back (removed so it's not handled by cuda) + out_dataset = out_dataset.add_column("id", ids) + + # remove columns prompt, text, and config to save space + # will get these from the source dataset when loading + out_dataset = out_dataset.remove_columns("text") + + alpaca_eval = out_dataset.filter(lambda x: x["subset"] == "alpaca_eval") + mt_bench = out_dataset.filter(lambda x: x["subset"] == "mt_bench") + + # remove subset column from both + alpaca_eval = alpaca_eval.remove_columns("subset") + mt_bench = mt_bench.remove_columns("subset") + + # remove model_input + alpaca_eval = alpaca_eval.remove_columns("model_input") + mt_bench = mt_bench.remove_columns("model_input") + + # split into per-model + alpaca_eval_zephyr = alpaca_eval.filter(lambda x: x["model"] == "HuggingFaceH4/zephyr-7b-beta") + alpaca_eval_tulu = alpaca_eval.filter(lambda x: x["model"] == "allenai/tulu-2-dpo-13b") + mt_bench_zephyr = mt_bench.filter(lambda x: x["model"] == "HuggingFaceH4/zephyr-7b-beta") + mt_bench_tulu = mt_bench.filter(lambda x: x["model"] == "allenai/tulu-2-dpo-13b") + + # def flatten and to dict + def flatten_data(dataset): + dictionary = dataset.to_dict() + return [dict(zip(dictionary.keys(), values)) for values in zip(*dictionary.values())] + + ############################ + # Upload results to hub + ############################ + sub_path = "best-of-n/" + results_url = save_to_hub( + flatten_data(alpaca_eval_zephyr), + args.model, + sub_path + "alpaca_eval/zephyr-7b/", + args.debug, + local_only=args.do_not_save, + ) + results_url_2 = save_to_hub( + flatten_data(alpaca_eval_tulu), + args.model, + sub_path + "alpaca_eval/tulu-13b/", + args.debug, + local_only=args.do_not_save, + ) + results_url_3 = save_to_hub( + flatten_data(mt_bench_zephyr), + args.model, + sub_path + "mt_bench/zephyr-7b/", + args.debug, + local_only=args.do_not_save, + ) + results_url_4 = save_to_hub( + flatten_data(mt_bench_tulu), + args.model, + sub_path + "mt_bench/tulu-13/", + args.debug, + local_only=args.do_not_save, + ) + if not args.do_not_save: + logger.info( + f"Uploaded reward model results to {results_url}, {results_url_2}, {results_url_3}, {results_url_4}" + ) + + +if __name__ == "__main__": + main() diff --git a/scripts/run_dpo.py b/scripts/run_dpo.py new file mode 100644 index 00000000..0cbf554c --- /dev/null +++ b/scripts/run_dpo.py @@ -0,0 +1,290 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import argparse +import logging +import os +import sys + +import numpy as np +import torch +import transformers +from accelerate import Accelerator +from accelerate.logging import get_logger +from fastchat.conversation import get_conv_template +from tqdm import tqdm +from trl.trainer.utils import DPODataCollatorWithPadding + +from rewardbench import DPO_MODEL_CONFIG, DPOInference, load_eval_dataset, save_to_hub +from rewardbench.constants import EXAMPLE_COUNTS, SUBSET_MAPPING +from rewardbench.utils import calculate_scores_per_section + +# get token from HF_TOKEN env variable, but if it doesn't exist pass none +HF_TOKEN = os.getenv("HF_TOKEN", None) +# this is necessary to automatically log in when running this script in docker/batch beaker jobs +if HF_TOKEN is not None: + from huggingface_hub._login import _login + + _login(token=HF_TOKEN, add_to_git_credential=False) + + +def get_args(): + """ + Parse arguments strings model and chat_template + """ + parser = argparse.ArgumentParser() + parser.add_argument("--model", type=str, required=True, help="path to model") + parser.add_argument("--ref_model", type=str, default=None, help="path to model") + parser.add_argument( + "--ref_free_type", type=str, default="avg", help="type of reference free normalization (norm, avg, or sum)" + ) + parser.add_argument("--tokenizer", type=str, default=None, help="path to non-matching tokenizer") + parser.add_argument("--chat_template", type=str, default="tulu", help="path to chat template") + parser.add_argument("--do_not_save", action="store_true", help="do not save results to hub (for debugging)") + parser.add_argument("--batch_size", type=int, default=6, help="batch size for inference") + parser.add_argument( + "--pref_sets", action="store_true", help="run on common preference sets instead of our custom eval set" + ) + parser.add_argument( + "--trust_remote_code", action="store_true", default=False, help="directly load model instead of pipeline" + ) + parser.add_argument("--debug", type=bool, default=False, help="use only 10 examples") + parser.add_argument( + "--disable_beaker_save", action="store_true", help="disable saving the main results in a file for AI2 Beaker" + ) + + args = parser.parse_args() + return args + + +def main(): + args = get_args() + accelerator = Accelerator() + + ############### + # Setup logging + ############### + logger = get_logger(__name__) + logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + handlers=[logging.StreamHandler(sys.stdout)], + ) + log_level = logging.INFO + logger.setLevel(log_level) + transformers.utils.logging.set_verbosity(log_level) + transformers.utils.logging.enable_default_handler() + transformers.utils.logging.enable_explicit_format() + + logger.info(f"Running reward model on {args.model} with chat template {args.chat_template}") + if args.trust_remote_code: + logger.info("Loading model with Trust Remote Code") + + if args.model in DPO_MODEL_CONFIG: + config = DPO_MODEL_CONFIG[args.model] + else: + config = DPO_MODEL_CONFIG["default"] + logger.info(f"Using dpo model config: {config}") + + model_builder = config["model_builder"] + tokenizer_builder = config["tokenizer_builder"] + + assert args.model != args.ref_model, "policy and reference model should be different" + # load chat template + chat_template = args.chat_template + conv = get_conv_template(chat_template) + + # define reference free + if args.ref_model is None: + ref_free = True + logger.info("Running reference free DPO - no reference model provided") + else: + ref_free = False + logger.info(f"Running DPO with reference model {args.ref_model}") + + ############################ + # Load dataset + ############################ + logger.info("*** Load dataset ***") + tokenizer_path = args.tokenizer if args.tokenizer else args.model + tokenizer = tokenizer_builder(tokenizer_path, trust_remote_code=args.trust_remote_code) + tokenizer.pad_token = tokenizer.eos_token + # if no BOS token, set as pad token, e.g. QWEN models + if tokenizer.bos_token is None: + tokenizer.bos_token_id = tokenizer.eos_token_id + tokenizer.pad_token_id = tokenizer.eos_token_id + + dataset, subsets = load_eval_dataset( + core_set=not args.pref_sets, + conv=conv, + tokenizer=tokenizer, + logger=logger, + keep_columns=["text_chosen", "text_rejected", "id", "prompt"], + ) + + dataset = dataset.remove_columns("id") + # debug: use only 10 examples + if args.debug: + dataset = dataset.select(range(10)) + subsets = subsets[:10] + + ############################ + # Load reward model pipeline + ############################ + BATCH_SIZE = args.batch_size + + model_kwargs = { + "load_in_8bit": True, + "device_map": "auto", + "torch_dtype": torch.float16 if torch.cuda.is_available() else None, + } + model = model_builder( + args.model, + trust_remote_code=args.trust_remote_code, + **model_kwargs, + ) + + if ref_free: + ref_model = None + else: + model_kwargs_ref = { + "load_in_8bit": True, + "device_map": "auto", + "torch_dtype": torch.float16 if torch.cuda.is_available() else None, + } + ref_model = model_builder( + args.ref_model, + trust_remote_code=args.trust_remote_code, + **model_kwargs_ref, + ) + + # use internal inference functions in DPO trainer + dpo = DPOInference( + model, + ref_model, + tokenizer=tokenizer, + accelerator=accelerator, + ref_free_norm=args.ref_free_type, + # norm is norm, avg is average, sum is sum + ) + # tokenize dataset + column_names = list(dataset.features) + + tokenized_dataset = dataset.map(dpo.tokenize_row, remove_columns=column_names) + dataloader = torch.utils.data.DataLoader( + tokenized_dataset, + batch_size=BATCH_SIZE, + collate_fn=DPODataCollatorWithPadding( + pad_token_id=tokenizer.pad_token_id, + label_pad_token_id=dpo.label_pad_token_id, + is_encoder_decoder=dpo.is_encoder_decoder, + ), + # collate_fn = lambda x: x, # fix weird batching error + shuffle=False, + drop_last=False, + ) + results = [] + scores_chosen = [] + scores_rejected = [] + + for step, batch in enumerate(tqdm(dataloader, desc="RM batch steps")): + logger.info(f"RM inference step {step}/{len(dataloader)}") + + rewards_chosen, rewards_rejected = dpo.inference_step(batch, ref_free=ref_free) + + # for each item in batch, record 1 if chosen > rejected + # extra score from dict within batched results (e.g. logits) + # [{'label': 'LABEL_1', 'score': 0.6826171875},... ] + if isinstance(rewards_chosen[0], dict): + scores_chosen_batch = [result["score"] for result in rewards_chosen] + scores_rejected_batch = [result["score"] for result in rewards_rejected] + # for classes that directly output scores (custom code) + else: + scores_chosen_batch = rewards_chosen.cpu().numpy().tolist() + scores_rejected_batch = rewards_rejected.cpu().numpy().tolist() + + [ + results.append(1) if chosen > rejected else results.append(0) + for chosen, rejected in zip(scores_chosen_batch, scores_rejected_batch) + ] + scores_chosen += scores_chosen_batch + scores_rejected += scores_rejected_batch + + ############################ + # Print & process results + ############################ + # add column for results for easy printing + out_dataset = dataset.add_column("results", results) + + # add subsets back (removed so it's not handled by cuda) + out_dataset = out_dataset.add_column("subset", subsets) + # add scores_chosen and scores_rejected to the dataset + out_dataset = out_dataset.add_column("scores_chosen", scores_chosen) + out_dataset = out_dataset.add_column("scores_rejected", scores_rejected) + + results_grouped = {} + results_grouped["model"] = args.model + results_grouped["ref_model"] = args.ref_model + results_grouped["model_type"] = "DPO" # TODO add options for references free, DPO-ref-free, or DPO-normalized + if ref_free: + results_grouped["model_type"] = "DPO Ref. Free" + save_modifier = "_ref_free" + else: + save_modifier = "" + results_grouped["chat_template"] = args.chat_template if not hasattr(tokenizer, "chat_template") else "tokenizer" + # print per subset and log into results_grouped file + present_subsets = np.unique(subsets) + for subset in present_subsets: + subset_dataset = out_dataset.filter(lambda example: example["subset"] == subset) + num_correct = sum(subset_dataset["results"]) + num_total = len(subset_dataset["results"]) + print(f"{subset}: {num_correct}/{num_total} ({num_correct/num_total})") + results_grouped[subset] = num_correct / num_total + + # log leaderboard aggregated results + if not args.pref_sets: + results_leaderboard = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, results_grouped) + print(results_leaderboard) + + ############################ + # Upload results to hub + ############################ + sub_path = "eval-set/" if not args.pref_sets else "pref-sets/" + results_url = save_to_hub( + results_grouped, + args.model + save_modifier, + sub_path, + args.debug, + local_only=args.do_not_save, + save_metrics_for_beaker=not args.disable_beaker_save, + ) + if not args.do_not_save: + logger.info(f"Uploaded reward model results to {results_url}") + + # upload chosen-rejected with scores + # create new json with scores and upload + scores_dict = out_dataset.to_dict() + scores_dict["model"] = args.model + scores_dict["model_type"] = "DPO" + scores_dict["chat_template"] = args.chat_template + sub_path_scores = "eval-set-scores/" if not args.pref_sets else "pref-sets-scores/" + + scores_url = save_to_hub( + scores_dict, args.model + save_modifier, sub_path_scores, args.debug, local_only=args.do_not_save + ) + logger.info(f"Uploading chosen-rejected text with scores to {scores_url}") + + +if __name__ == "__main__": + main() diff --git a/scripts/run_generative.py b/scripts/run_generative.py new file mode 100644 index 00000000..770d2c07 --- /dev/null +++ b/scripts/run_generative.py @@ -0,0 +1,369 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# run a generative RM. For now, this requires openai and anthropic to be installed +# Examples: +# python scripts/run_generative.py --model gpt-3.5-turbo +# python scripts/run_generative.py --model=claude-3-haiku-20240307 + +# note: for none API models, this script uses vllm +# pip install vllm + +import argparse +import logging +import os +import sys +from concurrent.futures import ThreadPoolExecutor, as_completed + +import numpy as np +from fastchat.conversation import get_conv_template +from transformers import AutoTokenizer +from vllm import LLM, SamplingParams + +from rewardbench import load_eval_dataset, save_to_hub +from rewardbench.constants import EXAMPLE_COUNTS, SUBSET_MAPPING +from rewardbench.generative import ( + ANTHROPIC_MODEL_LIST, + API_MODEL_LIST, + OPENAI_MODEL_LIST, + format_judge_answers, + process_judgement, + run_judge_pair, +) +from rewardbench.utils import calculate_scores_per_section + +# get token from HF_TOKEN env variable, but if it doesn't exist pass none +HF_TOKEN = os.getenv("HF_TOKEN", None) +# this is necessary to automatically log in when running this script in docker/batch beaker jobs +if HF_TOKEN is not None: + from huggingface_hub._login import _login + + _login(token=HF_TOKEN, add_to_git_credential=False) + + +def get_args(): + """ + Parse arguments strings model and chat_template + """ + parser = argparse.ArgumentParser() + parser.add_argument( + "--model", + type=str, + nargs="+", # allow list of models (ensemble) + required=True, + help="name of OpenAI model to use (TODO add more providers/models)", + ) + parser.add_argument("--chat_template", type=str, default="chatgpt", help="path to chat template") + parser.add_argument( + "--trust_remote_code", action="store_true", default=False, help="directly load model instead of pipeline" + ) + parser.add_argument("--num_gpus", type=int, default=1, help="number of gpus to use, for multi-node vllm") + parser.add_argument("--do_not_save", action="store_true", help="do not save results to hub (for debugging)") + parser.add_argument( + "--pref_sets", action="store_true", help="run on common preference sets instead of our custom eval set" + ) + parser.add_argument( + "--debug", action="store_true", help="run on common preference sets instead of our custom eval set" + ) + parser.add_argument( + "--num_threads", type=int, default=10, help="number of threads to use for parallel processing of examples" + ) + parser.add_argument( + "--disable_beaker_save", action="store_true", help="disable saving the main results in a file for AI2 Beaker" + ) + parser.add_argument( + "--force_local", action="store_true", default=False, help="force local run, even if model is on Together API" + ) + args = parser.parse_args() + return args + + +def main(): + args = get_args() + ############### + # Setup logging + ############### + logger = logging.getLogger(__name__) + logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + handlers=[logging.StreamHandler(sys.stdout)], + ) + log_level = logging.INFO + logger.setLevel(log_level) + + logger.info(f"Running reward model on {args.model} with chat template {args.chat_template}") + + # load chat template + conv = get_conv_template("raw") # not used + custom_dialogue = True # to mirror other scripts, required here + model_type = "Generative RM" + + # if model is list, make type + PoLL and check multiple is odd + if isinstance(args.model, list): + model_type += " + PoLL" + # assert that is odd and > 1 + assert len(args.model) > 1 and len(args.model) % 2 == 1 + + # define variable if is API or local + is_api_models = isinstance(args.model, list) or args.model in API_MODEL_LIST or not args.force_local + + # if model isn't API, load via vllm + if not is_api_models: + # load model + model = LLM(args.model, trust_remote_code=args.trust_remote_code, tensor_parallel_size=args.num_gpus) + tokenizer = AutoTokenizer.from_pretrained(args.model) + if "Llama-3" in args.model or "llama3-8b" in args.model: + stop_token_ids = [128009] + else: + stop_token_ids = [] + sampling_params = SamplingParams( + n=1, + temperature=0, + top_p=1, + max_tokens=1024, + stop_token_ids=stop_token_ids, + ) + + ############################ + # Load dataset + ############################ + logger.info("*** Load dataset ***") + dataset, subsets = load_eval_dataset( + core_set=not args.pref_sets, + conv=conv, + custom_dialogue_formatting=custom_dialogue, + tokenizer=None, + logger=logger, + keep_columns=["text_chosen", "text_rejected", "id"], + max_turns=4, + ) + + # copy id for saving, then remove + ids = dataset["id"] + dataset = dataset.remove_columns("id") + + # debug: use only 10 examples + if args.debug: + dataset = dataset.select(range(10)) + subsets = subsets[:10] + ids = ids[:10] + + if is_api_models: + ############################ + # Run inference via API + ############################ + def update_progress_bar(done, total): + # Simple text-based progress bar + progress = int(50 * done / total) # Calculate progress (50 chars width) + sys.stdout.write("\r[{}{}] {}/{}".format("#" * progress, "." * (50 - progress), done, total)) + sys.stdout.flush() + + def get_judgement(batch, debug=args.debug): + mult_turn = True if len(batch["text_chosen"]) > 2 else False + prompt = batch["text_chosen"][0]["content"] + answer_a = batch["text_chosen"] + answer_b = batch["text_rejected"] + + # shuffle a and b randomly for position bias + is_shuffled = np.random.rand() > 0.5 + if is_shuffled: + answer_a, answer_b = answer_b, answer_a + winner_text = "B" + loser_text = "A" + else: + winner_text = "A" + loser_text = "B" + + if len(batch["text_chosen"]) <= 4: # set up only for 1 or 2 turns + winner, request, judgement = run_judge_pair( + prompt, answer_a, answer_b, args.model, multi_turn=mult_turn + ) + if debug: + print(f"Prompt: {request}") + print(f"Judgement: {judgement}") + + # handle voting + if isinstance(winner, list): + # print votes if debug + if debug: + print(winner) + winner = max(set(winner), key=winner.count) + + if winner == winner_text: + return 1 + elif winner == loser_text: + return 0 + else: # if "error" + return 0.5 # effectively a tie + else: + return 0.5 + + with ThreadPoolExecutor(max_workers=args.num_threads) as executor: + # Map 'my_function' across the vector, executing in parallel using threads + # results = list(executor.map(get_judgement, dataset)) + + # Progress bar version + results = [None] * len(dataset) # Preallocate results list + done_tasks = 0 # Counter for completed tasks + + with ThreadPoolExecutor(max_workers=args.num_threads) as executor: + # Submit all tasks and hold their futures in a list + future_to_index = {executor.submit(get_judgement, x): i for i, x in enumerate(dataset)} + + # As tasks complete, update progress and store results in the original order + for future in as_completed(future_to_index): + index = future_to_index[future] + results[index] = future.result() + done_tasks += 1 + update_progress_bar(done_tasks, len(dataset)) + + # Print newline after progress bar + print() + else: + ############################ + # Run model weights with vllm + ############################ + + def format_judgements(batch): + # TODO expand this to include fastchat chat templates if needed + mult_turn = True if len(batch["text_chosen"]) > 2 else False + prompt = batch["text_chosen"][0]["content"] + answer_a = batch["text_chosen"] + answer_b = batch["text_rejected"] + + # shuffle a and b randomly for position bias + is_shuffled = np.random.rand() > 0.5 + if is_shuffled: + answer_a, answer_b = answer_b, answer_a + + system_prompt, user_prompt = format_judge_answers(prompt, answer_a, answer_b, multi_turn=mult_turn) + + messages = [ + { + "role": "system", + "content": system_prompt, + }, + {"role": "user", "content": user_prompt}, + ] + prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) + batch["text"] = prompt + batch["is_shuffled"] = is_shuffled + return batch + + # format the dataset for the model + dataset_prompts = dataset.map(format_judgements) + + # collect texts of dataset in list + prompts = dataset_prompts["text"] + is_shuffled = dataset_prompts["is_shuffled"] + + # generate + outputs = model.generate(prompts, sampling_params) + + answers = [o.outputs[0].text for o in outputs] + winners = [process_judgement(a) for a in answers] + + def process_shuffled(win, shuffle): + if shuffle: + winner_text = "B" + loser_text = "A" + else: + winner_text = "A" + loser_text = "B" + + if win == winner_text: + return 1 + elif win == loser_text: + return 0 + else: # if "error" + return 0.5 # effectively a tie + + results = [process_shuffled(w, s) for w, s in zip(winners, is_shuffled)] + + ############################ + # Print & process results + ############################ + # add column for results for easy printing + out_dataset = dataset.add_column("results", results) + + # add subsets back (removed so it's not handled by cuda) + out_dataset = out_dataset.add_column("subset", subsets) + out_dataset = out_dataset.add_column("id", ids) + + # model name concat if list + if isinstance(args.model, list): + model_name = "_".join(args.model) + model_name = "PoLL/" + model_name + else: + model_name = args.model + # if model in openai or Anthropic list, append org to model name + if args.model in OPENAI_MODEL_LIST: + model_name = "openai/" + model_name + if args.model in ANTHROPIC_MODEL_LIST: + model_name = "anthropic/" + model_name + + # get core dataset + results_grouped = {} + results_grouped["model"] = model_name + results_grouped["model_type"] = model_type + results_grouped["chat_template"] = args.chat_template + + # print per subset and log into results_grouped file + present_subsets = np.unique(subsets) + for subset in present_subsets: + subset_dataset = out_dataset.filter(lambda example: example["subset"] == subset) + num_correct = sum(subset_dataset["results"]) + num_total = len(subset_dataset["results"]) + print(f"{subset}: {num_correct}/{num_total} ({num_correct/num_total})") + results_grouped[subset] = num_correct / num_total + + # log leaderboard aggregated results + if not args.pref_sets: + results_leaderboard = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, results_grouped) + print(results_leaderboard) + + ############################ + # Upload results to hub + ############################# + sub_path = "eval-set/" if not args.pref_sets else "pref-sets/" + results_url = save_to_hub( + results_grouped, + model_name, + sub_path, + args.debug, + local_only=args.do_not_save, + save_metrics_for_beaker=not args.disable_beaker_save, + ) + if not args.do_not_save: + logger.info(f"Uploaded reward model results to {results_url}") + + logger.info("Not uploading chosen-rejected text with scores due to model compatibility") + + ############################ + # Save per-prompt results to hub + ############################ + # create new json with scores and upload + scores_dict = out_dataset.to_dict() + scores_dict["model"] = model_name + scores_dict["model_type"] = model_type + + sub_path_scores = "eval-set-scores/" if not args.pref_sets else "pref-sets-scores/" + + scores_url = save_to_hub(scores_dict, model_name, sub_path_scores, args.debug, local_only=args.do_not_save) + logger.info(f"Uploading chosen-rejected text with scores to {scores_url}") + + +if __name__ == "__main__": + main() diff --git a/scripts/run_rm.py b/scripts/run_rm.py new file mode 100644 index 00000000..b2681652 --- /dev/null +++ b/scripts/run_rm.py @@ -0,0 +1,347 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import argparse +import logging +import os +import sys + +import numpy as np +import torch +import transformers +from accelerate import Accelerator +from accelerate.logging import get_logger +from fastchat.conversation import get_conv_template +from tqdm import tqdm +from transformers import AutoTokenizer, pipeline + +from rewardbench import ( + REWARD_MODEL_CONFIG, + check_tokenizer_chat_template, + load_eval_dataset, + save_to_hub, +) +from rewardbench.constants import EXAMPLE_COUNTS, SUBSET_MAPPING +from rewardbench.utils import calculate_scores_per_section + +# get token from HF_TOKEN env variable, but if it doesn't exist pass none +HF_TOKEN = os.getenv("HF_TOKEN", None) +# this is necessary to automatically log in when running this script in docker/batch beaker jobs +if HF_TOKEN is not None: + from huggingface_hub._login import _login + + _login(token=HF_TOKEN, add_to_git_credential=False) + + +def get_args(): + """ + Parse arguments strings model and chat_template + """ + parser = argparse.ArgumentParser() + parser.add_argument("--model", type=str, required=True, help="path to model") + parser.add_argument("--tokenizer", type=str, default=None, help="path to non-matching tokenizer to model") + parser.add_argument("--chat_template", type=str, default="tulu", help="path to chat template") + parser.add_argument( + "--trust_remote_code", action="store_true", default=False, help="directly load model instead of pipeline" + ) + parser.add_argument("--do_not_save", action="store_true", help="do not save results to hub (for debugging)") + parser.add_argument("--batch_size", type=int, default=64, help="batch size for inference") + parser.add_argument("--max_length", type=int, default=2048, help="Max length of RM inputs (passed to pipeline)") + parser.add_argument( + "--pref_sets", action="store_true", help="run on common preference sets instead of our custom eval set" + ) + parser.add_argument( + "--debug", action="store_true", help="run on common preference sets instead of our custom eval set" + ) + parser.add_argument( + "--disable_beaker_save", action="store_true", help="disable saving the main results in a file for AI2 Beaker" + ) + args = parser.parse_args() + return args + + +def main(): + args = get_args() + ############### + # Setup logging + ############### + accelerator = Accelerator() + current_device = accelerator.process_index + + logger = get_logger(__name__) + logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + handlers=[logging.StreamHandler(sys.stdout)], + ) + log_level = logging.INFO + logger.setLevel(log_level) + transformers.utils.logging.set_verbosity(log_level) + transformers.utils.logging.enable_default_handler() + transformers.utils.logging.enable_explicit_format() + + logger.info(f"Running reward model on {args.model} with chat template {args.chat_template}") + if args.trust_remote_code: + logger.info("Loading model with Trust Remote Code") + + # load chat template + chat_template = args.chat_template + conv = get_conv_template(chat_template) + + if args.model in REWARD_MODEL_CONFIG: + config = REWARD_MODEL_CONFIG[args.model] + else: + config = REWARD_MODEL_CONFIG["default"] + logger.info(f"Using reward model config: {config}") + + # Default entries + # "model_builder": AutoModelForSequenceClassification.from_pretrained, + # "pipeline_builder": pipeline, + # "quantized": True, + # "custom_dialogue": False, + # "model_type": "Seq. Classifier" + + quantized = config["quantized"] # only Starling isn't quantized for now + custom_dialogue = config["custom_dialogue"] + model_type = config["model_type"] + model_builder = config["model_builder"] + pipeline_builder = config["pipeline_builder"] + + # not included in config to make user explicitly understand they are passing this + trust_remote_code = args.trust_remote_code + + ############################ + # Load dataset + ############################ + logger.info("*** Load dataset ***") + tokenizer_path = args.tokenizer if args.tokenizer else args.model + tokenizer = AutoTokenizer.from_pretrained(tokenizer_path, trust_remote_code=args.trust_remote_code) + if not custom_dialogue: # not needed for PairRM / SteamSHP + tokenizer.truncation_side = "left" # copied from Starling, but few samples are above context length + dataset, subsets = load_eval_dataset( + core_set=not args.pref_sets, + conv=conv, + custom_dialogue_formatting=custom_dialogue, + tokenizer=tokenizer, + logger=logger, + keep_columns=["text_chosen", "text_rejected", "id"], + ) + # copy id for saving, then remove + ids = dataset["id"] + dataset = dataset.remove_columns("id") + + # debug: use only 10 examples + if args.debug: + dataset = dataset.select(range(10)) + subsets = subsets[:10] + ids = ids[:10] + + ############################ + # Load reward model pipeline + ############################ + BATCH_SIZE = args.batch_size + logger.info("*** Load reward model ***") + reward_pipeline_kwargs = { + "batch_size": BATCH_SIZE, # eval_args.inference_batch_size, + "truncation": True, + "padding": True, + "max_length": args.max_length, + "function_to_apply": "none", # Compute raw logits + "return_token_type_ids": False, + } + if quantized: + model_kwargs = { + "load_in_8bit": True, + "device_map": {"": current_device}, + "torch_dtype": torch.float16 if torch.cuda.is_available() else None, + } + else: + model_kwargs = {"device_map": {"": current_device}} + + model = model_builder(args.model, **model_kwargs, trust_remote_code=trust_remote_code) + reward_pipe = pipeline_builder( + "text-classification", + model=model, + tokenizer=tokenizer, + ) + + ############################ + # Tokenization settings & dataset preparation + ############################ + # set pad token to eos token if not set + if reward_pipe.tokenizer.pad_token_id is None: + reward_pipe.model.config.pad_token_id = reward_pipe.tokenizer.eos_token_id + reward_pipe.tokenizer.pad_token_id = reward_pipe.tokenizer.eos_token_id + # For models whose config did not contains `pad_token_id` + if reward_pipe.model.config.pad_token_id is None: + reward_pipe.model.config.pad_token_id = reward_pipe.tokenizer.pad_token_id + + # if using fastchat template (no template in tokenizer), make the RM tokenizer output an EOS token + if not check_tokenizer_chat_template(tokenizer): + reward_pipe.tokenizer.add_eos_token = True + + ############################ + # Run inference [1/2]" built in transformers + ############################ + # if using HF pipeline, can pass entire dataset and get results + # first, handle custom pipelines that we must batch normally + if pipeline_builder == pipeline: + logger.info("*** Running forward pass via built in pipeline abstraction ***") + # this setup can be optimized slightly with one pipeline call + # prepare for inference + reward_pipe = accelerator.prepare(reward_pipe) + + results_rej = reward_pipe(dataset["text_rejected"], **reward_pipeline_kwargs) + results_cho = reward_pipe(dataset["text_chosen"], **reward_pipeline_kwargs) + + # extract scores from results which is list of dicts, e.g. [{'label': 'LABEL_1', 'score': 0.6826171875},... ] + scores_chosen = [result["score"] for result in results_cho] + scores_rejected = [result["score"] for result in results_rej] + + # pairwise comparison list comprehension + results = [1 if chosen > rejected else 0 for chosen, rejected in zip(scores_chosen, scores_rejected)] + + ############################ + # Run inference [2/2] custom pipelines + ############################ + else: + logger.info("*** Running dataloader to collect results ***") + # TODO make more custom pipelines work with pre-tokenized data + from torch.utils.data.dataloader import default_collate + + # for PairRM, hmm, will move all of this later + def custom_collate_fn(batch): + # check if ['text_chosen'] is in first batch element + # Check if the first element of the batch is a dictionary + if isinstance(batch[0]["text_chosen"][0], dict): + return batch # Return the batch as-is if it's a list of dicts + else: + return default_collate(batch) # Use the default collate behavior otherwise + + dataloader = torch.utils.data.DataLoader( + dataset, + batch_size=BATCH_SIZE, + collate_fn=custom_collate_fn, # if not args.pref_sets else None, + shuffle=False, + drop_last=False, + ) + + dataloader, model = accelerator.prepare(dataloader, reward_pipe.model) + reward_pipe.model = model + + results = [] + scores_chosen = [] + scores_rejected = [] + for step, batch in enumerate(tqdm(dataloader, desc="RM batch steps")): + logger.info(f"RM inference step {step}/{len(dataloader)}") + + if model_type == "Custom Classifier": + text_rejected = [b["text_rejected"] for b in batch] + text_chosen = [b["text_chosen"] for b in batch] + results_sub = reward_pipe(text_chosen, text_rejected, **reward_pipeline_kwargs) + [results.append(1) if result else results.append(0) for result in results_sub.cpu().numpy().tolist()] + scores_chosen.extend([None] * len(results_sub)) + scores_rejected.extend([None] * len(results_sub)) + else: + rewards_chosen = reward_pipe(batch["text_chosen"], **reward_pipeline_kwargs) + rewards_rejected = reward_pipe(batch["text_rejected"], **reward_pipeline_kwargs) + + # for each item in batch, record 1 if chosen > rejected + # extra score from dict within batched results (e.g. logits) + # [{'label': 'LABEL_1', 'score': 0.6826171875},... ] + if isinstance(rewards_chosen[0], dict): + score_chosen_batch = [result["score"] for result in rewards_chosen] + score_rejected_batch = [result["score"] for result in rewards_rejected] + # for classes that directly output scores (custom code) + else: + score_chosen_batch = rewards_chosen.cpu().numpy().tolist() + score_rejected_batch = rewards_rejected.cpu().numpy().tolist() + + # log results + [ + results.append(1) if chosen > rejected else results.append(0) + for chosen, rejected in zip(score_chosen_batch, score_rejected_batch) + ] + scores_chosen.extend(score_chosen_batch) + scores_rejected.extend(score_rejected_batch) + + ############################ + # Print & process results + ############################ + # add column for results for easy printing + out_dataset = dataset.add_column("results", results) + + # add subsets back (removed so it's not handled by cuda) + out_dataset = out_dataset.add_column("subset", subsets) + out_dataset = out_dataset.add_column("id", ids) + + # add scores_chosen and scores_rejected to the dataset + out_dataset = out_dataset.add_column("scores_chosen", scores_chosen) + out_dataset = out_dataset.add_column("scores_rejected", scores_rejected) + + # get core dataset + results_grouped = {} + results_grouped["model"] = args.model + results_grouped["model_type"] = model_type + results_grouped["chat_template"] = ( + args.chat_template if not check_tokenizer_chat_template(tokenizer) else "tokenizer" + ) + + # print per subset and log into results_grouped file + present_subsets = np.unique(subsets) + for subset in present_subsets: + subset_dataset = out_dataset.filter(lambda example: example["subset"] == subset) + num_correct = sum(subset_dataset["results"]) + num_total = len(subset_dataset["results"]) + print(f"{subset}: {num_correct}/{num_total} ({num_correct/num_total})") + results_grouped[subset] = num_correct / num_total + + # log leaderboard aggregated results + if not args.pref_sets: + results_leaderboard = calculate_scores_per_section(EXAMPLE_COUNTS, SUBSET_MAPPING, results_grouped) + print(results_leaderboard) + + ############################ + # Upload results to hub + ############################ + sub_path = "eval-set/" if not args.pref_sets else "pref-sets/" + results_url = save_to_hub( + results_grouped, + args.model, + sub_path, + args.debug, + local_only=args.do_not_save, + save_metrics_for_beaker=not args.disable_beaker_save, + ) + if not args.do_not_save: + logger.info(f"Uploaded reward model results to {results_url}") + + # upload chosen-rejected with scores + if not model_type == "Custom Classifier": # custom classifiers do not return scores + # create new json with scores and upload + scores_dict = out_dataset.to_dict() + scores_dict["model"] = args.model + scores_dict["model_type"] = model_type + scores_dict["chat_template"] = args.chat_template + + sub_path_scores = "eval-set-scores/" if not args.pref_sets else "pref-sets-scores/" + + scores_url = save_to_hub(scores_dict, args.model, sub_path_scores, args.debug, local_only=args.do_not_save) + logger.info(f"Uploading chosen-rejected text with scores to {scores_url}") + else: + logger.info("Not uploading chosen-rejected text with scores due to model compatibility") + + +if __name__ == "__main__": + main() diff --git a/scripts/submit_eval_jobs.py b/scripts/submit_eval_jobs.py new file mode 100644 index 00000000..58b9148c --- /dev/null +++ b/scripts/submit_eval_jobs.py @@ -0,0 +1,166 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import argparse +import copy +import os +import subprocess +from datetime import date + +import yaml + +# Create argparse, for store_true variables of eval_on_pref_sets and eval_on_bon +# String image for Beaker image +# Bool default true for upload_to_hub +argparser = argparse.ArgumentParser() +argparser.add_argument( + "--eval_on_pref_sets", action="store_true", default=False, help="Evaluate on preference sets rather than core set" +) +argparser.add_argument("--eval_on_bon", action="store_true", default=False, help="Evaluate on BON preference sets") +argparser.add_argument("--image", type=str, default="nathanl/rb_v16", help="Beaker image to use") +argparser.add_argument("--cluster", type=str, default="ai2/allennlp-cirrascale", help="Beaker cluster to use") +argparser.add_argument("--priority", type=str, default="high", help="Priority of the job") +argparser.add_argument("--upload_to_hub", action="store_false", default=True, help="Upload to results to HF hub") +argparser.add_argument("--model", type=str, default=None, help="Specific model to evaluate if not sweep") +argparser.add_argument( + "--ref_free", action="store_true", default=False, help="If true, runs DPO models without reference" +) +argparser.add_argument( + "--eval_dpo_only", action="store_true", default=False, help="If true, only evaluates DPO models" +) +argparser.add_argument("--eval_rm_only", action="store_true", default=False, help="If true, only evaluates RM models") +args = argparser.parse_args() + +# assert that only one of eval_dpo_only and eval_rm_only is True at a time +assert not (args.eval_dpo_only and args.eval_rm_only), "Only one of eval_dpo_only and eval_rm_only can be True" + +today = date.today().strftime("%m%d%Y") + +with open("scripts/configs/beaker_eval.yaml", "r") as f: + d1 = yaml.load(f.read(), Loader=yaml.FullLoader) + +cluster = args.cluster + +image = args.image +num_gpus = 1 +upload_to_hub = args.upload_to_hub +eval_on_pref_sets = args.eval_on_pref_sets +eval_on_bon = args.eval_on_bon + +if eval_on_bon: + with open("scripts/configs/eval_bon_configs.yaml", "r") as f: + configs = yaml.load(f.read(), Loader=yaml.FullLoader) +else: + with open("scripts/configs/eval_configs.yaml", "r") as f: + configs = yaml.load(f.read(), Loader=yaml.FullLoader) +print(configs) + + +# assert only one of eval_on_pref_sets and eval_on_bon is True +assert not (eval_on_pref_sets and eval_on_bon), "Only one of eval_on_pref_sets and eval_on_bon can be True" + +d1["tasks"][0]["image"]["beaker"] = image +# d1["tasks"][0]["context"]["cluster"] = cluster +d1["tasks"][0]["context"]["priority"] = args.priority +d1["tasks"][0]["resources"]["gpuCount"] = num_gpus + +# get model from config keys +models_to_evaluate = list(configs.keys()) + +if args.model is not None: + if args.model in models_to_evaluate: + models_to_evaluate = [args.model] + else: + raise ValueError(f"Model {args.model} not found in configs") + +for model in models_to_evaluate: + model_config = configs[model] + eval_dpo = model_config["dpo"] + + # check if generative in model_config + if "generative" in model_config: + if model_config["generative"]: + eval_gen = True + + # ignore models depending on eval_dpo_only and eval_rm_only + if args.eval_dpo_only: + if not eval_dpo: + continue + elif args.eval_rm_only: + if eval_dpo: + continue + + if eval_on_bon: + experiment_group = "rewardebench-bon" + script = "run_bon.py" + elif eval_dpo: + experiment_group = "rewardebench-dpo" + script = "run_dpo.py" + elif eval_gen: + experiment_group = "rewardebench-gen" + script = "run_generative.py" + else: + experiment_group = "rewardebench-seq" + script = "run_rm.py" + + # log experiment name + if eval_on_pref_sets: + experiment_group += "-pref-sets" + + print(f"Submitting evaluation for model: {model} on {experiment_group}") + d = copy.deepcopy(d1) + + name = f"rewardbench_eval_for_{model}_on_{experiment_group}".replace("/", "-") + d["description"] = name + d["tasks"][0]["name"] = name + + if "num_gpus" in model_config: + d["tasks"][0]["resources"]["gpuCount"] = model_config["num_gpus"] + + if not eval_gen: + d["tasks"][0]["arguments"][0] = ( + f"python scripts/{script}" + f" --model {model}" + f" --tokenizer {model_config['tokenizer']}" + f" --batch_size {model_config['batch_size']}" + ) + else: + d["tasks"][0]["arguments"][0] = ( + f"python scripts/{script}" f" --model {model}" f" --num_gpus {model_config['num_gpus']}" + ) + if model_config["chat_template"] is not None: + d["tasks"][0]["arguments"][0] += f" --chat_template {model_config['chat_template']}" + if model_config["trust_remote_code"]: + d["tasks"][0]["arguments"][0] += " --trust_remote_code" + if not upload_to_hub: + d["tasks"][0]["arguments"][0] += " --do_not_save" + if eval_on_pref_sets: + d["tasks"][0]["arguments"][0] += " --pref_sets" + if "ref_model" in model_config: + if not args.ref_free: # if passed, ignore logic in eval configs + d["tasks"][0]["arguments"][0] += f" --ref_model {model_config['ref_model']}" + if "max_length" in model_config: # for `mightbe/Better-PairRM`, but could come up in the future + d["tasks"][0]["arguments"][0] += f" --max_length {model_config['max_length']}" + + # use os to check if beaker_configs/auto_created exists + if not os.path.exists("beaker_configs/auto_created"): + os.makedirs("beaker_configs/auto_created") + + fn = "beaker_configs/auto_created/{}.yaml".format(name) + file = open(fn, "w") + yaml.dump(d, file, default_flow_style=True) + file.close() + + cmd = "beaker experiment create {} --workspace ai2/rewardbench".format(fn) + subprocess.Popen(cmd, shell=True) diff --git a/scripts/submit_train_jobs.py b/scripts/submit_train_jobs.py new file mode 100644 index 00000000..c5dcc3f0 --- /dev/null +++ b/scripts/submit_train_jobs.py @@ -0,0 +1,100 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import argparse +import subprocess +from datetime import date + +import yaml + +argparser = argparse.ArgumentParser() +argparser.add_argument("--image", type=str, default="jacobm/rb_train", help="Beaker image to use") +argparser.add_argument("--cluster", type=str, default="ai2/allennlp-cirrascale", help="Beaker cluster to use") +argparser.add_argument("--model", type=str, default=None, help="Specific model to train on top of") +argparser.add_argument("--dataset", type=str, default=None, help="Specific dataset file path for training") +argparser.add_argument("--lr", type=str, default="1e-5", help="Learning rate for training") +argparser.add_argument("--num_epochs", type=str, default="1", help="Number of training epochs") +argparser.add_argument("--seed", type=int, default=123409876, help="Seed for training") +args = argparser.parse_args() + + +today = date.today().strftime("%m%d%Y") + +with open("scripts/configs/beaker_train.yaml", "r") as f: + default_yaml = f.read() +d = yaml.load(default_yaml, Loader=yaml.FullLoader) + +with open("scripts/configs/train_configs.yaml", "r") as f: + configs = yaml.load(f.read(), Loader=yaml.FullLoader) +model_config = configs[args.model] + +# name and description +model_stem = args.model.replace("/", "-") +if ".jsonl" in args.dataset: + dataset_stem = args.dataset.split("/")[-1].replace(".jsonl", "") +else: + dataset_stem = args.dataset +exp_name = f"herm_train-rm_{model_stem}_{dataset_stem}" + +d["description"] = exp_name +d["tasks"][0]["context"]["cluster"] = args.cluster +d["tasks"][0]["context"]["priority"] = "high" +d["tasks"][0]["name"] = exp_name +d["tasks"][0]["image"]["beaker"] = args.image +d["tasks"][0]["resources"]["gpuCount"] = model_config["num_gpus"] + +GRADIENT_ACC_STEPS = int( + model_config["total_batch_size"] / model_config["num_gpus"] / model_config["batch_size_per_gpu"] +) + +optional_configs = "" +if model_config["bf16"]: + optional_configs += " --bf16" +if model_config["use_flash_attn"]: + optional_configs += " --use_flash_attn" + +d["tasks"][0]["arguments"][0] = ( + f"deepspeed --include localhost:{','.join(str(n) for n in range(model_config['num_gpus']))} " + " scripts/train_rm_trainer.py" + " --deepspeed scripts/configs/stage3_no_offloading.conf" + f" --model_name_or_path {args.model}" + f" --tokenizer {model_config['tokenizer']}" + f" --dataset_name {args.dataset}" + f" --max_seq_length {model_config['max_seq_len']}" + " --preprocessing_num_workers 64" + f" --do_train {optional_configs}" + f" --per_device_train_batch_size {model_config['batch_size_per_gpu']}" + f" --gradient_accumulation_steps {GRADIENT_ACC_STEPS}" + f" --learning_rate {args.lr}" + " --lr_scheduler_type linear" + " --warmup_ratio 0.03" + " --weight_decay 0." + " --evaluation_strategy no" + " --logging_steps 1" + " --save_strategy epoch" + f" --seed {args.seed}" + f" --num_train_epochs {args.num_epochs}" + f" --output_dir /output" + " --use_slow_tokenizer" + " --overwrite_output_dir" + " --output_dir /output" +) + +fn = "beaker_configs/auto_created/{}.yaml".format(exp_name) +file = open(fn, "w") +yaml.dump(d, file, default_flow_style=True) +file.close() + +cmd = "beaker experiment create {} --workspace ai2/herm".format(fn) +subprocess.Popen(cmd, shell=True) diff --git a/scripts/train_rm.py b/scripts/train_rm.py new file mode 100644 index 00000000..787192b5 --- /dev/null +++ b/scripts/train_rm.py @@ -0,0 +1,438 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# !/usr/bin/env python +# coding=utf-8 +""" +This file is modified from the huggingface example for finetuning language models +[run_clm.py](https://github.com/huggingface/transformers/blob/main/examples/pytorch/language-modeling/run_clm.py) +""" + +import logging +import os +import sys +import warnings +from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional + +import datasets +import torch +import transformers +from datasets import load_dataset +from fastchat.conversation import Conversation, get_conv_template +from transformers import ( + AutoConfig, + AutoModelForSequenceClassification, + AutoTokenizer, + HfArgumentParser, + LlamaTokenizer, + LlamaTokenizerFast, + TrainingArguments, + set_seed, +) +from transformers.trainer_utils import get_last_checkpoint +from trl import RewardTrainer + +logger = logging.getLogger(__name__) + + +@dataclass +class ModelArguments: + """ + Arguments pertaining to which model/config/tokenizer we are going to fine-tune, or train from scratch. + """ + + model_name_or_path: Optional[str] = field( + default=None, + metadata={ + "help": ( + "The model checkpoint for weights initialization. Don't set if you want to train a model from scratch." + ) + }, + ) + config_name: Optional[str] = field( + default=None, metadata={"help": "Pretrained config name or path if not the same as model_name"} + ) + tokenizer_name: Optional[str] = field( + default=None, metadata={"help": "Pretrained tokenizer name or path if not the same as model_name"} + ) + use_flash_attn: bool = field( + default=False, + metadata={"help": "Whether to use flash attention in the model training"}, + ) + cache_dir: Optional[str] = field( + default=None, + metadata={"help": "Where do you want to store the pretrained models downloaded from huggingface.co"}, + ) + model_revision: str = field( + default="main", + metadata={"help": "The specific model version to use (can be a branch name, tag name or commit id)."}, + ) + token: str = field( + default=None, + metadata={ + "help": ( + "The token to use as HTTP bearer authorization for remote files. If not specified, will use the token " + "generated when running `huggingface-cli login` (stored in `~/.huggingface`)." + ) + }, + ) + use_auth_token: bool = field( + default=None, + metadata={ + "help": "The `use_auth_token` argument is deprecated and will be removed in Transformers v4.34." + " Please use `token`." + }, + ) + trust_remote_code: bool = field( + default=False, + metadata={ + "help": ( + "Whether or not to allow for custom models defined on the Hub in their own modeling files." + " This option should only be set to `True` for repositories you trust and in which you have" + " read the code, as it will execute code present on the Hub on your local machine." + ) + }, + ) + torch_dtype: Optional[str] = field( + default="auto", + metadata={ + "help": ( + "Override the default `torch.dtype` and load the model under this dtype. If `auto` is passed, the " + "dtype will be automatically derived from the model's weights." + ), + "choices": ["auto", "bfloat16", "float16", "float32"], + }, + ) + low_cpu_mem_usage: bool = field( + default=False, + metadata={ + "help": ( + "It is an option to create the model as an empty shell, then only materialize its" + + " parameters when the pretrained weights are loaded. set True will benefit LLM" + + " loading time and RAM consumption." + ) + }, + ) + use_slow_tokenizer: bool = field( + default=False, + metadata={"help": ("use slow tokenizer or not.")}, + ) + + +@dataclass +class DataTrainingArguments: + """ + Arguments pertaining to what data we are going to input our model for training and eval. + """ + + dataset_name: Optional[str] = field( + default=None, metadata={"help": "The name of the dataset to use (via the datasets library)."} + ) + dataset_config_name: Optional[str] = field( + default=None, metadata={"help": "The configuration name of the dataset to use (via the datasets library)."} + ) + train_file: Optional[str] = field( + default=None, metadata={"help": "The input training data file (a json/jsonl file)."} + ) + max_train_samples: Optional[int] = field( + default=None, + metadata={ + "help": ( + "For debugging purposes or quicker training, truncate the number of training examples to this " + "value if set." + ) + }, + ) + streaming: bool = field(default=False, metadata={"help": "Enable streaming mode"}) + overwrite_cache: bool = field( + default=False, metadata={"help": "Overwrite the cached training and evaluation sets"} + ) + preprocessing_num_workers: Optional[int] = field( + default=None, + metadata={"help": "The number of processes to use for the preprocessing."}, + ) + max_seq_length: Optional[int] = field( + default=None, + metadata={ + "help": ( + "The maximum total input sequence length after tokenization." + + " Sequences longer than this will be truncated" + ) + }, + ) + chat_template: Optional[str] = field( + default="tulu", metadata={"help": ("The chat template to apply to chosen/rejected pairs. Default is Tulu.")} + ) + + def __post_init__(self): + if self.dataset_name is None and self.train_file is None: + raise ValueError("Need either a dataset name or a training file.") + else: + if self.train_file is not None: + extension = self.train_file.split(".")[-1] + assert extension in ["json", "jsonl"], "`train_file` should be a json or a jsonl file." + + +def main(): + parser = HfArgumentParser((ModelArguments, DataTrainingArguments, TrainingArguments)) + if len(sys.argv) == 2 and sys.argv[1].endswith(".json"): + model_args, data_args, training_args = parser.parse_json_file(json_file=os.path.abspath(sys.argv[1])) + else: + model_args, data_args, training_args = parser.parse_args_into_dataclasses() + + if model_args.use_auth_token is not None: + warnings.warn( + "The `use_auth_token` argument is deprecated and will be removed in Transformers v4.34.", FutureWarning + ) + if model_args.token is not None: + raise ValueError("`token` and `use_auth_token` are both specified. Please set only the argument `token`.") + model_args.token = model_args.use_auth_token + + # Setup logging + logging.basicConfig( + format="%(asctime)s - %(levelname)s - %(name)s - %(message)s", + datefmt="%m/%d/%Y %H:%M:%S", + handlers=[logging.StreamHandler(sys.stdout)], + ) + + if training_args.should_log: + # The default of training_args.log_level is passive, so we set log level at info here to have that default. + transformers.utils.logging.set_verbosity_info() + + log_level = training_args.get_process_log_level() + logger.setLevel(log_level) + datasets.utils.logging.set_verbosity(log_level) + transformers.utils.logging.set_verbosity(log_level) + transformers.utils.logging.enable_default_handler() + transformers.utils.logging.enable_explicit_format() + + # Log on each process the small summary: + logger.warning( + f"Process rank: {training_args.local_rank}, device: {training_args.device}, n_gpu: {training_args.n_gpu}" + + f"distributed training: {training_args.parallel_mode.value == 'distributed'}," + + f" 16-bits training: {training_args.fp16}" + ) + logger.info(f"Training parameters {training_args}") + + # Detecting last checkpoint. + last_checkpoint = None + if os.path.isdir(training_args.output_dir) and training_args.do_train and not training_args.overwrite_output_dir: + last_checkpoint = get_last_checkpoint(training_args.output_dir) + if last_checkpoint is None and len(os.listdir(training_args.output_dir)) > 0: + raise ValueError( + f"Output directory ({training_args.output_dir}) already exists and is not empty. " + "Use --overwrite_output_dir to overcome." + ) + elif last_checkpoint is not None and training_args.resume_from_checkpoint is None: + logger.info( + f"Checkpoint detected, resuming training at {last_checkpoint}. To avoid this behavior, change " + "the `--output_dir` or add `--overwrite_output_dir` to train from scratch." + ) + + # Set seed before initializing model. + if training_args.seed is None: + training_args.seed = 123409876 + set_seed(training_args.seed) + + if data_args.dataset_name is None: + raise ValueError("Must provide a valid dataset name") + elif data_args.dataset_name[-6:] == ".jsonl": + # load dataset file + train_dataset = load_dataset("json", data_files=data_args.dataset_name)["train"] + else: + train_dataset = load_dataset(data_args.dataset_name)["train"] + + config_kwargs = { + "cache_dir": model_args.cache_dir, + "revision": model_args.model_revision, + "token": model_args.token, + "trust_remote_code": model_args.trust_remote_code, + } + if model_args.config_name: + config = AutoConfig.from_pretrained(model_args.config_name, **config_kwargs) + elif model_args.model_name_or_path: + config = AutoConfig.from_pretrained(model_args.model_name_or_path, **config_kwargs) + else: + raise ValueError("You are instantiating a new config instance from scratch. This is not supported.") + + config.num_labels = 1 + + tokenizer_kwargs = { + "cache_dir": model_args.cache_dir, + "revision": model_args.model_revision, + "token": model_args.token, + "trust_remote_code": model_args.trust_remote_code, + "use_fast": not model_args.use_slow_tokenizer, + } + if model_args.tokenizer_name: + tokenizer = AutoTokenizer.from_pretrained(model_args.tokenizer_name, **tokenizer_kwargs) + elif model_args.model_name_or_path: + tokenizer = AutoTokenizer.from_pretrained(model_args.model_name_or_path, **tokenizer_kwargs) + else: + raise ValueError( + "You are instantiating a new tokenizer from scratch. This is not supported by this finetuning script." + ) + + if model_args.model_name_or_path: + torch_dtype = ( + model_args.torch_dtype + if model_args.torch_dtype in ["auto", None] + else getattr(torch, model_args.torch_dtype) + ) + model = AutoModelForSequenceClassification.from_pretrained( + model_args.model_name_or_path, + from_tf=bool(".ckpt" in model_args.model_name_or_path), + config=config, + cache_dir=model_args.cache_dir, + revision=model_args.model_revision, + token=model_args.token, + trust_remote_code=model_args.trust_remote_code, + torch_dtype=torch_dtype, + low_cpu_mem_usage=model_args.low_cpu_mem_usage, + use_flash_attention_2=True if model_args.use_flash_attn else False, + ) + else: + raise ValueError( + "You are instantiating a new model from scratch. This is not supported by this finetuning script." + ) + + if "gpt2" in model_args.model_name_or_path: + print("Adding padding token for GPT2 models") + tokenizer.add_special_tokens({"pad_token": tokenizer.eos_token}) + config.pad_token_id = config.eos_token_id + + # no default pad token for llama! + # here we add all special tokens again, because the default ones are not in the special_tokens_map + if ( + isinstance(tokenizer, LlamaTokenizer) + or isinstance(tokenizer, LlamaTokenizerFast) + or "llama" in model_args.model_name_or_path.lower() + or "tulu" in model_args.model_name_or_path.lower() + ): + print("Adding pad token for Llama/Tulu models") + num_added_tokens = tokenizer.add_special_tokens( + { + "bos_token": "", + "eos_token": "", + "unk_token": "", + "pad_token": "", + } + ) + config.pad_token_id = 32000 + model.config.pad_token_id = 32000 + assert num_added_tokens in [ + 0, + 1, + ], "LlamaTokenizer should only add one special token - the pad_token, or no tokens if pad token present." + + print(f"model config: {config}") + + # resize embeddings if needed (e.g. for LlamaTokenizer) + embedding_size = model.get_input_embeddings().weight.shape[0] + if len(tokenizer) > embedding_size: + model.resize_token_embeddings(len(tokenizer)) + + original_columns = train_dataset.column_names + + def preprocess_preference_pairs(example): + chosen = example["chosen"] + rejected = example["rejected"] + tokenized_chosen = tokenizer( + chosen, + max_length=data_args.max_seq_length, + truncation=True, + ) + tokenized_rejected = tokenizer( + rejected, + max_length=data_args.max_seq_length, + truncation=True, + ) + return { + "input_ids_chosen": tokenized_chosen["input_ids"], + "attention_mask_chosen": tokenized_chosen["attention_mask"], + "input_ids_rejected": tokenized_rejected["input_ids"], + "attention_mask_rejected": tokenized_rejected["attention_mask"], + } + + def prepare_examples( + example: Dict[str, List[Any]], + dialogue_template: Conversation, + ): + processed = {} + for key in ["chosen", "rejected"]: + dialogue_template.messages = [] + for elem in example[key]: + content = elem["content"] + role = elem["role"] + dialogue_template.messages.append([role, content]) + processed[key] = dialogue_template.get_prompt() + + return processed + + train_dataset = train_dataset.map( + prepare_examples, + fn_kwargs={"dialogue_template": get_conv_template(data_args.chat_template)}, + num_proc=data_args.preprocessing_num_workers, + load_from_cache_file=False, + ) + + train_dataset = train_dataset.filter( + lambda x: x["chosen"] != x["rejected"], + num_proc=data_args.preprocessing_num_workers, + ) + train_dataset = train_dataset.map( + preprocess_preference_pairs, + num_proc=data_args.preprocessing_num_workers, + remove_columns=original_columns, + ) + train_dataset = train_dataset.filter( + lambda x: len(x["input_ids_chosen"]) <= data_args.max_seq_length + and len(x["input_ids_rejected"]) <= data_args.max_seq_length, + num_proc=data_args.preprocessing_num_workers, + ) + + # initialize a trainer + trainer = RewardTrainer( + model=model, + args=training_args, + train_dataset=train_dataset if training_args.do_train else None, + tokenizer=tokenizer, + ) + + # Training + if training_args.do_train: + checkpoint = None + if training_args.resume_from_checkpoint is not None: + checkpoint = training_args.resume_from_checkpoint + elif last_checkpoint is not None: + checkpoint = last_checkpoint + print(f"resume from checkpoint: {checkpoint}") + train_result = trainer.train(resume_from_checkpoint=checkpoint) + trainer.save_model() # Saves the tokenizer too for easy upload + + metrics = train_result.metrics + + max_train_samples = ( + data_args.max_train_samples if data_args.max_train_samples is not None else len(train_dataset) + ) + metrics["train_samples"] = min(max_train_samples, len(train_dataset)) + + trainer.log_metrics("train", metrics) + trainer.save_metrics("train", metrics) + trainer.save_state() + + +if __name__ == "__main__": + main() diff --git a/setup.py b/setup.py new file mode 100644 index 00000000..93f3a82e --- /dev/null +++ b/setup.py @@ -0,0 +1,64 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from setuptools import find_packages, setup + +# instructions for releasing new version: update the version number, then follow +# from 6 https://github.com/huggingface/diffusers/blob/49b959b5408b97274e2ee423059d9239445aea26/setup.py#L36C43-L38C1 +# this has not yet been pushed to pypyi-test +setup( + name="rewardbench", + version="0.1.1", + author="Nathan Lambert", + author_email="nathanl@allenai.org", + description="Tools for evaluating reward models", + entry_points={ + "console_scripts": ["rewardbench=rewardbench.rewardbench:main"], + }, + long_description=open("README.md").read(), + long_description_content_type="text/markdown", + url="https://github.com/allenai/rewardbench", + packages=find_packages(), + classifiers=[ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: Apache Software License", + "Operating System :: OS Independent", + ], + python_requires=">=3.10", + install_requires=[ + "accelerate", + "bitsandbytes", + "black", + "datasets", + "deepspeed", + "einops", + "flake8>=6.0", + "fschat", + "huggingface_hub", + "isort>=5.12.0", + "pandas", + "peft", + "pytest", + "scipy", + "sentencepiece", + "tabulate", # dependency for markdown rendering in pandas + "tokenizers", + "torch", + "tiktoken==0.6.0", # added for llama 3 + "transformers==4.40.0", # pinned at llama 3 + "trl>=0.8.2", # fixed transformers import error + # TODO consider vllm in setup, currently only in dockerfile + # "vllm @ git+https://github.com/vllm-project/vllm.git@d87f39e9a9dd149f5dd7a58b4d98b21f713827b6", # noqa, # TODO pin version, Command R Plus is currently only in source install + ], +) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/test_data.py b/tests/test_data.py new file mode 100644 index 00000000..a6ec6920 --- /dev/null +++ b/tests/test_data.py @@ -0,0 +1,245 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import unittest + +from datasets import load_dataset +from fastchat.conversation import get_conv_template +from transformers import AutoTokenizer + +from rewardbench import ( + load_eval_dataset, + prepare_dialogue, + prepare_dialogue_from_tokenizer, +) + + +class PrepareDialoguesTest(unittest.TestCase): + def setUp(self): + self.tokenizer = AutoTokenizer.from_pretrained("allenai/rlhf-test-tokenizer") + self.conv = get_conv_template("tulu") + + def test_prepare_dialogue_from_tokenizer(self): + example = {} + example["prompt"] = "What are different drawers I should have for clothes?" + example["chosen"] = "Utensils!" + example["rejected"] = "Hmm." + + prepared = prepare_dialogue_from_tokenizer(example, self.tokenizer) + desired_chosen = "<|user|>\nWhat are different drawers I should have for clothes?<|endoftext|>\n<|assistant|>\nUtensils!<|endoftext|>\n" # noqa + desired_rejected = "<|user|>\nWhat are different drawers I should have for clothes?<|endoftext|>\n<|assistant|>\nHmm.<|endoftext|>\n" # noqa + assert prepared["prompt"] == "<|user|>\nWhat are different drawers I should have for clothes?<|endoftext|>\n" + assert prepared["text_chosen"] == desired_chosen + assert prepared["text_rejected"] == desired_rejected + + def test_prepare_dialogue_from_tokenizer_multi_turn(self): + example = {} + example["prompt"] = [ + { + "content": "I love to drink coffee at work.", + "role": "user", + }, + { + "content": "Great, so that’s something you want to purchase.", + "role": "assistant", + }, + {"content": "To make coffee at work?", "role": "user"}, + ] + example["chosen"] = "Yes, you’re correct!" + example["rejected"] = "No, that's wrong!" + prepared = prepare_dialogue_from_tokenizer(example, self.tokenizer) + + desired_rejected = "<|user|>\nI love to drink coffee at work.<|endoftext|>\n<|assistant|>\nGreat, so that’s something you want to purchase.<|endoftext|>\n<|user|>\nTo make coffee at work?<|endoftext|>\n<|assistant|>\nNo, that's wrong!<|endoftext|>\n" # noqa + desired_chosen = "<|user|>\nI love to drink coffee at work.<|endoftext|>\n<|assistant|>\nGreat, so that’s something you want to purchase.<|endoftext|>\n<|user|>\nTo make coffee at work?<|endoftext|>\n<|assistant|>\nYes, you’re correct!<|endoftext|>\n" # noqa + assert ( + prepared["prompt"] + == "<|user|>\nI love to drink coffee at work.<|endoftext|>\n<|assistant|>\nGreat, so that’s something you want to purchase.<|endoftext|>\n<|user|>\nTo make coffee at work?<|endoftext|>\n" # noqa + ) + assert prepared["text_chosen"] == desired_chosen + assert prepared["text_rejected"] == desired_rejected + + def test_prepare_dialogue_from_tokenizer_ift(self): + # tokenizer = AutoTokenizer.from_pretrained("allenai/rlhf-test-tokenizer") + example = {} + example["prompt"] = "What are different drawers I should have for clothes?" + example["input"] = "Utensils!" + + prepared = prepare_dialogue_from_tokenizer(example, self.tokenizer, ift=True) + desired_text = "<|user|>\nWhat are different drawers I should have for clothes?<|endoftext|>\n<|assistant|>\nUtensils!<|endoftext|>\n" # noqa + assert prepared["text"] == desired_text + + def test_prepare_dialogue_single_turn(self): + example = {} + example["prompt"] = "What are different drawers I should have for clothes?" + example["chosen"] = "Utensils!" + example["rejected"] = "Hmm." + + prepared = prepare_dialogue(example, self.conv) + desired_chosen = "<|user|>\nWhat are different drawers I should have for clothes?\n<|assistant|>\nUtensils!\n" + desired_rejected = "<|user|>\nWhat are different drawers I should have for clothes?\n<|assistant|>\nHmm.\n" + assert prepared["prompt"] == "<|user|>\nWhat are different drawers I should have for clothes?\n" + assert prepared["text_chosen"] == desired_chosen + assert prepared["text_rejected"] == desired_rejected + + def test_prepare_dialogue_multi_turn(self): + example = {} + example["prompt"] = [ + { + "content": "I love to drink coffee at work.", + "role": "user", + }, + { + "content": "Great, so that’s something you want to purchase.", + "role": "assistant", + }, + {"content": "To make coffee at work?", "role": "user"}, + ] + example["chosen"] = "Yes, you’re correct!" + example["rejected"] = "No, that's wrong!" + prepared = prepare_dialogue(example, self.conv) + + desired_chosen = "<|user|>\nI love to drink coffee at work.\n<|assistant|>\nGreat, so that’s something you want to purchase.\n<|user|>\nTo make coffee at work?\n<|assistant|>\nYes, you’re correct!\n" # noqa + desired_rejected = "<|user|>\nI love to drink coffee at work.\n<|assistant|>\nGreat, so that’s something you want to purchase.\n<|user|>\nTo make coffee at work?\n<|assistant|>\nNo, that's wrong!\n" # noqa + assert ( + prepared["prompt"] + == "<|user|>\nI love to drink coffee at work.\n<|assistant|>\nGreat, so that’s something you want to purchase.\n<|user|>\nTo make coffee at work?\n" # noqa + ) + assert prepared["text_chosen"] == desired_chosen + assert prepared["text_rejected"] == desired_rejected + + def test_prepare_dialogue_ift(self): + example = {} + example["prompt"] = "What are different drawers I should have for clothes?" + example["input"] = "Utensils!" + + prepared = prepare_dialogue(example, self.conv, ift=True) + desired_text = "<|user|>\nWhat are different drawers I should have for clothes?\n<|assistant|>\nUtensils!\n" + assert prepared["text"] == desired_text + + +class DatasetTest(unittest.TestCase): + def test_core_dataset_lens(self): + # must be updated whenever dataset is updated + dataset = load_dataset("allenai/reward-bench", split="filtered") + assert len(dataset) == 2985 + + def test_test_sets_lens(self): + # must be updated whenever dataset is updated + dataset = load_dataset("allenai/pref-test-sets") + assert len(dataset["anthropic_harmless"]) == 2266 + assert len(dataset["anthropic_helpful"]) == 6192 + assert len(dataset["anthropic_hhh"]) == 221 + assert len(dataset["summarize"]) == 9000 + assert len(dataset["pku_better"]) == 9000 + assert len(dataset["pku_safer"]) == 9000 + assert len(dataset["shp"]) == 1741 + assert len(dataset["mtbench_human"]) == 3355 + assert len(dataset["mtbench_gpt4"]) == 2400 + + +class LoadEvalDatasetTest(unittest.TestCase): + def setUp(self): + self.tokenizer = AutoTokenizer.from_pretrained("HuggingFaceH4/zephyr-7b-beta") + self.conv = get_conv_template("tulu") + + def test_load_core_set_with_conv(self): + dataset, _ = load_eval_dataset( + core_set=True, + conv=self.conv, + custom_dialogue_formatting=False, + tokenizer=None, + keep_columns=["text_chosen", "text_rejected", "prompt"], + ) + + self.assertEqual(dataset[0]["prompt"], "<|user|>\nHow do I detail a car?\n", "Dialogue formatting error") + self.assertEqual( + dataset[0]["text_chosen"][:100], + "<|user|>\nHow do I detail a car?\n<|assistant|>\nDetailing a car involves a thorough cleaning inside an", + "Dialogue formatting error", + ) + self.assertEqual( + dataset[0]["text_chosen"][-100:], + "ember, regular detailing can prevent wear and tear and keep your car looking new for years to come.\n", + "Dialogue formatting error", + ) + + def test_load_pref_sets_with_conv(self): + dataset, _ = load_eval_dataset( + core_set=False, + conv=self.conv, + custom_dialogue_formatting=False, + tokenizer=None, + keep_columns=["text_chosen", "text_rejected", "prompt"], + ) + + self.assertEqual( + dataset[3456]["prompt"], + "<|user|>\nWhat is the main transportation in the Philippines?\n<|assistant|>\nThat depends on what you mean by “main.” Do you mean how most people move around? Or do you mean how many people use it?\n<|user|>\nYes how do they get around there?\n", # noqa + "Dialogue formatting error", + ) + self.assertEqual( + dataset[3456]["text_chosen"][:100], + "<|user|>\nWhat is the main transportation in the Philippines?\n<|assistant|>\nThat depends on what you ", + "Dialogue formatting error", + ) + self.assertEqual( + dataset[3456]["text_chosen"][-100:], + "ars - in 2017, the Philippines was the second largest car market in Southeast Asia after Indonesia.\n", + "Dialogue formatting error", + ) + + def test_load_core_set_with_tokenizer(self): + dataset, _ = load_eval_dataset( + core_set=True, + conv=None, + custom_dialogue_formatting=False, + tokenizer=self.tokenizer, + keep_columns=["text_chosen", "text_rejected", "prompt"], + ) + + self.assertEqual(dataset[0]["prompt"], "<|user|>\nHow do I detail a car?\n", "Dialogue formatting error") + self.assertEqual( + dataset[0]["text_chosen"][:100], + "<|user|>\nHow do I detail a car?\n<|assistant|>\nDetailing a car involves a thorough cleaning insid", + "Dialogue formatting error", + ) + self.assertEqual( + dataset[0]["text_chosen"][-100:], + "r, regular detailing can prevent wear and tear and keep your car looking new for years to come.\n", + "Dialogue formatting error", + ) + + def test_load_pref_sets_with_tokenizer(self): + dataset, _ = load_eval_dataset( + core_set=False, + conv=None, + custom_dialogue_formatting=False, + tokenizer=self.tokenizer, + keep_columns=["text_chosen", "text_rejected", "prompt"], + ) + + self.assertEqual( + dataset[3456]["prompt"], + "<|user|>\nWhat is the main transportation in the Philippines?\n<|assistant|>\nThat depends on what you mean by “main.” Do you mean how most people move around? Or do you mean how many people use it?\n<|user|>\nYes how do they get around there?\n", # noqa + "Dialogue formatting error", + ) + self.assertEqual( + dataset[3456]["text_chosen"][:100], + "<|user|>\nWhat is the main transportation in the Philippines?\n<|assistant|>\nThat depends on what ", + "Dialogue formatting error", + ) + self.assertEqual( + dataset[3456]["text_chosen"][-100:], + "- in 2017, the Philippines was the second largest car market in Southeast Asia after Indonesia.\n", + "Dialogue formatting error", + ) diff --git a/tests/test_package.py b/tests/test_package.py new file mode 100644 index 00000000..80f01423 --- /dev/null +++ b/tests/test_package.py @@ -0,0 +1,45 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# tests to make sure the code in the package is working as expected +import unittest + +from fastchat.conversation import get_conv_template +from transformers import AutoTokenizer + +from rewardbench import load_preference_dataset + + +class LoadAnyDataTest(unittest.TestCase): + """ + Simple scripts to make sure the loading scripts do not error. + """ + + def setUp(self): + self.tokenizer = AutoTokenizer.from_pretrained("allenai/rlhf-test-tokenizer") + self.conv = get_conv_template("tulu") + + def test_load_standard_tokenizer(self): + load_preference_dataset( + "allenai/ultrafeedback_binarized_cleaned", split="test_prefs", tokenizer=self.tokenizer + ) + + def test_load_standard_conv(self): + load_preference_dataset("allenai/ultrafeedback_binarized_cleaned", split="test_prefs", conv=self.conv) + + def test_load_alt_tokenizer(self): + load_preference_dataset("allenai/preference-test-sets", split="shp", tokenizer=self.tokenizer) + + def test_load_alt_conv(self): + load_preference_dataset("allenai/preference-test-sets", split="shp", conv=self.conv) diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 00000000..e01795e0 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,44 @@ +# Copyright 2023 AllenAI. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import json +import unittest + +from rewardbench import save_to_hub + + +class SaveDataTest(unittest.TestCase): + def test_save_locally(self): + model_name = "fake/fake_model" + fake_results = { + "model": model_name, + "model_type": "random", + "alpacaeval-easy": 0.12345, + "math-prm": 0.54321, + } + _ = save_to_hub( + fake_results, + model_name, # must be the same as in the json + "eval-set/", + True, # doesn't matter if not pushed to hub + local_only=True, + ) + + # read results + expected_path = "results/eval-set/fake/fake_model.json" + with open(expected_path, "r") as f: + output = json.load(f) + + self.assertAlmostEqual(output["alpacaeval-easy"], 0.12345, places=5) + self.assertAlmostEqual(output["math-prm"], 0.54321, places=5) + # accounts for weird json float conversion From 098aef6f03725e69c9fe751706d3abd85e989deb Mon Sep 17 00:00:00 2001 From: Wei Xiong Date: Tue, 14 May 2024 09:27:03 +0800 Subject: [PATCH 9/9] improve style and quality --- rewardbench/models/__init__.py | 2 +- rewardbench/models/slicpairpm.py | 48 +++++++++++++++++++------------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/rewardbench/models/__init__.py b/rewardbench/models/__init__.py index f9d0b9e7..29c63fee 100644 --- a/rewardbench/models/__init__.py +++ b/rewardbench/models/__init__.py @@ -29,13 +29,13 @@ from .openbmb import LlamaRewardModel, OpenBMBPipeline from .pairrm import DebertaV2PairRM, PairRMPipeline from .shp import SHPPipeline +from .slicpairpm import SlicPairPMPipeline from .starling import ( LlamaForSequenceClassification, StarlingPipeline, build_starling_rm, ) from .ziya import ZiyaPipeline -from .slicpairpm import SlicPairPMPipeline # Please open a PR if you need to add more custom modeling code / utilize existing code for you model REWARD_MODEL_CONFIG = { diff --git a/rewardbench/models/slicpairpm.py b/rewardbench/models/slicpairpm.py index 4f37edc7..d412a534 100644 --- a/rewardbench/models/slicpairpm.py +++ b/rewardbench/models/slicpairpm.py @@ -1,20 +1,28 @@ -import torch -from transformers import AutoTokenizer, AutoModelForCausalLM -import numpy as np from typing import List +import numpy as np +import torch +from transformers import AutoTokenizer + class SlicPairPMPipeline: def __init__(self, task, model, tokenizer): - #self.model = AutoModelForCausalLM.from_pretrained(model_path,).cuda() #, attn_implementation="flash_attention_2", torch_dtype=torch.bfloat16 - #self.model.eval() - self.model = model - self.task = task - self.tokenizer = tokenizer - #self.tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=True) - self.tokenizer_data_format = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct", use_fast=True) - self.tokenizer_data_format.chat_template = "\n{% for message in messages %}{% if loop.index0 % 2 == 0 %}\n\n user\n {{ message['content'] }}{% else %}\n\n assistant\n {{ message['content'] }}{% endif %}{% endfor %}\n\n\n" + + # self.model.eval() + self.model = model + self.task = task + self.tokenizer = tokenizer + # self.tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=True) + self.tokenizer_data_format = AutoTokenizer.from_pretrained( + "meta-llama/Meta-Llama-3-8B-Instruct", use_fast=True + ) + x1 = "\n{% for message in messages %}{% if loop.index0 % 2 == 0 %}\n\n user" + x2 = "\n {{ message['content'] }}{% else %}\n\n assistant\n" + x3 = " {{ message['content'] }}{% endif %}{% endfor %}\n\n\n" + my_template = x1 + x2 + x3 + + self.tokenizer_data_format.chat_template = my_template self.prompt_template = "[CONTEXT] {context} [RESPONSE A] {response_A} [RESPONSE B] {response_B} \n" token_id_A = self.tokenizer.encode("A", add_special_tokens=False) @@ -25,14 +33,14 @@ def __init__(self, task, model, tokenizer): self.temperature = 1.0 def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: List[str]): - ''' + """ Input: prompts: [prompt1, prompt2, ..., promptn] candidates_A: [responseA1, responses A2, ..., responseAn] candidates_B: [responseB1, responses B2, ..., responseBn] Output: probs_choose_A: [P(responseA1 > responseB1 | prompt1), ...., P(responseAn > responseBn | promptn)] - ''' + """ assert len(prompts) == len(candidates_A) assert len(candidates_A) == len(candidates_B) probs_choose_A = [] @@ -40,9 +48,9 @@ def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: Li instruction = [{"role": "user", "content": prompts[i]}] context = self.tokenizer_data_format.apply_chat_template(instruction, tokenize=False) responses = [candidates_A[i], candidates_B[i]] - + probs_chosen = [] - + for chosen_position in [0, 1]: # we swap order to mitigate position bias response_A = responses[chosen_position] @@ -52,8 +60,12 @@ def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: Li {"role": "user", "content": prompt}, ] - input_ids = self.tokenizer.encode(self.tokenizer.apply_chat_template(message, tokenize=False).replace(self.tokenizer.bos_token, ""), return_tensors='pt', add_special_tokens=False).cuda() - + input_ids = self.tokenizer.encode( + self.tokenizer.apply_chat_template(message, tokenize=False).replace(self.tokenizer.bos_token, ""), + return_tensors="pt", + add_special_tokens=False, + ).cuda() + with torch.no_grad(): output = self.model(input_ids) logit_A = output.logits[0, -1, self.token_id_A].item() @@ -66,5 +78,3 @@ def __call__(self, prompts: List[str], candidates_A: List[str], candidates_B: Li probs_choose_A.append(np.mean(probs_chosen)) # probs_chose_B = 1 - probs_choose_A return probs_choose_A - -