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)行:
| Uncommented | Commented | Behaviour |
|---|---|---|
| (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
相关产品推荐
相关产品推荐

