[PYTHON] La vraie cause du client Jubatus crachant un timeout et abandonnant une erreur

Bonjour à tous

Je voulais faire du machine learning, alors j'ai essayé le jubatus abordable. Quand j'ai essayé le tutoriel, c'était relativement facile à faire, mais j'ai trouvé que j'en étais accro, donc je vais partager la cause et les contre-mesures.

jubatus

http://jubat.us/ja/index.html

Cela semble être un cadre de traitement distribué pour l'apprentissage automatique en ligne. Récemment, je me demandais si le nombre d'outils d'apprentissage automatique fabriqués au Japon avait augmenté, mais cela semble exister depuis un certain temps. Il existe de nombreux documents japonais, je vais donc essayer de les utiliser! C'est pourquoi je l'ai essayé.

Installation

L'installation vient de suivre le démarrage rapide. Aussi, comme d'habitude, j'ai décidé de me plonger dans l'environnement virtuel.

Tout d'abord, en tant qu'environnement virtuel, la boîte trusty64 d'ubuntu est officiellement fournie, je vais donc utiliser celle-ci.

vagrant init ubuntu/trusty64; vagrant up --provider virtualbox

Maintenant que vous disposez d'un environnement virtuel, vous pouvez immédiatement entrer et effectuer le travail d'installation. http://jubat.us/ja/quickstart.html

Utilisons python comme client de jubatus. Parce que c'est dans la plupart des Linux

$ sudo vim /etc/apt/sources.list.d/jubatus.listv #Ajouter un référentiel
$ cat /etc/apt/sources.list.d/jubatus.list
deb http://download.jubat.us/apt binary/

$ sudo apt-get update
$ sudo apt-get install jubatus #jubatus est installé

$ sudo apt-get install python-pip
$ sudo pip install jubatus #le client python jubatus est installé

$ source /opt/jubatus/profile #Parce que le fichier de paramètres est lu à chaque fois~/.bash_C'est une bonne idée de fouiller dans votre profil

Exécutez le tutoriel

Maintenant que l'installation est terminée sans aucun problème, passons au tutoriel. Au début, Ubuntu ne semble pas avoir de git, donc sur l'hôte

git clone https://github.com/jubatus/jubatus-tutorial-python.git
cd jubatus-tutorial-python

Le référentiel déposé sera le répertoire de travail tel quel, alors insérez les données de test ici.

$ wget http://qwone.com/~jason/20Newsgroups//20news-bydate.tar.gz
$ tar xvzf 20news-bydate.tar.gz

C'est assez lourd, alors soyez patient jusqu'à ce que le téléchargement soit terminé. Après le téléchargement, démarrez immédiatement jubatus.

jubaclassifier --configpath config.json

Il semble que le serveur jubatus ait démarré. Enfin, démarrons le client et jetons les données de test dans jubatus.

Une erreur. .. ..

python tutorial.py

Maintenant, le client démarre. .. ..

msgpackrpc.error.RPCError: Request timed out

Il crache une erreur de temporisation et s'arrête Je me demande s'il ne s'agit que d'un simple délai d'attente. .. ..

starting load from /tmp/10.0.2.15_9199_classifier_tutorial.jubatus
Killed

Le serveur est arrêté avec une erreur comme celle-ci. Un simple timeout ne devrait pas arrêter le serveur.

Donc, j'ai essayé de le vérifier un peu plus, mais il semble que le serveur s'est arrêté en premier, puis le client s'est arrêté. En premier lieu, il semble que cela se fasse du côté du système d'exploitation car il a été soudainement tué sans préavis. Dans ce cas, vous pouvez également consulter le syslog.

$ tail /var/log/syslog
Feb  8 12:29:49 vagrant-ubuntu-trusty-64 kernel: [56821.828429] [ 9500]  1000  9497   128839    93956     234        0             0 jubaclassifier
Feb  8 12:29:49 vagrant-ubuntu-trusty-64 kernel: [56821.828431] [ 9501]  1000  9501    12649     2238      29        0             0 python
Feb  8 12:29:49 vagrant-ubuntu-trusty-64 kernel: [56821.828432] Out of memory: Kill process 9500 (jubaclassifier) score 750 or sacrifice child
Feb  8 12:29:49 vagrant-ubuntu-trusty-64 kernel: [56821.829547] Killed process 9500 (jubaclassifier) total-vm:515356kB, anon-rss:375824kB, file-rss:0kB

Out of memory !! C'est celui qui a été foiré avec MySQL Je ne savais pas pourquoi le fichier de processus ne pouvait pas être trouvé, mais quand j'ai regardé le journal, je n'ai pas pu démarrer le moteur en raison d'un manque de mémoire. .. ..

Ensuite, il semble que vous devriez augmenter la mémoire Si c'est AWS, je vais faire un swap, mais cette fois c'est un vagabond donc je peux facilement l'augmenter

   config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
     vb.memory = "2048"
   end

Comme prévu, si vous avez 2 Go de mémoire, cela fonctionnera.

Et le résultat est

OK,sci.med, sci.med, 0.584435760975
NG,sci.electronics, soc.religion.christian, 0.37116548419
OK,talk.politics.guns, talk.politics.guns, 1.49401080608

▽
OK,rec.sport.hockey, rec.sport.hockey, 1.0699224472
===================
OK: 5398
NG: 2134

Cela a bien fonctionné.

Résumé

Si vous voulez tuer sans mémoire, vous pouvez écrire sans mémoire. .. .. Eh bien, je me demande s'il est correct de le publier dans syslog. .. ..

Pour le moment, si le serveur est en panne au lieu du client, vous devriez vérifier le syslog.

référence

Jubatus: Framework de traitement distribué pour l'apprentissage automatique en ligne L'erreur de temporisation de Jubatus n'est pas une erreur de temporisation mais un ajustement (Quelqu'un a eu le même problème il y a un jour ...)

Recommended Posts

La vraie cause du client Jubatus crachant un timeout et abandonnant une erreur
L'histoire d'une erreur dans PyOCR
Quelle est la cause de l'erreur suivante?
Prise en compte des forces et faiblesses de Python
Provoque un débordement de tampon et exécute une fonction arbitraire.
Une histoire d'essayer pyenv, virtualenv et virtualenvwrapper
J'ai vérifié les versions de Blender et Python
VisibleDeprecation Avertissement: l'utilisation d'un nombre non entier au lieu d'un entier entraînera une erreur dans le futur