Я работаю на 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
Я проверил права доступа к входному аудиофайлу (777)
Стресс-тест Freeswitch при запуске train.py из TTY на другом
терминал (работает как положено, поэтому не проблема с памятью)
- Добавлены дополнительные задержки для предварительной обработки звука
- Протестировано с предварительно записанными клипами (Segfaults из подпроцесса, работает из CLI)
- Сокращено только до 1 выполнения (вместо нескольких файлов)
- Пытался порождать с os.system> вывод в файл (Вывод был странно пуст, хотя файл был создан?)
- Попробовал изменить close_fds на true
- Проверено printenv
Проверено 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
Я отчаянно нуждаюсь в ответах здесь, у меня заканчиваются вещи, чтобы попробовать.