使用spawn起进程报错解决方案

举报
ZOMI 发表于 2025/03/18 16:11:32 2025/03/18
【摘要】 当前将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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。