使用Tensorflow 1.5进行非法指令(核心转储)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Tensorflow 1.5进行非法指令(核心转储)相关的知识,希望对你有一定的参考价值。

我有一个用于运行tensorflow模型的python脚本,我需要使用php shell_exec函数从PHP文件(出于复杂的原因)运行此脚本。当我使用以下代码运行python文件时:

$command = 'cd testModels/crosswalkPredict && . activate keras && python test_script.py';
$output = shell_exec($command);

我收到以下错误:Illegal instruction (core dumped)

我读到,当CPU不支持更新版本的Tensorflow中存在的指令时,通常会出现此问题。所以我降级为Tensorflow 1.5。

但是,当我直接从终端运行cd testModels/crosswalkPredict && . activate keras && python test_script.py时,不会发生此错误;它只发生在我从PHP shell_exec函数中运行它时。

我只使用以下几行来尝试python脚本:

import tensorflow
print('Hello!')

它仍然提供相同的错误,所以我知道当我所做的只是导入tensorflow并使用shell_exec运行脚本时会出现问题。

可能是什么问题呢?

答案

它是一个已知的TensorFlow兼容性问题,在旧CPU上支持AVX,如果从源代码编译TensorFlow,它可以修复:

https://github.com/tensorflow/tensorflow/issues/17411#issuecomment-386888244

https://github.com/tensorflow/tensorflow/issues/17411#issuecomment-420157421

另一答案

我解决了这个问题。正如我在几条评论中提到的,我正在使用python虚拟环境。当我从命令行执行python脚本时,python虚拟环境中的python解释器正在使用,一切都很好。每当我执行脚本rom shell_exec时,都会使用python解释器的默认安装,这就是发生错误的地方。

我在使用python虚拟环境方面不是很有经验,所以这可能是我花了这么长时间才能理解问题的原因。幸运的是,MohammedAyoubBENJELLOUN关于使用默认python安装的shell_exec的评论让我走上了正确的道路,我从那里想出来了。

为了解决这个问题,我只是在python虚拟环境内部的解释器路径上调用python解释器,而不是尝试激活虚拟环境然后执行。

例如,我用过:

/home/user01/anaconda3/envs/keras/bin/python test_script.py

代替:

. activate keras && python test_script.py

以上是关于使用Tensorflow 1.5进行非法指令(核心转储)的主要内容,如果未能解决你的问题,请参考以下文章

import tensorflow是出现非法指令(核心已转储)

在 macbook pro M1 上安装 Tensorflow 时出现“zsh:非法硬件指令 python”[重复]

在ubuntu17.10中import tensorflow as tf 的py文件执行时会出现‘非法指令’,然后脚本就不能执行下去?

Conda Init 非法指令(核心转储)

非法指令(核心转储) HElib

在 Jetson NX 上导入 dlib 得到非法指令(核心转储)