使用spawn起进程报错解决方案
【摘要】 当前将torch.npu.set_device放在__main__函数外,如果此时又使用spawn起进程,则会报以下错误:原因分析本质问题是multiprocessing中使用spawn起进程的限制,如以下脚本也会报同样的错误:在 Python 中, multiprocessing如果使用了 spawn 启动方法来创建多进程, 16行的subprocess启动时会在新的 Python 解释器...
当前将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就仍然会起进程,报错。

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)