#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