J'ai un script python pour exécuter un modèle tensorflow, et j'ai besoin d'exécuter ce script à partir d'un fichier PHP (pour des raisons compliquées) en utilisant la fonction PHP shell_exec. Lorsque j'exécute le fichier python avec le code suivant:

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

J'obtiens l'erreur suivante: Illegal instruction (core dumped)

J'ai lu que le problème se produit généralement lorsque le processeur ne prend pas en charge les instructions présentes dans les versions plus récentes de Tensorflow. J'ai donc rétrogradé à Tensorflow 1.5.

Cependant, cette erreur ne se produit pas lorsque j'exécute cd testModels/crosswalkPredict && . activate keras && python test_script.py directement à partir du terminal; cela ne se produit que lorsque je l'exécute à partir de la fonction PHP shell_exec.

Je suis allé jusqu'à essayer le script python avec seulement les lignes suivantes:

import tensorflow
print('Hello!')

Il donne toujours la même erreur, donc je sais que le problème se produit lorsque tout ce que je fais est d'importer tensorflow et d'exécuter le script avec shell_exec.

Quel pourrait être le problème?

1
Andrew Fink 18 mars 2019 à 19:49

2 réponses

Meilleure réponse

J'ai compris le problème. comme je l'ai mentionné dans quelques commentaires, j'utilise un environnement virtuel python. Lorsque j'exécutais le script python à partir de la ligne de commande, l'interpréteur python à partir de l'environnement virtuel python était utilisé, et tout allait bien. Chaque fois que j'exécutais le script rom shell_exec, l'installation par défaut de l'interpréteur python était utilisée, et c'est là que l'erreur s'est produite.

Je ne suis pas très expérimenté dans l'utilisation d'environnements virtuels python, c'est probablement pourquoi il m'a fallu si longtemps pour comprendre le problème. Heureusement, le commentaire de MohammedAyoubBENJELLOUN à propos de shell_exec utilisant l'installation par défaut de python m'a mis sur la bonne voie, et je l'ai compris à partir de là.

Pour résoudre ce problème, j'ai simplement invoqué l'interpréteur python sur le chemin de l'interpréteur à l'intérieur de l'environnement virtuel python au lieu d'essayer d'activer l'environnement virtuel puis de l'exécuter.

Par exemple, j'ai utilisé:

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

Au lieu de:

. activate keras && python test_script.py
0
Andrew Fink 1 avril 2019 à 00:07

Il s'agit d'un problème de compatibilité TensorFlow connu avec la prise en charge AVX sur un processeur plus ancien, il peut être résolu si vous compilez TensorFlow à partir des sources:

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

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

0
Mohamed Ayoub BENJELLOUN 22 mars 2019 à 20:04