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
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.
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
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
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