#python #sockets #import #path #pytorch
#python #сокеты #импорт #путь #pytorch
Вопрос:
Я использую AlphaPose из GitHub, и я хотел бы запустить скрипт script/demo_inference.py из другого скрипта, который я создал в AlphaPose root, вызывается run.py . В run.py Я импортировал demo_inference.py как ap, используя этот скрипт:
def import_module_by_path(path):
name = os.path.splitext(os.path.basename(path))[0] spec =
importlib.util.spec_from_file_location(name, path) mod =
importlib.util.module_from_spec(spec) spec.loader.exec_module(mod) return mod
и
ap = import_module_by_path('./scripts/demo_inference.py')
Затем в demo_inference.py Я заменил
if __name__ == "__main__":
с
def startAlphapose():
и в run.py Я написал
ap.StartAlphapose().
Теперь я получил эту ошибку:
Load SE Resnet...
Loading YOLO model..
Process Process-3:
Traceback (most recent call last):
File "/usr/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib/python3.6/multiprocessing/process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "/home/vislab/guerri/alphagastnet/insieme/alphapose/utils/detector.py", line 251, in image_postprocess
(orig_img, im_name, boxes, scores, ids, inps, cropped_boxes) = self.wait_and_get(self.det_queue)
File "/home/vislab/guerri/alphagastnet/insieme/alphapose/utils/detector.py", line 121, in wait_and_get
return queue.get()
File "/usr/lib/python3.6/multiprocessing/queues.py", line 113, in get
return _ForkingPickler.loads(res)
File "/home/vislab/guerri/alphagastnet/lib/python3.6/site-packages/torch/multiprocessing/reductions.py", line 284, in rebuild_storage_fd
fd = df.detach()
File "/usr/lib/python3.6/multiprocessing/resource_sharer.py", line 57, in detach
with _resource_sharer.get_connection(self._id) as conn:
File "/usr/lib/python3.6/multiprocessing/resource_sharer.py", line 87, in get_connection
c = Client(address, authkey=process.current_process().authkey)
File "/usr/lib/python3.6/multiprocessing/connection.py", line 487, in Client
c = SocketClient(address)
File "/usr/lib/python3.6/multiprocessing/connection.py", line 614, in SocketClient
s.connect(address)
FileNotFoundError: [Errno 2] No such file or directory
Что это значит?
Комментарии:
1. Что-то не удается, когда он пытается открыть сокет. Может быть много причин, вызывающих это: github.com/python/cpython/blob/3.6/Lib/multiprocessing /…
2. Нужно увидеть больше кода или большую трассировку стека
3. @AlexW я обновился с полной ошибкой
4. Весь этот стек состоит из файлов в библиотеке многопроцессорной обработки, за исключением
/home/vislab/guerri/alphagastnet/insieme/alphapose/utils/detector.py
того, что я бы проверил строки 121 и 251 в этом файле и посмотрел, видите ли вы какие-либо проблемы, или проверил библиотеку torch . Похоже, что дескриптор файла пытаются восстановить, но он его не находит, есть некоторые заметки , которые могут пролить свет, но мало что знают о том, что вы пытаетесь сделать
Ответ №1:
Мы столкнулись с такой же проблемой в нашем кластере.
При использовании многопроцессорной обработки в PyTorch (обычно для запуска нескольких рабочих элементов DataLoader) подпроцессы создают сокеты в /tmp
каталоге для связи друг с другом. Все эти сокеты сохраняются в именованных папках pymp-######
и выглядят как 0-байтовые файлы. Удаление этих файлов или папок, пока ваши скрипты PyTorch все еще работают, вызовет указанную выше ошибку.
В нашем случае проблема заключалась в скрипте обслуживания с ошибками, который удалял файлы из /tmp
папки, пока они все еще были нужны. Возможно, есть другие способы вызвать эту ошибку. Но вы должны начать с поиска этих сокетов и убедиться, что они случайно не удаляются.
Если это не решит проблему, посмотрите на свой /var/log/syslog
файл в точное время, когда произошла ошибка. Скорее всего, вы найдете причину этого там.