Die parallele Verarbeitung der Python-Joblib funktioniert in der uWSGI-Umgebung nicht. Wie verarbeite ich parallel auf uWSGI?

Einführung

Wenn Sie maschinelles Lernen oder Deep Running mit Python durchführen, wird die Verarbeitung sehr umfangreich und es kann zu Leistungsproblemen kommen.

Vor kurzem habe ich auch eine starke Verarbeitung und habe beschlossen, eine parallele Verarbeitung hinzuzufügen, um die Leistung zu verbessern. Eine Leistungsverbesserung wurde bei Verwendung einer Bibliothek für die parallele Verarbeitung namens "joblib" lokal festgestellt.

In dem Fehler, der den gleichen Prozess in der Entwicklungsumgebung ausgeführt hat. .. .. Anscheinend funktioniert joblib in der uWSGI-Umgebung nicht. Ich habe die Maßnahmen dazu zusammengefasst.

Was ist uWSGI?

――UWSGI ist ein Anwendungsserver zum Ausführen von Webdiensten in Python.

Umweltinformationen

Joblib-Code, der unter uWSGI fehlschlägt

--Verarbeitung, die Sie parallelisieren möchten

length = 1000
def sum(i, j):
  return i + j
from joblib import Parallel, delayed

sum_list = Parallel(n_jobs=-1)( [delayed(calc_sum)(i, j) for j in range(length) for i in range(length)])

-Jedoch, wenn ich es auf uWSGI ausführe, erhalte ich einen Fehler wie diesen

exception calling callback for <Future at 0x7fbc520c7eb8 state=finished raised TerminatedWorkerError>
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/joblib/externals/loky/_base.py", line 625, in _invoke_callbacks
    callback(self)
  File "/usr/local/lib/python3.7/site-packages/joblib/parallel.py", line 309, in __call__
    self.parallel.dispatch_next()
  File "/usr/local/lib/python3.7/site-packages/joblib/parallel.py", line 731, in dispatch_next
    if not self.dispatch_one_batch(self._original_iterator):
  File "/usr/local/lib/python3.7/site-packages/joblib/parallel.py", line 759, in dispatch_one_batch
    self._dispatch(tasks)
  File "/usr/local/lib/python3.7/site-packages/joblib/parallel.py", line 716, in _dispatch
    job = self._backend.apply_async(batch, callback=cb)
  File "/usr/local/lib/python3.7/site-packages/joblib/_parallel_backends.py", line 510, in apply_async
    future = self._workers.submit(SafeFunction(func))
  File "/usr/local/lib/python3.7/site-packages/joblib/externals/loky/reusable_executor.py", line 151, in submit
    fn, *args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/joblib/externals/loky/process_executor.py", line 1022, in submit
    raise self._flags.broken
joblib.externals.loky.process_executor.TerminatedWorkerError: A worker process managed by the executor was unexpectedly terminated. This could be caused by a segmentation fault while calling the function or by an excessive memory usage causing the Operating System to kill the worker. The exit codes of the workers are {EXIT(1), EXIT(1), EXIT(1), EXIT(1)}

Problemumgehung 1: Threads funktionieren

from joblib import Parallel, delayed

sum_list = Parallel(n_jobs=-1, prefer='threads')( [delayed(calc_sum)(i, j) for j in range(length) for i in range(length)])

―― Natürlich kann es je nach Verarbeitung langsam sein, wenn Sie Threads verwenden.

Zielmethode 2: Multiprocessing

import multiprocessing
from multiprocessing import Process

with multiprocessing.Pool() as pool:
    process = [pool.apply_async(calc_sum, (i, j)) for j in range(length) for i in range(length)]
    sum_list = [f.get() for f in process]

Problemumgehung 3: Verwenden Sie Guicorn anstelle von uWSGI

Diesmal habe ich das nicht gemacht. Der Grund dafür ist, dass das Ändern des AP-Servers riskant ist, da er bereits unter uWSGI ausgeführt wurde.

Schließlich

Geschwindigkeitsvergleich

Normal joblib(multiprocess) joblib(threads) multiprocessing
32.9 µs 11 µs 40.1 µs 4.05 µs

joblib ist besser lesbar und einfacher zu schreiben, aber Multiprocessing ist eine Funktion, die in Python selbst integriert ist und daher häufig eine Outperformance aufweist. Es ist auch unwahrscheinlich, dass Sie einen Fehler wie diesen machen.

Recommended Posts

Die parallele Verarbeitung der Python-Joblib funktioniert in der uWSGI-Umgebung nicht. Wie verarbeite ich parallel auf uWSGI?
So entwickeln Sie in einer virtuellen Python-Umgebung [Memo]
So arbeiten Sie mit BigQuery in Python
Virtualenv funktioniert nicht unter Python 3.5 (Windows)
So verfolgen Sie die Arbeit mit Powershell
So führen Sie eine Mehrkern-Parallelverarbeitung mit Python durch
Zusammenfassung zum Importieren von Dateien in Python 3
Zusammenfassung der Verwendung von MNIST mit Python
Jinja2 2.9.6 funktioniert nicht mit der Lambda Python 3-Serie
Ich habe es geschafft, die Situation zu lösen, in der Python auf dem Mac nicht funktioniert
Verwendung mehrerer Argumente bei der Parallelverarbeitung mithilfe der Mehrfachverarbeitung in Python
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
So erstellen Sie eine Umgebung für die Verwendung mehrerer Python-Versionen auf einem Mac
Patch, wenn die Volltextsuche in der lokalen GAE / Python-Umgebung nicht funktioniert
So ermitteln Sie die Anzahl der Stellen in Python
So messen Sie die Verarbeitungszeit mit Python oder Java
So erstellen Sie eine Django (Python) -Umgebung auf Docker
[Arbeitseffizienz] So ändern Sie Dateinamen im Stapel mit Python
So erstellen Sie eine Python-Umgebung unter Amazon Linux 2
Erzwinge luigi, eine parallele Verarbeitung in der Windows-Umgebung durchzuführen
Was tun, wenn python3 venv auf Raspberry Pi nicht gut funktioniert?
[Linux] So installieren Sie ein Paket auf einem Server ohne Internetumgebung (eigenständig)
So erstellen Sie eine neue virtuelle Python-Umgebung unter Ubuntu
Python3-Verarbeitung, die in Paiza verwendbar zu sein scheint
Verwendung von VS-Code in einer venv-Umgebung mit Windows
[Einführung in die Udemy Python3 + -Anwendung] 36. Verwendung von In und Not
Hinweise zum Laden einer virtuellen Umgebung mit PyCharm
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Wie man in Python entwickelt
So verarbeiten Sie Kamerabilder mit Teams und Zoom Verarbeitungsvolumen im Animationsstil
Übersicht über die virtuelle Python-Umgebung und deren Erstellung
Wie man Japanern nicht entgeht, wenn man mit json in Python umgeht
So bestimmen Sie die Existenz eines Selenelements in Python
So installieren Sie OpenCV in Cloud9 und führen es in Python aus
So erstellen Sie eine Python-Umgebung aus Pyenv in einer Mac-Umgebung (El Capitan)
Effektives Python-Memo Element 11 Verwenden Sie zip, um Iteratoren parallel zu verarbeiten
Wie Sie die interne Struktur eines Objekts in Python kennen
So überprüfen Sie die Speichergröße einer Variablen in Python
So verwenden Sie Python in Pyenv unter MacOS mit PyCall
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
So erstellen Sie eine Python-Umgebung mit Virtualenv unter Ubuntu 18.04 LTS
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
Die Pfeiltasten funktionieren in der zsh + python-Shell auf dem Mac nicht
[Python] Wie man PCA mit Python macht
[Python] Einfache Parallelverarbeitung mit Joblib
Python-Parallelverarbeitung (Multiprocessing und Joblib)
So sammeln Sie Bilder in Python
Verwendung von SQLite in Python
LocateCenterOnScreen funktioniert nicht mit PyAutoGui
Wie man MySQL mit Python benutzt
So verpacken Sie C in Python
Erstellen einer Umgebung für Python3.8 auf einem Mac
Verwendung von ChemSpider in Python
Verwendung von PubChem mit Python
Umgang mit Japanisch mit Python
So beheben Sie den Fehler "Kein Kernel der Grammatik Python gefunden" in Atom
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk