eleuther eval readme
The goal here is to run the Eleuther Eval harness exactly in the same way as that used in the huggingface LLM Leaderboard.
The starting point is a .bin file trained by llm.c. We now have to export it to a huggingface model and then evaluate it.
To export the model, use export_hf.py. See its documentation up top. Eample usage, from this directory:
cd dev/eval
python export_hf.py --input model.bin --output output_dir
Where you point to your model .bin file, and huggingface files get written to output_dir. The script can optionally also upload to huggingface hub. One more post-processing that is advisable is to go into the output_dir, open up the config.json there and add one more entry into the json object:
"_attn_implementation": "flash_attention_2"
To use FlashAttention 2. We had trouble evaluating in bfloat16 without using FlashAttention 2 (the scores are much lower, and this was never fully resolved). This is a temporary hack/workaround.
Now that we have the model in huggingface format, we download the Eleuther Eval Harness repo and run it. Head over to the parent/root directory of the llm.c repo and:
git clone https://github.com/EleutherAI/lm-evaluation-harness/
cd lm-evaluation-harness
git checkout b281b0921b636bc36ad05c0b0b0763bd6dd43463
pip install -e .
And then run the run_eval.sh script:
./dev/eval/run_eval.sh output_dir result_dir
Where output_dir can either be local output dir (above), or a huggingface repo name.This will write eval json objects to ./lm-evaluation-harness/results/results_dir. It will print the results into console, e.g. for a 774M model we see:
----------------------------------------
arc_challenge_25shot.json : 30.4608
gsm8k_5shot.json : 0.1516
hellaswag_10shot.json : 57.8072
mmlu_5shot.json : 25.8682
truthfulqa_0shot.json : 35.7830
winogrande_5shot.json : 59.3528
----------------------------------------
Average Score : 34.9039
But you can additionally get these results later by running summarize_eval.py:
python dev/eval/summarize_eval.py lm-evaluation-harness/results/results_dir
The same information will be printed again.
For some reason, the evaluation is quite expensive and runs for somewhere around 1-3 hours, even though it should be a few minutes at most. This has not been satisfyingly resolved so far.