Je pense que beaucoup de gens disent que les images python sont lentes.
Des bibliothèques telles que cython ont été publiées pour dissiper cette image, mais cette fois, je présenterai le traitement distribué comme l'une des méthodes pour accélérer python.
Parlant de représentant du traitement distribué.
・ Hadoop ・ Étincelle
est.
Cette fois, je voulais simplement appliquer Spark à python ... Dans l'article ci-dessous, il a été indiqué que la conversion des structures de données JVM et Python se produirait plusieurs fois et que la latence augmenterait, donc ce ne serait pas trop rapide.
http://codezine.jp/article/detail/8484
En regardant la structure de la figure ci-dessus, j'ai l'impression qu'il existe de nombreuses parties qui acheminent les données avec Spark Worker, et qui peuvent devenir un goulot d'étranglement si un traitement distribué est effectué.
Spartan
https://github.com/spartan-array/spartan
Par conséquent, cette fois, le traitement des données en Python peut être accéléré en utilisant une structure de données matricielle appelée NumPy, donc une bibliothèque créée par un projet appelé Spartan, qui est une tentative de distribuer des matrices Numpy comme le RDD de Spark, est utilisée. J'ai décidé de l'utiliser.
Cela ne fonctionnait pas bien sauf s'il s'agissait de la série spython2 en raison de la bibliothèque de dépendances. La prise en charge de la série python3 est souhaitée.
Si vous êtes une personne de type python3, vous pouvez utiliser virtualenv ou pyenv, veuillez donc utiliser un environnement de type 2.
Ensuite, c'est une procédure de construction d'environnement. (Je ne l'ai essayé que sur Mac)
Préparez required.txt
comme indiqué ci-dessous et installez-le avec pip install -r requirements.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
L'installation est terminée ci-dessus.
Cependant, des paramètres supplémentaires étaient nécessaires pour l'utiliser sur un Mac.
spartan/worker.py
Vous devez modifier le fichier python ci-dessus.
Dans l'état par défaut
psutil.TOTAL_PHYMEM
psutil.NUM_CPUS
2 ne sont pas définis et une erreur se produira, donc
ret = psutil.virtual_memory()
num_cpus = psutil.cpu_percent()
psutil.TOTAL_PHYMEM = ret.total
psutil.NUM_CPUS = num_cpus
Il peut être défini en ajoutant ce qui précède avant la ligne du programme ci-dessous. Ce qui est défini est la quantité de mémoire virtuelle et de CPU utilisées. psutil est un programme qui peut ajuster et gérer l'utilisation de la mémoire et du processeur, donc si vous voulez en savoir plus, veuillez voir ci-dessous.
https://github.com/giampaolo/psutil
De plus, si les paramètres d'environnement sont définis pour n'utiliser qu'un seul, veuillez les définir à partir du site suivant.
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(),
[], [])
Faisons en sorte que cela fonctionne.
Écrivez le programme de régression linéaire suivant avec le nom «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()
Utilisez la commande suivante.
python lreg.py --log_level=WARN
Lorsqu'il est exécuté, il est plein et consomme du processeur et de la mémoire, il se fige donc. C'est mal de forcer un PC à faire quelque chose de spartiate.
Cette fois, je ne suis pas arrivé au point où cela fonctionne avec un cluster essentiel, donc je prévois de l'essayer à l'avenir.
Utilisez-le systématiquement! !!
Cliquez ici pour ce référentiel
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