news 2026/9/15 20:41:29

AI-Scientist 如何用 --parallel 与 --gpus 在多 GPU 上并行执行多个想法实验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI-Scientist 如何用 --parallel 与 --gpus 在多 GPU 上并行执行多个想法实验

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会检查pdflatexchktex是否存在,缺失时打印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

判断运行状态与结果

程序本身没有额外的监控命令,判断依据是它打印的固定文本和结果目录:

  1. 启动时打印Using GPUs: [0, 1]之类的 GPU 列表(若发生自动下调,前面会有上一条警告)。
  2. 进入并行模式后打印Running N parallel processes,每个 worker 打印Worker {gpu_id} started.
  3. 每个想法结束时打印Completed idea: {想法名}, Success: True/FalseSuccess: False表示该想法的实验或后续阶段失败,失败原因要看该想法目录里的log.txt——并行模式下 stdout/stderr 被重定向到结果文件夹中的log.txt(do_idea)。
  4. 全部进程退出后打印All parallel processes completed.,主程序最后打印All ideas evaluated.,说明整轮结束。
  5. 产物在results/<experiment>/下,每个想法一个以时间戳加想法名命名的文件夹,成功时其中包含实验代码副本run_i.pyreview.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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 20:40:07

从心所欲不逾矩:儒家工夫现象学中的自感澄明

第一次认真琢磨“从心所欲不逾矩”&#xff0c;是在一次跨学科的读书会上。做现象学的一位朋友忽然问我&#xff1a;孔子的这个“所欲”&#xff0c;在胡塞尔那里算不算一种意向性&#xff1f;我当时没有马上答上来&#xff0c;因为这个问题看似简单&#xff0c;实际上把两个传…

作者头像 李华
网站建设 2026/9/15 20:39:51

Arduino边缘智能系统:DHT22+SG90+Edge Impulse实现环境自适应密封

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/15 20:39:16

Qt Creator配置自动部署windeployqt:告别DLL缺失,一键搞定Qt程序发布

很多刚接触Qt开发的朋友&#xff0c;第一次把编译好的exe拷贝到别的电脑上运行&#xff0c;双击后系统提示“缺少Qt5Core.dll”、“找不到Qt5Widgets.dll”&#xff0c;那一瞬间整个人是懵的。明明在自己的开发机上跑得好好的&#xff0c;为什么换个环境就罢工&#xff1f;这就…

作者头像 李华
网站建设 2026/9/15 20:38:30

uni-app购物小程序从0到1完整开发实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/15 20:37:06

Python模块开发实战:从基础到高级技巧

1. Python模块开发的核心价值在Python生态中&#xff0c;模块化开发是构建可维护、可复用代码的基础单元。一个设计良好的Python模块能像乐高积木一样&#xff0c;在不同项目中灵活组合使用。我见过太多开发者把全部代码堆在单个.py文件里&#xff0c;随着功能增加最终变成难以…

作者头像 李华
网站建设 2026/9/15 20:36:29

SpringBoot+Vue前后端分离评奖评优管理系统开发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华