Empty Generations / Failing Reproducing 40% on HumanEval
Author: leonardtangCreated Nov 30, 2023Updated Apr 26, 2024
Hi all, I've set up Starcoder as follows:
gen_checkpoint = "bigcode/starcoder"
gen_device = "cuda"
gen_tokenizer, gen_model = setup_model_tokenizer(
gen_checkpoint, bit_4=False, device=gen_device, bnb_config=None
)def setup_model_tokenizer(
path,
device=None,
bit_4=False,
bit_8=False,
max_memory=None,
bnb_config=None,
):
tokenizer = setup_tokenizer(path)
if torch.cuda.device_count() > 1:
model = AutoModelForCausalLM.from_pretrained(
path,
trust_remote_code=True,
device_map="auto",
load_in_4bit=bit_4,
load_in_8bit=bit_8,
max_memory=max_memory,
quantization_config=bnb_config,
).eval()
else:
if not bit_4 and not bit_8:
model = (
AutoModelForCausalLM.from_pretrained(path, trust_remote_code=True)
.to(device)
.eval()
)
else:
model = AutoModelForCausalLM.from_pretrained(
path,
trust_remote_code=True,
load_in_4bit=bit_4,
load_in_8bit=bit_8,
quantization_config=bnb_config,
).eval()
return tokenizer, modelgen_outputs_dict = gen_model.generate(
**gen_inputs,
pad_token_id=gen_tokenizer.eos_token_id,
max_new_tokens=NEW_TOKENS,
return_dict_in_generate=True,
do_sample=True,
temperature=TEMP,
top_p=0.95,
top_k=0,
stopping_criteria=construct_stopping_criteria(
"code", STOP_SEQS, gen_tokenizer, gen_device
),
)The stop tokens I'm using are a subset of those found in the Codex paper: STOP_SEQS = ["\nclass", "\ndef"].
Somehow, it looks like I'm consistently getting empty generations however -- just an EOS token. Concretely, around ~20% of my generations are empty on HumanEval.
I'm using the suggested prompt as well, i.e. "<filename>solutions/solution_1.py\n# Here is the correct implementation of the code exercise\n".
I'm getting around 15% on HumanEval, not 40% as stated in the paper. I'm setting TEMP = 0.2 and NEW_TOKENS=128. Would somebody be able to point out what might be going wrong?
Source: bigcode-project/starcoder