Python verteilte Verarbeitung Spartan

Dieser Artikel richtet sich an Benutzer, die eine verteilte Verarbeitung mit Python wünschen.

Ich denke, viele Leute sagen, dass Python-Bilder langsam sind.

Bibliotheken wie Cython wurden veröffentlicht, um dieses Bild zu zerstreuen, aber dieses Mal werde ich die verteilte Verarbeitung als eine der Methoden zur Beschleunigung von Python einführen.

Apropos Vertreter der verteilten Verarbeitung.

・ Hadoop ・ Funken

ist.

Dieses Mal wollte ich Spark einfach auf Python anwenden ... In dem folgenden Artikel wurde angegeben, dass die Konvertierung der JVM- und Python-Datenstrukturen viele Male erfolgen und die Latenz zunehmen würde, sodass sie nicht zu schnell wäre.

http://codezine.jp/article/detail/8484

python spark.png

Wenn ich mir die Struktur in der obigen Abbildung anschaue, habe ich den Eindruck, dass es viele Teile gibt, die Daten mit Spark Worker weiterleiten, und die bei verteilter Verarbeitung zu einem Engpass werden können.

Spartan

https://github.com/spartan-array/spartan

Daher kann diesmal die Datenverarbeitung in Python mithilfe einer Matrixdatenstruktur namens NumPy beschleunigt werden. Daher wird eine Bibliothek verwendet, die von einem Projekt namens Spartan erstellt wurde, bei dem versucht wird, Numpy-Matrizen wie Spark's RDD zu verteilen. Ich habe mich entschieden, es zu benutzen.

Es funktionierte nicht gut, es sei denn, es war spython2-Serie aufgrund der Abhängigkeitsbibliothek. Unterstützung für die Python3-Serie ist erwünscht.

Wenn Sie eine Person vom Typ Python3 sind, können Sie entweder virtualenv oder pyenv verwenden. Verwenden Sie daher bitte eine Umgebung vom Typ 2.

Vorstellung der Bibliothek

Dann ist es ein Umgebungskonstruktionsverfahren. (Ich habe es nur auf dem Mac versucht)

Bereiten Sie request.txt wie unten gezeigt vor und installieren Sie es mit pip install -r request.txt.

numpy
chainer==1.1.2
ipython==4.0.0
notebook==4.0.4
jinja2==2.8
pyzmq==14.7.0
tornado==4.1
scipy
dsltools
cython
parakeet
scikit-learn
traits
psutil

Installation

git clone https://github.com/spartan-array/spartan.git
cd spartan
python setup.py develop

Die Installation ist oben abgeschlossen.

Für die Verwendung auf einem Mac waren jedoch weitere Einstellungen erforderlich.

spartan/worker.py

Sie müssen die obige Python-Datei ändern.

Im Standardzustand

psutil.TOTAL_PHYMEM
psutil.NUM_CPUS

2 sind nicht gesetzt und es tritt ein Fehler auf

    ret = psutil.virtual_memory()
    num_cpus = psutil.cpu_percent()
    psutil.TOTAL_PHYMEM = ret.total
    psutil.NUM_CPUS = num_cpus

Sie kann eingestellt werden, indem Sie das Obige vor der Zeile des folgenden Programms hinzufügen. Es wird festgelegt, wie viel virtueller Speicher und CPU verwendet werden. psutil ist ein Programm, das die Speicher- und CPU-Auslastung anpassen und verwalten kann. Wenn Sie also mehr wissen möchten, lesen Sie bitte unten.

https://github.com/giampaolo/psutil

Wenn für die Umgebungseinstellungen nur Einzeleinstellungen festgelegt sind, stellen Sie diese bitte auf der folgenden Site ein.

http://jesperrasmussen.com/2013/03/07/limiting-cpu-cores-on-the-fly-in-os-x/

    self.worker_status = core.WorkerStatus(psutil.TOTAL_PHYMEM, 
                                           psutil.NUM_CPUS,
                                           psutil.virtual_memory().percent,
                                           psutil.cpu_percent(),
                                           time.time(),
                                           [], [])

Lassen Sie es tatsächlich funktionieren.

Schreiben Sie das folgende lineare Regressionsprogramm mit dem Namen "lreg.py".

import spartan as sp
sp.initialize()

N_DIM = 10
N_EXAMPLES = 1000 * 1000
EPSILON = 1e-6

x = 100 * sp.ones((N_EXAMPLES, N_DIM)) + sp.rand(N_EXAMPLES, N_DIM)
y = sp.ones((N_EXAMPLES, 1))

# put weights on one server
w = sp.rand(N_DIM, 1)

for i in range(50):
    yp = sp.dot(x, w)
    diff = x * (yp - y)
    grad = sp.sum(diff, axis=0).reshape((N_DIM, 1))
    w = w - (grad / N_EXAMPLES * EPSILON)
    print grad.sum().glom()

Arbeiten Sie mit dem folgenden Befehl.

python lreg.py --log_level=WARN

Bei der Ausführung ist es voll und verbraucht CPU und Speicher, sodass es einfriert. Es ist schlecht, einen PC zu zwingen, etwas Spartanisches zu tun.

Dieses Mal bin ich noch nicht an dem Punkt angelangt, an dem es mit einem wichtigen Cluster funktioniert, daher plane ich, es in Zukunft zu versuchen.

Verwenden Sie es systematisch! !!

Klicken Sie hier für dieses Repository

https://github.com/SnowMasaya/Spartan-Study

Referenzmaterial

http://codezine.jp/article/detail/8484

https://github.com/spartan-array/spartan

https://www.cs.nyu.edu/web/Research/Theses/power_russell.pdf

Recommended Posts

Python verteilte Verarbeitung Spartan
Python-Bildverarbeitung
Python-Dateiverarbeitung
Dateiverarbeitung in Python
Python: Verarbeitung natürlicher Sprache
Kommunikationsverarbeitung durch Python
Multithread-Verarbeitung in Python
Erste Python-Bildverarbeitung
Textverarbeitung mit Python
Verarbeitung in Python beenden
Bildverarbeitung mit Python
Abbildung zur Verarbeitung von Python-Zeichenfolgen
Verschiedene Verarbeitung von Python
Einführung in die verteilte Parallelverarbeitung von Python durch Ray
Bildverarbeitung mit Python (Teil 2)
100 Sprachverarbeitungsklopfen mit Python 2015
UTF8-Textverarbeitung mit Python
python3 Messen Sie die Verarbeitungsgeschwindigkeit.
"Apple-Verarbeitung" mit OpenCV3 + Python3
Akustische Signalverarbeitung mit Python (2)
Asynchrone Verarbeitung (Threading) in Python
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
Bildverarbeitung mit Python (Teil 1)
Bildverarbeitung mit Python (3)
Bildverarbeitung mit Python (Pillow)
Nachbearbeitung von Python (NG)
Bildverarbeitungssammlung in Python
Verwenden des Python-Modus in der Verarbeitung
[Python] Iterative Verarbeitung (für, während)
[Python] Bildverarbeitung mit Scicit-Image
Befehlszeilenargumentverarbeitung (Python docopt)
[Python] Zufällige Verarbeitung (erstellen, auswählen, sortieren)
Überlassen Sie die mühsame Verarbeitung Python
Signalverarbeitung in Python (1): Fourier-Transformation
[Python] Einfache Parallelverarbeitung mit Joblib
Python-Parallelverarbeitung (Multiprocessing und Joblib)
Python
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock Kapitel 1 in Python
Paiza Python Primer 3: Loop-Verarbeitung lernen
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
Python> Verarbeitung beenden> sys / sys.exit () importieren
Persönliche Notizen für die Python-Bildverarbeitung
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Dumm (verteilte Parallelverarbeitung) durch IPython-Cluster
Beispielcode-Zusammenfassung für die parallele / parallele Python-Verarbeitung
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (05 ~ 09)
Python String Processing Map und Lambda
100 Bildverarbeitung mit Python Knock # 2 Graustufen
100 Sprachverarbeitung Knock Kapitel 1 von Python
Python> Verarbeitungszeitmessung> time.time () --start_time
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (00 ~ 04)
Bildverarbeitung mit Python 100 Knock # 10 Medianfilter
Periodische Ausführungsverarbeitung bei Verwendung von tkinter [Python3]
Socket-Kommunikation und Multithread-Verarbeitung durch Python
[Python] Beschleunigung der Verarbeitung mit Cache-Tools
Bildverarbeitung durch Python 100 Knock # 1 Kanalersatz
[Python] Matrix-Multiplikationsverarbeitungszeit mit NumPy