# Evaluating Language Models for Efficient Code Generation (COLM'24) * [Paper](https://www.arxiv.org/abs/2408.06450) * [Poster](https://jw-liu.xyz/assets/pdf/jiawei-colm-evalperf-poster.pdf) ## Overview **Code Efficiency Evaluation** requires: * **Performance-exercising tasks**: * Computationally non-trivial *task* * Computationally intensive *test input* * **Meaningful compound metric**: * We need to evaluate on multiple tasks to get statistical sense of LLM's code efficiency * Yet, commonly used avg. speedup is biased towards tasks with larger efficiency gaps. Using **Differential Performance Evaluation**, we curate the EvalPerf dataset -- current version (`20240328`) includes: * 118 performance-exercising tasks * Each task is equipped with a computationally challenging test input generated by the SaS generator * Differential performance score (DPS) that brings conclusions like "Your submission can outperform 80% of LLM solutions..." * Pairwise comparison of LLMs' code efficiency over commonly passing tasks to ablate correctness impact ## Running EvalPerf ```bash evalplus.evalperf --model {model_name} --backend [vllm|hf|openai|google|anthropic] # model_name can be hugginface path such as `ise-uiuc/Magicoder-DS-6.7B` ``` This script overall performs four steps: * **Step 1**: We sample 100 solutions (`n_samples`) from each LLM to evaluate * **Step 2**: For tasks with at least 10 passing samples (`min_correct`), we perform efficiency evaluation * **Step 3**: Produce a `{model_name}_evalperf_v{VERSION}.jsonl` file where each line includes: * `task_id` (str) * `results` (`List[Dict]`) * `solution` (str) * `pass` (bool) * `profiled` (bool) * `matching_cluster_idx` (`Optional[int]`) * `_num_cpu_instructions` (`Optional[int]`) * `dps` (`Optional[float]`) * `dps_norm` (`Optional[float]`) * `ref` (`List[Dict]`) * `solution` (str) * `score` (float; 100 based) * `_num_cpu_instructions` (`Optional[int]`) * `dps` (`Optional[float]`) * `dps_norm` (`Optional[float]`) * `pass@1` (float; 100 based) * `n_profiled` (`Optional[int]`) * **Step 4**: Compute the differential performance score ## Citation ```bibtex @inproceedings{liu2024evaluating, title = {Evaluating Language Models for Efficient Code Generation}, author = {Liu, Jiawei and Xie, Songrun and Wang, Junhao and Wei, Yuxiang and Ding, Yifeng and Zhang, Lingming}, booktitle = {First Conference on Language Modeling}, year = {2024}, url = {https://openreview.net/forum?id=IBCBMeAhmC}, } ```