Незаконная инструкция (сброс ядра) с помощью Tensorflow 1.5

#php #python #ubuntu #tensorflow

#php #python #ubuntu #tensorflow

Вопрос:

У меня есть скрипт на python для запуска модели tensorflow, и мне нужно запустить этот скрипт из файла PHP (по сложным причинам), используя функцию PHP shell_exec . Когда я запускаю файл python со следующим кодом:

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

Я получаю следующую ошибку: Illegal instruction (core dumped)

Я читал, что проблема обычно возникает, когда процессор не поддерживает инструкции, которые присутствуют в более новых версиях Tensorflow. Итак, я понизил рейтинг до Tensorflow 1.5.

Однако эта ошибка не возникает при запуске cd testModels/crosswalkPredict amp;amp; . activate keras amp;amp; python test_script.py непосредственно из терминала; она возникает только при запуске из shell_exec функции PHP.

Я зашел так далеко, что попробовал скрипт python только со следующими строками:

 import tensorflow
print('Hello!')
  

Он по-прежнему выдает ту же ошибку, поэтому я знаю, что проблема возникает, когда все, что я делаю, это импортирую tensorflow и запускаю скрипт с shell_exec .

В чем может быть проблема?

Комментарии:

1. можете ли вы запустить какую-либо другую команду оболочки? попробуйте ls -la , например

2. Я могу запускать другие команды оболочки без проблем. Я сталкивался с ошибками только при запуске скриптов, использующих tensorflow / keras.

3. Для примера, в свернутом скрипте с печатью (Привет), если я закомментирую строку «импортировать tensorflow», все работает отлично.

4. где находится ваша testModels папка? принадлежит ли она вашему php-проекту? попробуйте заменить эту часть полным путем к вашему файлу

5. Мой PHP-файл с именем crosswalkPredict.php находится в /home/user01/Desktop/transportation , а моя папка testModels расположена в том же каталоге ( /home/user01/Desktop/transportation ).

Ответ №1:

Известная проблема совместимости TensorFlow с поддержкой AVX на старых процессорах, ее можно исправить, если скомпилировать TensorFlow из исходных текстов:

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

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

Комментарии:

1. Если я пытаюсь запустить скрипт на python, который использует TensorFlow, и запускаю его непосредственно из командной строки, он выполняется отлично, в то время как если я запускаю его с помощью shell_exec() , я получаю ошибку. Если я не получаю ошибку при запуске из командной строки, возможно ли, что это проблема совместимости с процессором?

Ответ №2:

Я разобрался в проблеме. как я упоминал в паре комментариев, я использую виртуальную среду python. Когда я выполнял скрипт python из командной строки, использовался интерпретатор python из виртуальной среды python, и все было в порядке. Всякий раз, когда я запускал скрипт rom shell_exec , использовалась установка интерпретатора python по умолчанию, и именно здесь произошла ошибка.

Я не очень опытен в использовании виртуальных сред python, так что, вероятно, поэтому мне потребовалось так много времени, чтобы прийти к пониманию проблемы. К счастью, комментарий Мохаммеда Аюб Бенджеллуна о shell_exec с использованием установки python по умолчанию указал мне правильный путь, и я понял это оттуда.

Чтобы решить эту проблему, я просто вызвал интерпретатор python по пути интерпретатора внутри виртуальной среды python вместо того, чтобы пытаться активировать виртуальную среду и затем выполнять.

Например, я использовал:

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

Вместо:

 . activate keras amp;amp; python test_script.py