Re: [gensim:2397] Re: Not able to run Distributed LDA
Ritesh <[email protected]> Mon, 6 Jan 2014 20:30:10 +0530
| Newsgroups | gmane.comp.ai.gensim,gmane.comp.python.pyro |
|---|---|
| Message-ID | <CAJKZ27YrJtjUR_dfJEaJqqYwaf1sjgtef=4xMnf7BOACy5tpeQ@mail.gmail.com> |
Hello Radim Thanks a lot for all the help! Almost everything seems to be sorted out now. See below for the updates! On 6 January 2014 18:14, Radim Řehůřek <me-yqFObnq8frArm/[email protected]> wrote: > Hello Ritesh (cross-posting to the Pyro list, where people may have more > qualified experience with these issues), > > I restarted the system, ran the server again but still the same message. >>> >>> I ran "python -c 'import Pyro4; print(Pyro4.config.SERIALIZERS_ACCEPTED)' >>> in the Console. It prints "set(['pickle'])"; so I guess it is set correctly >>> there. >>> >>> However when I run it in the Python Shell, it gives a different result >>> - set(['json', 'marshal', 'serpent']). >>> In WIndows, however, CMD and Python Shell both prints the same >>> "set(['pickle'])". >>> >>> So I guess that is the problem. Is there a way to fix that in Python >>> Shell? >>> >> > Which Python shell are you using, and how exactly do you launch it? > I am using the default Idle shell. I was launching it from the Application Launcher. However when I launch Idle from the Console, the variables are set in the shell also. Then I learnt that variables in ~/.bashrc is only set for the Bash Shell; if we need to use some variables in an X session then those need to be stored in ~/.xsessionrc (generally it is not created by default). I did that and now everything works beautifully! :) > > > > Ok I set the configuration values in Python Shell and then it works! But I >> have to do it every time I restart shell. Is there some persistent method >> of doing it in the shell? >> > > Well, we could set PYRO_SERIALIZERS_ACCEPTED and PYRO_SERIALIZER directly > from Python, instead of depending on ENV vars. But I was under the > impression it's the same thing. Irmen? > > > > Also I ran the distributed LDA on one Windows and one Linux system. There >> are two workers and the dispatcher on my Ubuntu. And there is one worker on >> Windows. Everything seems to go fine. The worker registers with the name >> server running on Ubuntu. The dispatcher registers the worker on Windows. >> But when I run it, the dispatcher assigns jobs only to the workers on >> Ubuntu and not on Windows. And the worker on Windows tells me that "No >> connection could be made because the target machine actively refused it". >> It looked like a Firewall issue. So I disabled Firewall on Windows and as >> far as I know the firewall on Ubuntu is set to 'allow' all connections. But >> still it does not work. What could be possible reason? >> > > Sounds like a firewall issue to me, but again, the Pyro folks will have > more experience with such "heterogeneous" communication, what could go > wrong and how to debug it. > There is some update on this front also. I ran the dispatcher on Ubuntu (and no worker) and 9 workers on 9 different computer (all the workers were Windows system ;)). It worked perfectly without any problem. I shall try different combinations and keep you updated on what worked and what not. > > Best, > Radim > > >> >> Regards, >> Ritesh >> >> On Monday, 6 January 2014 11:40:28 UTC+5:30, Ritesh Kumar wrote: >>> >>> Hi Radim, >>> >>> > > >> >>> >>> On Sunday, 5 January 2014 22:52:00 UTC+5:30, Radim Řehůřek wrote: >>>> >>>> I can't see how this could have anything to do with the OS (and >>>> certainly not CLASSPATH). It must be something obvious we're missing. >>>> >>>> One more idea: was the Pyro nameserver run with these env vars as well? >>>> This nameserver is a process that runs in the background. >>>> If not, terminate it and re-launch with PYRO_SERIALIZERS_ACCEPTED >>>> and PYRO_SERIALIZER set. >>>> >>>> Another idea: run `python -c 'import Pyro4; print(Pyro4.config.SERIALIZERS_ACCEPTED)'` >>>> to see whether pyro picks up the env values correctly. >>>> >>>> -rr >>>> >>>> >>>> On Sunday, January 5, 2014 1:59:45 PM UTC+1, Ritesh Kumar wrote: >>>>> >>>>> I checked in each shell. The variables are set correctly. What is >>>>> surprising is that the same version works well in Windows XP (I used the >>>>> Enthought installation there and then installed gensim and Pyro4 from the >>>>> tar.gz file - the same ones I used in Ubuntu). So it seems that the problem >>>>> is specific to Ubuntu (and probably not related to Pyro). It does not seem >>>>> to be very likely but could there be a possibility that other variables in >>>>> bashrc (specially CLASSPATH) is causing it to fail? Or maybe should I use >>>>> the Enthought distribution in Ubuntu also (I saw that they have one for >>>>> Linux also)? >>>>> >>>>> On Sunday, 5 January 2014 17:42:52 UTC+5:30, Radim Řehůřek wrote: >>>>>> >>>>>> Hmm, that looks fine to me. >>>>>> >>>>>> Can you explicitly check, in each worker/dispatcher shell, that they >>>>>> are indeed set? => `echo $PYRO_SERIALIZERS_ACCEPTED` and `echo >>>>>> $PYRO_SERIALIZER` >>>>>> >>>>>> Other than that, I'm out of ideas... may be some new change to Pyro >>>>>> again. >>>>>> >>>>>> Re. mixing OS's (windows + linux heterogeneous cluster): I never >>>>>> tried, but it should be possible, yes. Please let me know it went if you do >>>>>> try. >>>>>> >>>>>> Cheers, >>>>>> Radim >>>>>> >>>>>> >>>>>> On Sunday, January 5, 2014 12:55:44 PM UTC+1, Ritesh Kumar wrote: >>>>>>> >>>>>>> Hello Radim, >>>>>>> >>>>>>> I put it in bashrc. Here is what I put >>>>>>> >>>>>>> export PYRO_SERIALIZERS_ACCEPTED="pickle" >>>>>>> export PYRO_SERIALIZER="pickle" >>>>>>> >>>>>>> Regards, >>>>>>> >>>>>>> >>>>>>> On 5 January 2014 17:10, Radim Řehůřek <[email protected]>wrote: >>>>>>> >>>>>>>> Hello Ritesh, how exactly did you set the env vars? Did you do it >>>>>>>> in every shell? Or put it in your bashrc? >>>>>>>> >>>>>>>> -rr >>>>>>>> >>>>>>>> >>>>>>>> On Sunday, January 5, 2014 6:12:41 AM UTC+1, Ritesh Kumar wrote: >>>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I am trying to run the distributed LDA. I have set up Pyro4 >>>>>>>>> correctly(I guess). I have followed the tutorials verbatim. I have set the >>>>>>>>> two environment variables -PYRO_SERIALIZERS_ACCEPTED and PYRO_SERIALIZER. I >>>>>>>>> started the Pyro name server and ran two instances of worker script and one >>>>>>>>> instance >>>>>>>>> of dispatcher script on the same machine (I have a system with 4 >>>>>>>>> cores and 4 GB of memory). >>>>>>>>> >>>>>>>>> Here is my code >>>>>>>>> >>>>>>>>> >>>>>>>>> from gensim import corpora, models, utils >>>>>>>>> >>>>>>>>> import logging >>>>>>>>> >>>>>>>>> logging.basicConfig(format='%(asctime)s : %(levelname)s : >>>>>>>>> %(message)s', level=logging.INFO) >>>>>>>>> >>>>>>>>> file_read = "/home/ritesh/Documents/svmInput_trial" >>>>>>>>> file_save = "/home/ritesh/Documents/svmInput_trial_lda" >>>>>>>>> >>>>>>>>> corpus = corpora.SvmLightCorpus(file_read) >>>>>>>>> corpus1m = utils.RepeatCorpus(corpus, 1000000) >>>>>>>>> >>>>>>>>> model_lda = models.LdaModel(corpus1m, num_topics=50, distributed= >>>>>>>>> True) >>>>>>>>> >>>>>>>>> corpus_lda = model_lda[corpus] >>>>>>>>> corpora.SvmLightCorpus.serialize(file_save, corpus_lda) >>>>>>>>> >>>>>>>>> >>>>>>>>> Here is the log information in the Python Shell >>>>>>>>> >>>>>>>>> 2014-01-05 10:06:38,792 : INFO : loading corpus from /home/ritesh/ >>>>>>>>> Documents/data/svmInput_trial >>>>>>>>> 2014-01-05 10:06:38,818 : WARNING : no word id mapping provided;initializing >>>>>>>>> from corpus, assuming identity >>>>>>>>> 2014-01-05 10:06:43,481 : INFO : using symmetric alpha at >>>>>>>>> 0.333333333333 >>>>>>>>> 2014-01-05 10:06:43,488 : ERROR : failed to initialize >>>>>>>>> distributed LDA (message used serializer that is not accepted: 1) >>>>>>>>> Traceback (most recent call last): >>>>>>>>> File "/home/ritesh/Documents/trial.py", line 13, in <module> >>>>>>>>> model_lda = models.LdaModel(corpus1m, num_topics=50,distributed >>>>>>>>> =True) >>>>>>>>> File "/home/ritesh/Documents/gensim/gensim/models/ldamodel.py",line >>>>>>>>> 294, in __init__ >>>>>>>>> raise RuntimeError("failed to initialize distributed LDA (%s)" >>>>>>>>> % err) >>>>>>>>> RuntimeError: failed to initialize distributed LDA (message used >>>>>>>>> serializer that is not accepted: 1) >>>>>>>>> >>>>>>>>> >>>>>>>>> And this is the log in the Console where Pyro serve is running >>>>>>>>> >>>>>>>>> Broadcast server running on 0.0.0.0:9091 >>>>>>>>> NS running on 0.0.0.0:9090 (0.0.0.0) >>>>>>>>> URI = PYRO:[email protected]:9090 >>>>>>>>> Exception in thread Pyro-Worker-140380205365968 : >>>>>>>>> Traceback (most recent call last): >>>>>>>>> File "/usr/lib/python2.7/threading.py", line 551, in__bootstrap_inner >>>>>>>>> self.run() >>>>>>>>> File "/home/ritesh/.local/lib/python2.7/site-packages/Pyro4- >>>>>>>>> 4.22-py2.7.egg/Pyro4/tpjobqueue.py", line 62, in run >>>>>>>>> self.job() >>>>>>>>> File "/home/ritesh/.local/lib/python2.7/site-packages/Pyro4- >>>>>>>>> 4.22-py2.7.egg/Pyro4/socketserver/threadpoolserver.py", line 34, >>>>>>>>> in __call__ >>>>>>>>> self.daemon.handleRequest(self.csock) >>>>>>>>> File "/home/ritesh/.local/lib/python2.7/site-packages/Pyro4- >>>>>>>>> 4.22-py2.7.egg/Pyro4/core.py", line 710, in handleRequest >>>>>>>>> raise errors.ProtocolError("message used serializer that is >>>>>>>>> not accepted: %d" % msg.serializer_id) >>>>>>>>> ProtocolError: message used serializer that is not accepted: 1 >>>>>>>>> >>>>>>>>> >>>>>>>>> Exception in thread Pyro-Worker-140380205223632 : >>>>>>>>> Traceback (most recent call last): >>>>>>>>> File "/usr/lib/python2.7/threading.py", line 551, in__bootstrap_inner >>>>>>>>> self.run() >>>>>>>>> File "/home/ritesh/.local/lib/python2.7/site-packages/Pyro4- >>>>>>>>> 4.22-py2.7.egg/Pyro4/tpjobqueue.py", line 62, in run >>>>>>>>> self.job() >>>>>>>>> File "/home/ritesh/.local/lib/python2.7/site-packages/Pyro4- >>>>>>>>> 4.22-py2.7.egg/Pyro4/socketserver/threadpoolserver.py", line 34, >>>>>>>>> in __call__ >>>>>>>>> self.daemon.handleRequest(self.csock) >>>>>>>>> File "/home/ritesh/.local/lib/python2.7/site-packages/Pyro4- >>>>>>>>> 4.22-py2.7.egg/Pyro4/core.py", line 710, in handleRequest >>>>>>>>> raise errors.ProtocolError("message used serializer that is >>>>>>>>> not accepted: %d" % msg.serializer_id) >>>>>>>>> ProtocolError: message used serializer that is not accepted: 1 >>>>>>>>> >>>>>>>>> >>>>>>>>> The log of the worker scripts and dispatcher scripts are as below >>>>>>>>> >>>>>>>>> INFO : running /home/ritesh/Documents/gensim/gensim/models/ >>>>>>>>> lda_worker.py >>>>>>>>> 2014-01-05 09:40:38,690 : INFO : gensim.lda_worker.fac0d0 >>>>>>>>> registered with nameserver (URI 'PYRO:gensim.lda_worker.fac0d0 >>>>>>>>> @127.0.0.1:55349') >>>>>>>>> >>>>>>>>> >>>>>>>>> INFO : running /home/ritesh/Documents/gensim/gensim/models/ >>>>>>>>> lda_worker.py >>>>>>>>> 2014-01-05 09:40:52,546 : INFO : gensim.lda_worker.a88a4d >>>>>>>>> registered with nameserver (URI 'PYRO:gensim.lda_worker.a88a4d >>>>>>>>> @127.0.0.1:34068') >>>>>>>>> >>>>>>>>> >>>>>>>>> INFO : running /home/ritesh/Documents/gensim/gensim/models/ >>>>>>>>> lda_dispatcher.py >>>>>>>>> 2014-01-05 09:42:39,969 : INFO : gensim.lda_dispatcher registered >>>>>>>>> with nameserver (URI 'PYRO:[email protected]:40266') >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> It looks like a problem of Pyro (and its new methods of >>>>>>>>> serialization) to me. However I guess setting the two environment variables >>>>>>>>> was a workaround for this issue. >>>>>>>>> >>>>>>>>> I also tried using 4.18 version of Pyro but that does not work >>>>>>>>> either. The Python shell freezes and there is no response (I left it for >>>>>>>>> around 5 hours but it didnt come back to life!). >>>>>>>>> >>>>>>>>> I have also attached the corpus file that I am using with this >>>>>>>>> (had to add .txt extension to upload it here; I used the file without that >>>>>>>>> extension). >>>>>>>>> >>>>>>>>> Am I missing something here? Is there some problem in my >>>>>>>>> installations and setting things up? Or is it something else? >>>>>>>>> >>>>>>>>> And I was also wondering if it is possible to use systems with >>>>>>>>> different Operating Systems in one cluster (say, I use 2 computers with >>>>>>>>> Windows and 2 Ubuntu, each running the worker script and one of them the >>>>>>>>> dispatcher script)? >>>>>>>>> >>>>>>>>> -- >>>>>>>> You received this message because you are subscribed to a topic in >>>>>>>> the Google Groups "gensim" group. >>>>>>>> To unsubscribe from this topic, visit https://groups.google.com/d/ >>>>>>>> topic/gensim/gA9d3HaQA24/unsubscribe. >>>>>>>> To unsubscribe from this group and all its topics, send an email to >>>>>>>> gensim+un...-/JYPxA39Uh5TLH3MbocFF+G/[email protected] >>>>>>>> For more options, visit https://groups.google.com/groups/opt_out. >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Ritesh Kumar >>>>>>> Asst. Prof., Dept. of Linguistics, Dr. B.R. Ambedkar University, Agra >>>>>>> Doctoral Candidate, Centre for Linguistics, Jawaharlal Nehru >>>>>>> University, New Delhi >>>>>>> >>>>>> -- > You received this message because you are subscribed to a topic in the > Google Groups "gensim" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/gensim/gA9d3HaQA24/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > gensim+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected] > For more options, visit https://groups.google.com/groups/opt_out. > -- Ritesh Kumar Asst. Prof., Dept. of Linguistics, Dr. B.R. Ambedkar University, Agra Doctoral Candidate, Centre for Linguistics, Jawaharlal Nehru University, New Delhi -- You received this message because you are subscribed to the Google Groups "gensim" group. To unsubscribe from this group and stop receiving emails from it, send an email to gensim+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected] For more options, visit https://groups.google.com/groups/opt_out.