RuntimeError: ‘accelerate-launch /venv/L_E_T/lib/python3.8/site-packages/accelerate/test_utils/scripts/test_script.py’ failed with returncode 1

这个报错通常出现在执行 accelerate test (或 accelerate-launch 跑多进程脚本)时,某个非主进程先通过了 main_process_first 的检查,导致断言失败。优先排查系统 Linux 内核版本是否过低,Issue 中明确指向这是 PyTorch 与低版本内核交

快速结论:这个报错通常出现在执行 accelerate test(或 accelerate-launch 跑多进程脚本)时,某个非主进程先通过了 main_process_first 的检查,导致断言失败。优先排查系统 Linux 内核版本是否过低,Issue 中明确指向这是 PyTorch 与低版本内核交互的已知限制。

适用环境:Ubuntu 22.04.2 LTS;Python 3.8;分布式后端 nccl;分布式环境 MEGATRON_LM;混合精度 fp16;GPU 环境;问题内核版本 3.10.0(Issue 中另有人反馈 4.14.105)。

最快修复方案:将 Linux 内核升级到 5.5.0 或更高版本。Issue 中报告者把内核换成 5.15.0-60-generic 后 accelerate test 恢复正常。

注意事项:该结论来自低内核版本场景的验证,升级内核并非在所有环境下都能一步解决;如果服务器不允许升级内核,Issue 中仅提到“可能”可以尝试降级 PyTorch,但没有确认有效版本,也未提供已修正的 accelerate 版本。

问题场景

用户在运行 accelerate test 时触发问题。测试脚本会通过 accelerate-launch 启动多进程执行 test_script.py,在检查主进程顺序的 process_execution_check() 处断言失败,随即分布式任务以非零退出码结束。用户还提到该问题看起来与 accelerator.main_process_first() 相关。

报错原文

RuntimeError: 'accelerate-launch /venv/L_E_T/lib/python3.8/site-packages/accelerate/test_utils/scripts/test_script.py' failed with returncode 1

stderr: Detected kernel version 3.10.0, which is below the recommended minimum of 5.5.0; this can cause the process to hang. It is recommended to upgrade the kernel to the minimum version or higher.

stderr: Traceback (most recent call last):
stderr:   File "/venv/L_E_T/lib/python3.8/site-packages/accelerate/test_utils/scripts/test_script.py", line 626, in 
stderr:     main()
stderr:   File "/venv/L_E_T/lib/python3.8/site-packages/accelerate/test_utils/scripts/test_script.py", line 588, in main
stderr:     process_execution_check()
stderr:   File "/venv/L_E_T/lib/python3.8/site-packages/accelerate/test_utils/scripts/test_script.py", line 85, in process_execution_check
stderr:     assert text.startswith("Currently in the main process\n"), "Main process was not first"
stderr: AssertionError: Main process was not first

原因分析

Issue 讨论中给出的核心原因是系统 Linux 内核版本过低。日志已经明确提示检测到内核 3.10.0,低于建议的最低 5.5.0,可能导致进程挂起或顺序异常。维护者回复指出:当内核低于某个版本时,类似 main_process_first 的行为无法正常工作,这是 PyTorch 与操作系统交互的限制,而不是 accelerate 单独能绕过的逻辑。因此进程顺序检查中“主进程应该最先执行”的断言失败,最终表现为该 RuntimeError。进一步说,若你在日志里看到同样的低内核警告,并伴随进程挂起、进程顺序不对或 accelerate test 报 “main process was not first”,维护者建议的就是升级 Linux 内核。

环境排查

  • 确认系统内核版本:执行 uname -r,看是否低于 5.5.0(Issue 中出错为 3.10.0,也有人为 4.14.105)。
  • 确认操作系统版本(Issue 中为 Ubuntu 22.04.2 LTS)。
  • 确认 Python 版本(Issue 中为 3.8)。
  • 确认分布式环境与后端(Issue 中为 MEGATRON_LM + nccl)。
  • 确认 GPU 设备分配是否为 2 进程、设备 cuda:0 / cuda:1。
  • 确认是否使用 accelerate test / accelerate-launch 触发多进程脚本。
  • 确认日志中是否出现 “below the recommended minimum of 5.5.0” 这条 kernel 警告。

解决步骤

  1. 先运行 uname -r,确认当前内核版本。如果低于 5.5.0,继续下一步。
  2. 升级 Linux 内核到 5.5.0 或更高版本。Issue 中报告者换成 Ubuntu 22.04.2 LTS 的 5.15.0-60-generic 内核后问题消失。
  3. 升级内核后重启系统,确保新内核生效。
  4. 再次运行 accelerate test,观察是否还会出现 “Main process was not first”。
  5. 如果所在环境(如 SageMaker、受限服务器)无法升级内核:Issue 中维护者提出这本质上属于 PyTorch 的问题,可优先尝试降级 PyTorch,但没有给出确认可用的版本;也未确认存在某个不需要升级内核的 accelerate 旧版本。

验证方法

升级内核并重启后,重新执行 accelerate test。确认日志中不再出现 “Detected kernel version … below the recommended minimum of 5.5.0” 的警告,且 test_script.py 不再在 process_execution_check() 处抛出 AssertionError: Main process was not first,多进程任务能正常跑完并返回成功即可认为问题已解决。Issue 中报告者正是通过切换到 5.15.0-60-generic 内核后确认恢复正常的。

参考来源

huggingface/accelerate #2084

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 26303

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注