使用spawn起进程报错解决方案
收藏回复举报
使用spawn起进程报错解决方案
新人帖
发表于2025-03-18 16:13:02
0 查看

当前将torch.npu.set_device放在__main__函数外,如果此时又使用spawn起进程,则会报以下错误:

原因分析

本质问题是multiprocessing中使用spawn起进程的限制,如以下脚本也会报同样的错误:

在 Python 中, multiprocessing如果使用了 spawn 启动方法来创建多进程, 16行的subprocess启动时会在新的 Python 解释器进程中重新执行代码,此时执行到了第九行的代码,就会校验失败,从而报错。

而torch_npu的初始化,cann中会有组件使用spawn起进程,因此会报错。

规避方式

330的pta包会将cann中起进程的代码lazy_init(甚至disable),即在torch.npu.set_device接口不会初始化底层的aoe初始化,仅当客户需要使用aclop时才会初始化。

export ACL_OP_INIT_MODE=1(lazy_init)

export ACL_OP_INIT_MODE=2(disable)

无法处理的情况就是在__main__外面存在有aclop的代码,cann就仍然会起进程,报错。

我要发帖子