为什么在 Mac 上加载 tensorflow 会导致“进程完成,退出代码为 132(被信号 4 中断:SIGILL)”?

新手上路,请多包涵

我使用的是配备 M1 处理器、macOS 版本 11.0.1、PyCharm 中的 Python 3.8、Tensorflow 版本 2.4.0rc4(也尝试过 2.3.0、2.3.1、2.4.0rc0)的 MacBook Pro。我正在尝试运行以下代码:

 import tensorflow

这会导致错误消息:

 Process finished with exit code 132 (interrupted by signal 4: SIGILL)

代码在我的 Windows 和 Linux 机器上运行良好。错误消息是什么意思,我该如何解决?

原文由 user505117 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
1 个回答

似乎当您安装了多个 python 解释器时会发生此问题,其中一些解释器适用于不同的架构师(x86_64 与 arm64)。您需要确保使用了正确的 python 解释器,如果您安装了 Apple 版本的 tensorflow,则可能需要 arm64 解释器。

如果你使用 rosetta(Apple 的 x86_64 模拟器),那么你需要使用 x86_64 python 解释器,如果你以某种方式加载 arm64 python 解释器,你将得到非法指令错误(这完全有道理)。

如果您使用任何安装新 python 解释器的脚本,那么您需要确保安装了适用于该体系结构的正确解释器(很可能是 arm64)。

总的来说,我认为这个问题的发生是因为 python 环境设置不是为可以运行多个指令集/体系结构的系统制作的, pip 确实检查了包的体系结构和主机系统,但似乎你可以运行 x86_64 解释器加载用于 arm64 的包,这会产生问题。

作为参考,人们可以检查 tensorflow_macos 中的一个 问题

原文由 Dr. Snoopy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进