高难度代码生成基准测试评估LLM编程能力
BigCodeBench是一个具有挑战性的代码生成基准测试,用于评估大型语言模型的实际编程能力。它提供复杂指令和多样函数调用,包括数据集、生成和评估脚本。基于EvalPlus框架,BigCodeBench实现精确评估和排名,提供预生成样本以加速研究。支持多种评估环境,采用unittest进行代码测试,为研究人员提供全面工具。
BigCodeBench是一个易于使用的代码生成基准测试,包含实用且具有挑战性的编程任务。它旨在以更真实的环境评估大型语言模型(LLMs)的真实编程能力。该基准测试设计用于类似HumanEval的函数级代码生成任务,但具有更复杂的指令和多样化的函数调用。
为了便于在BigCodeBench上评估LLMs,我们提供了这个Python包bigcodebench
,其中包含数据集、生成脚本和评估脚本。该包基于EvalPlus框架构建,这是一个灵活且可扩展的代码生成任务评估框架。
BigCodeBench专注于评估具有多样化函数调用和复杂指令的LLM4Code,具有以下特点:
我们继承了EvalPlus框架的设计,这是一个灵活且可扩展的代码生成任务评估框架。然而,BigCodeBench有以下不同之处:
unittest
来评估生成的代码,这更适合BigCodeBench中的测试框架。[!提示]
BigCodeBench ❤️ bigcode-evaluation-harness! BigCodeBench将被集成到bigcode-evaluation-harness中,您也可以在那里运行它!
要开始使用,请首先设置环境:
<details><summary>⏬ 安装每日构建版本 <i>:: 点击展开 ::</i></summary> <div># 安装以使用bigcodebench.evaluate pip install bigcodebench --upgrade # 如果您想在本地使用evaluate,需要安装requirements pip install -I -r https://raw.githubusercontent.com/bigcode-project/bigcodebench/main/Requirements/requirements-eval.txt # 安装以使用bigcodebench.generate # 强烈建议您在单独的环境中安装generate依赖 pip install bigcodebench[generate] --upgrade
</div> </details> <details><summary>⏬ 将BigCodeBench作为本地仓库使用? <i>:: 点击展开 ::</i></summary> <div># 安装以使用bigcodebench.evaluate pip install "git+https://github.com/bigcode-project/bigcodebench.git" --upgrade
</div> </details>git clone https://github.com/bigcode-project/bigcodebench.git cd bigcodebench export PYTHONPATH=$PYTHONPATH:$(pwd) # 安装以使用bigcodebench.evaluate pip install -e . # 安装以使用bigcodebench.generate pip install -e .[generate]
建议使用flash-attn
生成代码样本。
pip install -U flash-attn
要从模型生成代码样本,可以使用以下命令:
# 当使用贪婪搜索时,不需要设置温度和样本数 bigcodebench.generate \ --model [模型名称] \ --split [complete|instruct] \ --subset [full|hard] \ [--greedy] \ --bs [批处理大小] \ --temperature [温度] \ --n_samples [样本数] \ --resume \ --backend [vllm|hf|openai|mistral|anthropic|google] \ --tp [GPU数量] \ [--trust_remote_code] \ [--base_url [基础URL]] \ [--tokenizer_name [分词器名称]]
生成的代码样本将存储在名为[模型名称]--bigcodebench-[instruct|complete]--[后端]-[温度]-[样本数].jsonl
的文件中。或者,你可以使用以下命令来使用我们预构建的Docker镜像生成代码样本:
# 如果你使用GPU docker run --gpus '"device=$CUDA_VISIBLE_DEVICES"' -v $(pwd):/app -t bigcodebench/bigcodebench-generate:latest \ --model [模型名称] \ --split [complete|instruct] \ --subset [full|hard] \ [--greedy] \ --bs [批处理大小] \ --temperature [温度] \ --n_samples [样本数] \ --resume \ --backend [vllm|hf|openai|mistral|anthropic|google] \ --tp [GPU数量] # ...或者如果你使用CPU docker run -v $(pwd):/app -t bigcodebench/bigcodebench-generate:latest \ --model [模型名称] \ --split [complete|instruct] \ --subset [full|hard] \ [--greedy] \ --bs [批处理大小] \ --temperature [温度] \ --n_samples [样本数] \ --resume \ --backend [vllm|hf|openai|mistral|anthropic|google]
# 如果你想使用受限或私有的HuggingFace模型和数据集 docker run -e HUGGING_FACE_HUB_TOKEN=$token -v $(pwd):/app -t bigcodebench/bigcodebench-generate:latest # 省略其他参数 # 同样,要使用需要认证的其他后端 docker run -e OPENAI_API_KEY=$OPENAI_API_KEY -v $(pwd):/app -t bigcodebench/bigcodebench-generate:latest # 省略其他参数 docker run -e GOOGLE_API_KEY=$OPENAI_API_KEY -v $(pwd):/app -t bigcodebench/bigcodebench-generate:latest # 省略其他参数 docker run -e ANTHROPIC_KEY=$ANTHROPIC_KEY -v $(pwd):/app -t bigcodebench/bigcodebench-generate:latest # 省略其他参数
之后,你可以按上述方式运行构建好的容器。
problem
的结构?(点击展开)
task_id
是任务的标识符字符串entry_point
是函数名complete_prompt
是BigCodeBench-Complete的提示instruct_prompt
是BigCodeBench-Instruct的提示canonical_solution
是标准实现test
是unittest.TestCase
类注意
[模型名称]--bigcodebench-[任务]--[后端]-[温度]-[样本数].jsonl
的预期模式
task_id
:任务ID,即get_bigcodebench()
的键solution
(可选):自包含的解决方案(通常包括提示)
{"task_id": "BigCodeBench/?", "solution": "def f():\n return 1"}
LLM生成的文本可能不是可编译的代码,因为它可能包含自然语言行或不完整的额外代码。我们提供了一个名为bigcodebench.sanitize
的工具来清理代码:
# 💡 如果你想获取校准后的结果: bigcodebench.sanitize --samples samples.jsonl --calibrate # 清理后的代码将输出到`samples-sanitized-calibrated.jsonl` # 💡 可选择使用多进程运行清理步骤以加速 bigcodebench.sanitize --samples samples.jsonl --calibrate --parallel 8 # 💡 如果你想 获取原始结果: bigcodebench.sanitize --samples samples.jsonl # 清理后的代码将输出到`samples-sanitized.jsonl` # 💡 如果你将代码存储在目录中: bigcodebench.sanitize --samples /path/to/vicuna-[??]b_temp_[??] # 清理后的代码将输出到`/path/to/vicuna-[??]b_temp_[??]-sanitized`
如果你想使用预构建的Docker镜像进行后处理,可以使用以下命令:
# 在任何预构建的Docker镜像中将入口点改为bigcodebench.sanitize,例如bigcodebench/bigcodebench-evaluate:latest docker run -it --entrypoint bigcodebench.sanitize -v $(pwd):/app bigcodebench/bigcodebench-evaluate:latest --samples samples.jsonl
检查后处理代码的兼容性(点击展开)
要再次检查后处理结果,你可以使用bigcodebench.syncheck
来检查清理前后的代码有效性,它会打印出错误的代码片段及其错误原因:
# 💡 如果你将代码存储在jsonl中: bigcodebench.syncheck --samples samples.jsonl # 💡 如果你将代码存储在目录中: bigcodebench.syncheck --samples /path/to/vicuna-[??]b_temp_[??] # 💡 或者在任何预构建的Docker镜像中将入口点改为bigcodebench.syncheck,例如 docker run -it --entrypoint bigcodebench.syncheck -v $(pwd):/app bigcodebench/bigcodebench-evaluate:latest --samples samples.jsonl
强烈建议使用沙盒环境,如docker:
# 将当前目录挂载到容器中 # 如果你想更改RAM地址空间限制(单位MB,默认30 GB):`--max-as-limit XXX` # 如果你想更改RAM数据段限制(单位MB,默认30 GB):`--max-data-limit` # 如果你想更改RAM栈限制(单位MB,默认10 MB):`--max-stack-limit` # 如果你想增加执行时间限制(单位秒,默认240秒):`--min-time-limit` docker run -v $(pwd):/app bigcodebench/bigcodebench-evaluate:latest --split [complete|instruct] --subset [full|hard] --samples samples-sanitized-calibrated.jsonl # 如果你只想检查标准答案 docker run -v $(pwd):/app bigcodebench/bigcodebench-evaluate:latest --split [complete|instruct] --subset [full|hard] --samples samples-sanitized-calibrated.jsonl --check-gt-only
...或者如果你不顾风险想在本地尝试 ⚠️:
首先,安装BigCodeBench的依赖:
pip install -r https://raw.githubusercontent.com/bigcode-project/bigcodebench/main/Requirements/requirements-eval.txt
然后运行评估:
# ...或在本地运行 ⚠️ bigcodebench.evaluate --split [complete|instruct] --subset [full|hard] --samples samples-sanitized-calibrated.jsonl # ...如果你真的不想检查标准答案 bigcodebench.evaluate --split [complete|instruct] --subset [full|hard] --samples samples-sanitized-calibrated.jsonl --no-gt # 如果你想将通过率保存到文件中 bigcodebench.evaluate --split [complete|instruct] --subset [full|hard] --samples samples-sanitized-calibrated.jsonl --save_pass_rate # 强烈建议你在评估后使用以下命令清理环境: pids=$(ps -u $(id -u) -o pid,comm | grep 'bigcodebench' | awk '{print $1}'); if [ -n \"$pids\" ]; then echo $pids | xargs -r kill; fi; rm -rf /tmp/*
<details><summary>⌨️ 更多命令行参数 <i>:: 点击展开 ::</i></summary> <div>[!提示]
你的机器运行很慢吗?
LLM解决方案在超时(以及内存不足等情况)时被视为失败。 具体来说,我们根据标准答案解决方案的运行时间设置动态超时。
此外,我们不鼓励你在运行评估时使机器过度压力。 例如,在4核机器上使用
--parallel 64
或在评估过程中做其他事情都是不好的做法...
--parallel
: 默认为核心数的一半输出应该类似于(以下是GPT-4贪婪解码的示例):
断言标准答案...
预期输出在1200.0秒内计算完成
读取样本...
1140it [00:00, 1901.64it/s]
评估样本...
100%|██████████████████████████████████████████| 1140/1140 [19:53<00:00, 6.75it/s]
BigCodeBench-Instruct-calibrated
标准答案通过率: 1.000
pass@1: 0.568
[1, 5, 10]
,其中<=
样本大小的k值将被使用samples_eval_results.json
的缓存文件将被缓存。删除它以重新运行评估如果你进行贪婪解码,每个任务只有一个样本,评估应该在Intel(R) Xeon(R) Gold 6150 CPU @ 2.70GHz(由2个插槽组成,每个插槽18个核心)上只需要几分钟。但是,如果每个任务有多个样本,评估将需要更长时间。 以下是一些加速评估的提示:
--parallel $(nproc)
你可以使用以下命令检查失败的样本:
# 检查失败的样本并将结果保存到`inspect/` bigcodebench.inspect --eval_results sample-sanitized-calibrated_eval_results.json --split complete --subset hard # 就地重新运行检查 bigcodebench.inspect --eval_results sample-sanitized-calibrated_eval_results.json --split complete --subset hard --in_place
我们提供了一个示例脚本来运行完整的流程:
bash run.sh
我们提供了一个脚本来复现Elo评分和任务解决率等分析,这有助于你进一步了解模型的性能。
要运行分析,你需要将所有`samples_eval_results.json`文件放在与脚本相同目录下的`results`文件夹中。 ```bash cd analysis python get_results.py
我们分享了我们评估过的LLM预生成的代码样本:
sanitized_samples.zip
和sanitized_samples_calibrated.zip
。 由于Hugging Face分词器更新,一些分词器可能会出现问题并降低评估性能。因此,我们在初始化时设置legacy=False
。如果你注意到意外行为,请在生成时尝试使用--tokenizer_legacy
。
由于评估的不稳定性,执行结果可能在不同运行之间略有差异(完整集约0.2%,困难集约0.6%)。我们正在努力提高评估的稳定性。
运行评估时,你可能会遇到类似ImportError: /usr/local/lib/python3.10/site-packages/matplotlib/_c_internal_utils.cpython-310-x86_64-linux-gnu.so: failed to map segment from shared object
的错误。这是由于docker容器的内存 限制导致的。你可以增加docker容器的内存限制来解决这个问题。
我们意识到一些用户需要使用代理来访问互联网的问题。我们正在开发一个不需要互联网访问就能评估代码的任务子集。
@article{zhuo2024bigcodebench, title={BigCodeBench: Benchmarking Code Generation with Diverse Function Calls and Complex Instructions}, author={Zhuo, Terry Yue and Vu, Minh Chien and Chim, Jenny and Hu, Han and Yu, Wenhao and Widyasari, Ratnadira and Yusuf, Imam Nur Bani and Zhan, Haolan and He, Junda and Paul, Indraneil and others}, journal={arXiv preprint arXiv:2406.15877}, year={2024} }
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作 、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种 自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥 有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号