Hi

I agree that it's a bad design, but I'm not clear if it can be fixed 
without changing to a different xmlrpc library

cheers - Barry

On 06/03/14 18:40, Kenneth Heafield wrote:
> Hi,
>
>       In my view, the threading design of the server is a bug.  How about a
> producer-consumer queue with multiple producers (a client connection)
> and consumers (decoding threads).  Each client connection owns a
> producer-consumer queue as a return channel so that decoder threads can
> return their result.  Or we could use boost futures.
>
> Kenneth
>
> On 03/06/14 10:30, Barry Haddow wrote:
>> Hi Marcos
>>
>> I think the problem is that the rules (or phrase pairs) are now cached
>> on a per thread basis. This is good for command-line Moses as it uses a
>> pool of threads, and having per-thread caches means that there is no
>> locking on the caches, as there used to be.
>>
>> mosesserver, afaik, creates a new thread for each connection, so it
>> can't take advantage of the cache. This is done in the xmlrpc-c library
>> so we don't have much control over it. If you dig around in the xmlrpc-c
>> documentation (or code!) you might find a way to control the threading
>> policy.
>>
>> I just spoke to Marcin about the problem, and we're not sure if loading
>> the compact phrase table into memory would help, as you still would need
>> the higher level cache (in PhraseDictionary). But you could try this anyway.
>>
>> cheers - Barry
>>
>> On 06/03/14 17:20, Marcos Fernandez wrote:
>>> Hi, I am having an issue with MosesServer.
>>>
>>> I am using compact phrase and reordering table, and KENLM.
>>>
>>> The problem is this (I'll explain with an example):
>>>
>>> - I have one file with 20 very short sentences. I split and tokenize
>>> them and send one XMLPRC request per sentence to MosesServer
>>> - If I create just one XMLRPC ServerProxy instance and I use it to send
>>> all the requests through it, all the sentences get translated in approx
>>> 2.5 sec. The problem is that the first sentence takes almost 2 seconds
>>> to get translated, while the other 19 are much faster
>>> - If I create one ServerProxy instance per request, the translation time
>>> rises to 30 sec (now every sentence takes almost 2 sec)
>>>
>>> I don't understand the reason of that delay for the first request. I
>>> have followed the source of this delay to the function:
>>>
>>> GetTargetPhraseCollectionLEGACY(const Phrase& src)
>>>
>>> in the file: ...TranslationModel/PhraseDictionary.cpp
>>>
>>> It seems that for the first request it's needed  to look for something
>>> in the phrase table, while for subsequent requests it can be retrieved
>>> (most of the times) from a cache.
>>>
>>> But, as the sentences in my file are not related one to another in any
>>> way, the information on this cache can not be sentence-dependent, so why
>>> wouldn't it be possible for the cache to be preloaded with the
>>> information needed?
>>>
>>> I think that perhaps I have something misconfigured, because I have seen
>>> other people using the approach of creating one ServerProxy object for
>>> each XMLRPC request (which would facilitate things a lot for me), so I
>>> don't think they are experiencing this overhead. Perhaps using the
>>> compact formats can have something to do with it?
>>>
>>> Any help would be much appreciated. I paste below my moses.ini, if that
>>> helps:
>>>
>>> Thanks :)
>>>
>>> ### MOSES CONFIG FILE ###
>>> ###################
>>>
>>> # input factors
>>> [input-factors]
>>> 0
>>>
>>> # mapping steps
>>> [mapping]
>>> 0 T 0
>>>
>>> # translation tables: table type (hierarchical(0), textual (0), binary
>>> (1)), source-factors, target-factors, number of scores, file
>>> # OLD FORMAT is still handled for back-compatibility
>>> # OLD FORMAT translation tables: source-factors, target-factors, number
>>> of scores, file
>>> # OLD FORMAT a binary table type (1) is assumed
>>> [ttable-file]
>>> 12 0 0 5 /opt/moses-compiling/modelos/es-en/phrase-model/phrase-table
>>>
>>> # no generation models, no generation-file section
>>>
>>> # language models: type(srilm/irstlm), factors, order, file
>>> [lmodel-file]
>>> 8 0 5
>>> /opt/moses-compiling/modelos/es-en/lm/13-19-03gen_intec_head8m_sb5LM.kenlm
>>>
>>>
>>> # limit on how many phrase translations e for each phrase f are loaded
>>> # 0 = all elements loaded
>>> [ttable-limit]
>>> 10
>>>
>>> # distortion (reordering) files
>>> [distortion-file]
>>> 0-0 wbe-msd-bidirectional-fe-allff 6
>>> /opt/moses-compiling/modelos/es-en/phrase-model/reordering-table
>>>
>>> # distortion (reordering) weight
>>> [weight-d]
>>> 0.097107
>>> 0.150373
>>> -0.0551767
>>> -0.0307787
>>> 0.114613
>>> 0.214587
>>> 0.0467398
>>>
>>> # language model weights
>>> [weight-l]
>>> 0.0442748
>>>
>>>
>>> # translation model weights
>>> [weight-t]
>>> 0.00370888
>>> 0.0425665
>>> 0.0719956
>>> 0.0202699
>>> 0.071147
>>>
>>> # no generation models, no weight-generation section
>>>
>>> # word penalty
>>> [weight-w]
>>> 0.0366626
>>>
>>> [distortion-limit]
>>> 6
>>>
>>> [v]
>>> 0
>>>
>>>
>>
> _______________________________________________
> Moses-support mailing list
> Moses-support@mit.edu
> http://mailman.mit.edu/mailman/listinfo/moses-support
>


-- 
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.

_______________________________________________
Moses-support mailing list
Moses-support@mit.edu
http://mailman.mit.edu/mailman/listinfo/moses-support

Reply via email to