You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python multiprocessing.Process在多进程初始化大尺寸PyTorch CPU张量时挂起的原因咨询

Python multiprocessing.Process在多进程初始化大尺寸PyTorch CPU张量时挂起的原因咨询

我最近碰到了一个挺费解的问题:在使用multiprocessing.Process创建子进程时,程序会根据我注释/取消注释哪些初始化大张量的代码行,以及是否使用spawn启动方式,出现正常结束或者挂起两种完全不同的表现。

先说明几个关键前提:

  • 所有操作都是纯CPU内存操作,我这台电脑压根没装CUDA
  • 如果把PyTorch换成numpy,哪怕创建10倍大的数组,也不会出现这个问题
  • 环境版本:Ubuntu 22.04.1 LTS, Python 3.10.12, torch 2.1.2+cpu

不同代码注释组合的表现

下面是不同注释/取消注释代码行对应的程序行为,表格里的编号对应代码中标注的(1)-(5)行:

UncommentedCommentedBehaviour
(1), (4)(2), (3), (5)Hang
(2), (4)(1), (3), (5)OK
(1), (5)(2), (3), (4)OK
(1), (3), (4)(2), (5)OK

测试代码

import multiprocessing as mp
import torch

def train():
    print("start of train")
    x = torch.arange(100000)            # (1)
    x = torch.arange(10000)             # (2)
    print("end of train")

if __name__ == "__main__":
    mp.set_start_method('spawn')        # (3)
    x = torch.arange(100000)            # (4)
    x = torch.arange(10000)             # (5)
    p = mp.Process(target=train)
    p.start()
    p.join()

备注:内容来源于stack exchange,提问作者Jake Levi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 10:39:30