下载
中文
注册

“Segmentation fault”错误

问题现象描述

运行转换后代码无报错,仅提示“Segmentation fault”信息。

原因分析

可能原因一:

代码中引用了tensorboard或第三方库中包含tensorboard,以下为已知的引用tensorboard的第三方库。

  • wandb:若该库仅用来打log,可以删除该库的调用。
  • transformers:该库深度绑定tensorflow、tensorboard。

可能原因二:

训练脚本中包含两个0维Tensor在不同设备上进行比较的代码,当前该比较不支持在torch_npu上运行。

解决措施

原因一解决措施:

注释掉相关的Summary、Writer调用即可规避该错误。Summary、Writer多用于记录日志和绘图,不影响网络跑通和精度收敛。

原因二解决措施:

在脚本启动命令前添加python -X faulthandler打印线程信息,定位到具体的报错位置,进行pdb调试。来定位脚本中是否存在两个0维Tensor在不同设备上进行比较的代码,需要用户手动修改为在同一设备上进行比较,示例如下:

修改前,在CPU和NPU上进行比较:

a = torch.tensor(123)
b = torch.tensor(456).npu()
print(a == b)

修改后,添加加粗字体信息,修改为同在NPU上进行比较:

a = torch.tensor(123).npu()
b = torch.tensor(456).npu()
print(a == b)