ML-Bench:在代码仓库层面评估大型语言模型和智能体的机器学习任务
📖 论文 • 🚀 Github 页面 • 📊 数据
目录
- 📋 前提条件
- 📊 数据准备
- 🦙 ML-LLM-Bench
- 🤖 ML-Agent-Bench
- 🌍 环境设置
- 🛠️ 数据策展工具
- 📝 引用
- 📜 许可
📋 前提条件
要克隆包含所有子模块的这个仓库,请使用 --recurse-submodules
标志:
git clone --recurse-submodules https://github.com/gersteinlab/ML-Bench.git
cd ML-Bench
如果你已经克隆了没有 --recurse-submodules
标志的仓库,可以运行以下命令来获取子模块:
git submodule update --init --recursive
然后运行
pip install -r requeirments.txt
📊 数据准备
你可以使用以下代码加载数据集:
from datasets import load_dataset
ml_bench = load_dataset("super-dainiu/ml-bench") # splits: ['full', 'quarter']
数据集包含以下列:
github_id
:GitHub 仓库的 ID。github
:GitHub 仓库的 URL。repo_id
:每个仓库内样本的 ID。id
:整个数据集中样本的唯一 ID。path
:LLM-Bench 对应文件夹的路径。arguments
:用户需求中指定的参数。instruction
:任务的用户指令。oracle
:与任务相关的 oracle 内容。type
:根据 oracle 内容的预期输出类型。output
:根据 oracle 内容生成的地面真相输出。prefix_code
:用于准备执行环境的代码片段
如果你想运行 ML-LLM-Bench,需要对数据集进行后处理。你可以使用以下代码来后处理数据集:
bash scripts/post_process/prepare.sh
详情请参见 post_process。
🦙 ML-LLM-Bench
📋 前提条件
克隆子模块后,你可以运行
cd scripts/post_process
bash prepare.sh
生成 merged_full_benchmark.jsonl
和 merged_quarter_benchmark.jsonl
文件
你可以在 merge.py
文件的第50行中将 readme_content = fr.read()
更改为 readme_content = fr.read()[:100000]
以获取32k长度的 README 内容,或者更改为 readme_content = fr.read()[:400000]
以获取128k长度的 README 内容。
在128k设置下,用户可以在10分钟内用10个工人准备训练集和测试集。如果没有 token 限制,用户可能需要2小时才能准备完整的数据集并获得一个庞大的数据集。
🌍 环境设置
要运行 ML-LLM-Bench Docker 容器,你可以使用以下命令:
docker pull public.ecr.aws/i5g0m1f6/ml-bench
docker run -it -v ML_Bench:/deep_data public.ecr.aws/i5g0m1f6/ml-bench /bin/bash
要下载模型权重和准备文件,你可以使用以下命令:
cd utils
bash download_model_weight_pics.sh
自动准备这些内容可能需要2小时。
🛠️ 使用方法
将你的结果放在 utils/results
目录,并更新 exec.sh
中的 --result_path
路径。还需要修改日志地址。
然后运行 bash exec.sh
。你可以在日志文件中查看运行日志,在 eval_total_user.jsonl
中查看整体结果,在 eval_result_user.jsonl
中查看每个仓库的结果。
开头为 eval_result
和 eval_total
的两个 JSONL 文件包含我们论文中部分执行结果。
`utils/results` 文件夹包括我们用于测试的模型生成输出。
`utils/exec_logs` 文件夹保存了我们的执行日志。
`temp.py` 文件不供用户使用,它用于存储模型编写的代码。
此外,执行过程中可能会生成一些不必要的新文件。
📞 API 调用
要重现 OpenAI 在此任务上的表现,请使用以下脚本:
bash script/openai/run.sh
你需要更改 script/openai/run.sh
中的参数设置:
type
:从quarter
或full
中选择。model
:模型名称。input_file
:数据集的文件路径。answer_file
:GPT 生成的原始答案的 JSON 格式文件。parsing_file
:GPT 输出的后处理 JSONL 格式文件,获取可执行的代码段。readme_type
:从oracle_segment
和readme
中选择。oracle_segment
:README 中与任务最相关的代码段。readme
:任务所在仓库的 README 全文。
engine_name
:从gpt-35-turbo-16k
和gpt-4-32
中选择。n_turn
:GPT 返回的可执行代码数量(论文实验中为5次)。openai_key
:你的 OpenAI API 密钥。
详情请参见 openai。
🔧 开源模型微调
📋 前提条件
Llama-recipes 提供了便于安装和使用的 pip 分发包。或者可以从源码安装。
- 通过 pip 安装
pip install --extra-index-url https://download.pytorch.org/whl/test/cu118 llama-recipes
- 从源码安装 如需从源码安装(例如用于开发),请使用以下命令。我们使用 hatchling 作为我们的构建后端,这需要最新版本的 pip 以及 setuptools 软件包。
git clone https://github.com/facebookresearch/llama-recipes
cd llama-recipes
pip install -U pip setuptools
pip install --extra-index-url https://download.pytorch.org/whl/test/cu118 -e .
🏋️ 微调
根据定义,论文中有三个任务。
- 任务 1:给定任务描述 + 代码,生成一个代码片段。
- 任务 2:给定任务描述 + 检索,生成一个代码片段。
- 任务 3:给定任务描述 + Oracle,生成一个代码片段。
你可以使用以下脚本来重现 CodeLlama-7b 在此任务上的微调表现:
torchrun --nproc_per_node 2 finetuning.py \
--use_peft \
--peft_method lora \
--enable_fsdp \
--model_name codellama/CodeLlama-7b-Instruct-hf \
--context_length 8192 \
--dataset mlbench_dataset \
--output_dir OUTPUT_PATH \
--task TASK \
--data_path DATA_PATH \
你需要相应更改 OUTPUT_PATH
、TASK
和 DATA_PATH
的参数设置。
OUTPUT_DIR
:用于保存模型的目录。TASK
:从1
、2
和3
中选择。DATA_PATH
:数据集目录。
🔍 推断
你可以使用以下脚本来重现 CodeLlama-7b 在此任务上的推断表现:
python chat_completion.py \
--model_name 'codellama/CodeLlama-7b-Instruct-hf' \
--peft_model PEFT_MODEL \
--prompt_file PROMPT_FILE \
--task TASK \
你需要相应更改 PEFT_MODEL
、PROMPT_FILE
和 TASK
的参数设置。
PEFT_MODEL
:PEFT 模型的路径。PROMPT_FILE
:提示文件的路径。TASK
:从1
、2
和3
中选择。
详情请参见 finetune。
🤖 ML-Agent-Bench
🌍 环境设置
要运行 ML-Agent-Bench Docker 容器,你可以使用以下命令:
docker pull public.ecr.aws/i5g0m1f6/ml-bench
docker run -it public.ecr.aws/i5g0m1f6/ml-bench /bin/bash
这将拉取最新的 ML-Agent-Bench Docker 镜像并在交互式 shell 中运行。容器包含运行 ML-Agent-Bench 代码库所需的所有依赖项。
关于 OpenDevin 中的 ML-Agent-Bench,请参阅 OpenDevin 设置指南。
详情请参见 envs。
📝 引用
这项工程受到一些相关项目的启发。我们要感谢作者们的贡献。如果你发现这个项目或数据集有用,请引用它:
@article{tang2024mlbench,
title={ML-Bench: Evaluating Large Language Models and Agents for Machine Learning Tasks on Repository-Level Code},
author={Xiangru Tang and Yuliang Liu and Zefan Cai and Yanjun Shao and Junjie Lu and Yichi Zhang and Zexuan Deng and Helan Hu and Kaikai An and Ruijun Huang and Shuzheng Si and Sheng Chen and Haozhe Zhao and Liang Chen and Yan Wang and Tianyu Liu and Zhiwei Jiang and Baobao Chang and Yin Fang and Yujia Qin and Wangchunshu Zhou and Yilun Zhao and Arman Cohan and Mark Gerstein},
year={2024},
eprint={2311.09835},
archivePrefix={arXiv},
primaryClass={'cs.CL'}
}
📜 许可
遵循 MIT 许可协议分发。更多信息请参见 LICENSE
。