AI-Scientist 如何用 --parallel 与 --gpus 在多 GPU 上并行执行多个想法实验
【免费下载链接】AI-ScientistThe AI Scientist: Towards Fully Automated Open-Ended Scientific Discovery 🧑🔬项目地址: https://gitcode.com/GitHub_Trending/ai/AI-Scientist
AI-Scientist 的完整流程是「生成想法 → 跑实验 → 写论文 → 评审」。当你在多卡机器上批量验证想法时,逐条串行执行会浪费其余 GPU 的算力。launch_scientist.py提供了--parallel与--gpus两个参数,可以把多个通过新颖性检查的想法分发到多个 GPU 上并行执行。本文说明这两个参数的行为细节、一条可直接执行的多卡并行命令,以及如何判断运行是否完成。
前提条件(README 明确给出的环境要求):Linux 系统、NVIDIA GPU、CUDA 与 PyTorch;代码在纯 CPU 机器上跑不完模板实验;其他操作系统可能需要大量调整。
运行前必须完成的准备
这些步骤来自 README.md 的 Requirements 与 Setting Up the Templates 章节,缺少任何一步都会导致后续阶段失败:
conda create -n ai_scientist python=3.11 conda activate ai_scientist # Install pdflatex sudo apt-get install texlive-full # Install PyPI requirements pip install -r requirements.txt几点说明:
- README 提示
texlive-full安装可能很久,安装过程中可能需要按住 Enter。 - 写入 LaTeX 论文前,
launch_scientist.py会检查pdflatex与chktex是否存在,缺失时打印Error: Required LaTeX dependencies not found:并以非零状态退出(见 check_latex_dependencies),所以上面这步不能省。 - 每个模板必须先完成各自的 setup 并创建
run_0基线:nanoGPT 要先跑三个数据准备脚本再建基线;2D Diffusion 要先安装 NPEET 依赖;Grokking 要先pip install einops。具体命令见 README 模板配置章节,基线run_0因硬件差异必须在每台机器上自建。 - 配置所选模型对应的 API key,例如
export OPENAI_API_KEY="YOUR KEY HERE";支持列表与各家 key 的环境变量见 ai_scientist/llm.py 的AVAILABLE_LLMS与 README 的 "Supported Models and API Keys"。注意评审阶段固定调用gpt-4o-2024-05-13(do_idea),因此OPENAI_API_KEY需要可用。
--parallel 与 --gpus 的行为
两个参数都定义在 launch_scientist.py:
--parallel type=int, default=0 Number of parallel processes to run. 0 for sequential execution. --gpus type=str, default=None Comma-separated list of GPU IDs to use (e.g., '0,1,2'). If not specified, all available GPUs will be used.结合源码,实际行为是:
--parallel缺省为 0,即串行执行;设为 N 才启动 N 个并行进程,每个想法完成后进程再从队列领取下一个想法。--gpus不指定时,用torch.cuda.device_count()取到的全部可见 GPU;指定时按逗号分隔解析为 GPU 编号列表(get_available_gpus)。启动时如果
--parallel大于可用 GPU 数,会打印警告并自动下调到 GPU 数:Warning: Requested {N} parallel processes, but only {M} GPUs available. Adjusting to {M}.第 i 个进程分到的 GPU 是
available_gpus[i % len(available_gpus)],即编号按轮询方式复用(并行调度代码)。每个 worker 进程启动时先设置
os.environ["CUDA_VISIBLE_DEVICES"] = str(gpu_id)(worker),把自己限制在分配的那张卡上,因此进程间 GPU 互不冲突。进程是错峰启动的:相邻两个 worker 之间有
time.sleep(150),即约 150 秒间隔,避免同时发起 LLM 请求。并行只作用于「执行通过新颖性检查的想法」这一段。想法生成(
--num-ideas控制数量)与新颖性检查在启动进程之前由主进程串行完成,结果写入模板目录的ideas.json。
执行多 GPU 并行实验
README 给出的标准命令是(README.md "Run AI Scientist Paper Generation Experiments"):
python launch_scientist.py --model "gpt-4o-2024-05-13" --experiment nanoGPT_lite --num-ideas 2并行执行时加上--parallel,例如用 2 个进程:
python launch_scientist.py --model "gpt-4o-2024-05-13" --experiment nanoGPT_lite --num-ideas 2 --parallel 2只使用部分 GPU 时用--gpus指定编号,例如机器有 4 张卡但只用第 0、1 张:
python launch_scientist.py --model "claude-3-5-sonnet-20241022" --experiment nanoGPT_lite --num-ideas 2 --parallel 2 --gpus '0,1''0,1'是帮助文本中示例格式'0,1,2'的用法,换成你机器上实际存在的 GPU 编号。如果--parallel小于 GPU 数(如 4 张卡只开 2 个进程),多出的卡不参与;想让每张卡都干活,把--parallel设为所用 GPU 数即可。
一次完整运行会依次完成:复制模板到结果目录、用 aider 修改experiment.py并执行python experiment.py --out_dir=run_i(单个 run 超时上限 7200 秒,每个想法最多 5 个 run,见 perform_experiments.py)、绘图、生成 LaTeX 论文、调用gpt-4o-2024-05-13评审并写入review.txt。
判断运行状态与结果
程序本身没有额外的监控命令,判断依据是它打印的固定文本和结果目录:
- 启动时打印
Using GPUs: [0, 1]之类的 GPU 列表(若发生自动下调,前面会有上一条警告)。 - 进入并行模式后打印
Running N parallel processes,每个 worker 打印Worker {gpu_id} started.。 - 每个想法结束时打印
Completed idea: {想法名}, Success: True/False;Success: False表示该想法的实验或后续阶段失败,失败原因要看该想法目录里的log.txt——并行模式下 stdout/stderr 被重定向到结果文件夹中的log.txt(do_idea)。 - 全部进程退出后打印
All parallel processes completed.,主程序最后打印All ideas evaluated.,说明整轮结束。 - 产物在
results/<experiment>/下,每个想法一个以时间戳加想法名命名的文件夹,成功时其中包含实验代码副本run_i.py、review.txt、编译出的 PDF 与图片。
单个想法失败不影响其他 worker 继续领取队列中的想法;失败的判断方式与串行模式一致,README FAQ 给出的解释是:单个想法的完成成功率取决于模板、基础模型和想法复杂度,官方建议参照主论文。
限制与注意事项
--gpus中写了机器上不存在的 GPU 编号时,源码没有做校验,该 worker 会因CUDA_VISIBLE_DEVICES指向无效设备而无法使用 GPU;编号应来自你机器实际存在的卡。- README 有明确警告:这套代码会执行 LLM 生成的代码,存在使用危险包、联网、派生进程等风险,官方建议容器化并限制网络访问。仓库提供社区贡献的 Docker 入口 experimental/Dockerfile,README 的 Containerization 章节给出了
docker run示例(镜像内执行同样的--model/--experiment/--num-ideas参数,GPU 隔离机制与宿主机一致)。 - 成本随并行度线性叠加:README FAQ 给出单篇论文在 Claude Sonnet 3.5 上通常低于 15 美元,
--num-ideas越大、--parallel越高,API 总花费与并发请求越多,错峰启动只能缓解启动瞬间的集中请求。 - 若运行中出现「文件缺失」类报错,README FAQ 的排查方向是先确认所有模板准备步骤(数据准备脚本、
run_0基线)已在本机完成。
按Completed idea ... Success: True逐条出现、最终以All ideas evaluated.收尾,且results/<experiment>/下对应文件夹齐全,即完成了这一轮多 GPU 并行执行。
【免费下载链接】AI-ScientistThe AI Scientist: Towards Fully Automated Open-Ended Scientific Discovery 🧑🔬项目地址: https://gitcode.com/GitHub_Trending/ai/AI-Scientist
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考