Python3 TensorFlow + Librosa Script - ошибки при порождении из подпроцесса (Python 2.7) - PullRequest
0 голосов
/ 05 июня 2019

Я работаю на Python 2.7 поверх Freeswitch, но мне требуется код Python3 для классификации аудио (машинное обучение с использованием Tensorflow и Librosa для извлечения функций).

Когда я запускаю свой скрипт Python3 из командной строки (от имени пользователя root), он работает как положено.

Когда скрипт вызывается из подпроцесса (выполняется из Python 2.7), он вызывает ошибки. Пользователь, от которого выполняется Python, будет отличаться от командной строки, поэтому я выполняю команду следующим образом, чтобы гарантировать выполнение от того же пользователя (с полными разрешениями sudo):

cmd = 'echo $PASSWORD| sudo -u root -S python3  -Xfaulthandler /usr/share/freeswitch/class/train.py '+str(uuid2)
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
    output = p.stdout.read()

Выход:

NG:tensorflow:From /usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
WARNING:tensorflow:From /usr/local/lib/python3.5/dist-packages/keras/backend/tensorflow_backend.py:3445: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.
Instructions for updating:
Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.
2019-06-05 05:41:43.715213: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-06-05 05:41:43.720328: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 1999995000 Hz
2019-06-05 05:41:43.720756: I tensorflow/compiler/xla/service/service.cc:150] XLA service 0x559fd3827ad0 executing computations on platform Host. Devices:
2019-06-05 05:41:43.720778: I tensorflow/compiler/xla/service/service.cc:158]   StreamExecutor device (0): <undefined>, <undefined>
WARNING:tensorflow:From /usr/local/lib/python3.5/dist-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.cast instead.
Fatal Python error: Segmentation fault

Current thread 0x00007fae74f76700 (most recent call first):
  File "/usr/local/lib/python3.5/dist-packages/librosa/feature/spectral.py", line 1536 in melspectrogram
  File "/usr/local/lib/python3.5/dist-packages/librosa/feature/spectral.py", line 1442 in mfcc
  File "/usr/local/lib/python3.5/dist-packages/pyaudioclassification/feat_extract.py", line 20 in extract_feature
  File "/usr/local/lib/python3.5/dist-packages/pyaudioclassification/feat_extract.py", line 56 in get_ext_features
  File "/usr/local/lib/python3.5/dist-packages/pyaudioclassification/feat_extract.py", line 68 in parse_audio_file
  File "/usr/local/lib/python3.5/dist-packages/pyaudioclassification/__init__.py", line 61 in predict
  File "/usr/share/freeswitch/class/train.py", line 36 in classify
  File "/usr/share/freeswitch/class/train.py", line 42 in <module>
Segmentation fault
  1. Я проверил права доступа к входному аудиофайлу (777)

  2. Стресс-тест Freeswitch при запуске train.py из TTY на другом терминал (работает как положено, поэтому не проблема с памятью)

  3. Добавлены дополнительные задержки для предварительной обработки звука
  4. Протестировано с предварительно записанными клипами (Segfaults из подпроцесса, работает из CLI)
  5. Сокращено только до 1 выполнения (вместо нескольких файлов)
  6. Пытался порождать с os.system> вывод в файл (Вывод был странно пуст, хотя файл был создан?)
  7. Попробовал изменить close_fds на true
  8. Проверено printenv
  9. Проверено ulimit -a (здесь есть некоторые отличия от CLI / от подпроцесса :

    Подпроцесс ulimit -a:

    неограничен файл (блоки) неограничен данные (кбайт) не ограничены стек (кбайт) 240 coredump (блоки) неограниченно память (кбайт) не ограничена заблокированная память (кбайт) 64 процесс неограничен № 999999 время памяти (кбайт) неограниченно замки без ограничений rtprio без ограничений '

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

    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    scheduling priority             (-e) 0
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 64117
    max locked memory       (kbytes, -l) 64
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    real-time priority              (-r) 0
    stack size              (kbytes, -s) 8192
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 64117
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited
    

Я отчаянно нуждаюсь в ответах здесь, у меня заканчиваются вещи, чтобы попробовать.

...