
RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the ‘spawn’ start method
快速结论:该报错通常在使用 notebook_launcher 启动多进程训练时,因主进程中已有 CUDA 被隐式初始化(即使 torch.cuda.is_initialized() 返回 False)而触发。优先排查是否将所有可能调用 CUDA 的代码(包括模型加载、tokenizer 等)完全移入 training function 内部,并确认 accelerate 版本是否 >=1.12。
问题场景
用户在 Jupyter Notebook、VS Code Interactive Shell、IPython 等交互式环境中使用 notebook_launcher 启动多进程训练。典型调用方式如下:
def main():
import torch
print(torch.cuda.is_initialized())
from accelerate import Accelerator
accelerator = Accelerator()
if __name__ == '__main__':
from accelerate import notebook_launcher
notebook_launcher(main, num_processes=2)
该代码在 main() 内部创建 Accelerator() 时抛出错误。用户还报告了在 H200 GPU、CUDA 13.1、torch 2.8.1 环境下出现此问题,但相同代码在 H100、CUDA 12.4.1、torch 2.7.1 下可正常工作。
报错原文
RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method
原因分析
可能原因:当调用 notebook_launcher 时,如果主进程中已经有任何 CUDA 上下文被隐式初始化(例如 cublas、cudnn 底层初始化,或第三方库如 pynvml 的调用),即使 torch.cuda.is_initialized() 返回 False,fork 出的子进程也会因 CUDA 运行时无法被重新初始化而报错。用户使用 pynvml 测试也显示 CUDA “未初始化”,这表明问题的根源不在于 torch 层面,而在于底层 CUDA 驱动状态。
另一点重要线索:该错误从 accelerate >= 1.12.0 开始出现,accelerate 1.11.0 可正常工作。可能与 accelerate 内部对子进程启动方式的修改有关。此外,torch 2.9.1+cu126 环境下也会触发此问题。
环境排查
- Python 版本(例如 3.12, 3.13)
- torch 版本与 CUDA 版本(例如 torch 2.7.1+cu124 vs 2.9.1+cu126)
- accelerate 版本(特别注意是否 >= 1.12.0)
- 操作系统与交互环境(WSL2 + Ubuntu + Conda + IPython/VS Code Interactive Shell)
- GPU 型号(H100 vs H200)
- 检查所有 import 语句和全局代码中是否有任何可能触发 CUDA 初始化的操作(如
torch.cuda.device_count()、模型加载、tokenizer 下载等)
解决步骤
- 优先尝试方案一:将所有可能调用 CUDA 的代码完全移入
training_function内部 —— 包括 import 语句、模型定义、tokenizer、Optimizer 以及Accelerator()创建。不要在主进程中执行任何与 CUDA 相关的操作。 - 尝试方案二:主动设置进程启动方式 —— 在调用
notebook_launcher之前添加:import multiprocessing as mp mp.set_start_method("spawn", force=True) - 尝试方案三:降级 accelerate 到 1.11.0 —— 如果可能,回退到已知可工作的版本组合(例如 accelerate==1.11.0, torch==2.7.1+cu124)。注意:1.11.0 可能不支持 FSDP 2.0。
- 尝试方案四:升级 accelerate 到修复版本 —— Issue 评论区确认 PR #4059 的修复有效。可安装 git 版本:
pip install git+https://github.com/huggingface/accelerate.git@fix-notebook(注意:评论中第一次尝试该修复无效,因为作者忘记推送提交,需确保使用的版本包含完整修复。)
验证方法
运行最小复现代码(见问题场景中的 main() 函数),确认不再抛出 RuntimeError,且训练/推理正常启动。如果使用修复版本,注意检查 accelerate.__version__ 确认版本号。



