When I run moses with sparse features in multi-threads ( parameter -threads
all), I got segmentation fault.
The three sparse features are:
*SourceWordDeletionFeature factor=0*
* TargetWordInsertionFeature factor=0*
* WordTranslationFeature input-factor=0 output-factor=0*
The exact command I used is:
*moses_chart -threads all -f moses.ini -i input -n-best-list nbest 100
distinct*
This error happens kind of randomly. But it only happens when sparse
features and multi-threads are used.
I've tried several times to use gdb to trace the error. Fortunately, I just
get the back-trace info, as listed:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffdae77700 (LWP 32390)]
0x00007ffff711f5e3 in std::basic_ostream<char, std::char_traits<char> >&
std::operator<< <char, std::char_traits<char>, std::allocator<char>
>(std::basic_ostream<char, std::char_traits<char> >&,
std::basic_string<char, std::char_traits<char>, std::allocator<char> >
const&) () from /usr/lib64/libstdc++.so.6
Missing separate debuginfos, use: zypper install
glibc-debuginfo-2.15-22.17.1.x86_64
libgcc47-debuginfo-4.7.1_20120723-1.1.1.x86_64
liblzma5-debuginfo-5.0.3-12.2.2.x86_64
libstdc++47-debuginfo-4.7.1_20120723-1.1.1.x86_64
zlib-debuginfo-1.2.7-2.1.2.x86_64
(gdb) backtrace
#0 0x00007ffff711f5e3 in std::basic_ostream<char, std::char_traits<char>
>& std::operator<< <char, std::char_traits<char>, std::allocator<char>
>(std::basic_ostream<char, std::char_traits<char> >&,
std::basic_string<char, std::char_traits<char>, std::allocator<char> >
const&) () from /usr/lib64/libstdc++.so.6
#1 0x0000000000584711 in Moses::operator<< (out=..., name=...) at
moses/FeatureVector.cpp:141
#2 0x0000000000440232 in
Moses::ScoreComponentCollection::GetVectorForProducer (this=0x7fffad0e9380,
sp=0xe2aab0) at moses/ScoreComponentCollection.cpp:293
#3 0x00000000004407da in
Moses::ScoreComponentCollection::OutputFeatureScores (this=0x7fffad0e9380,
out=..., ff=0xe2aab0, lastName="LM0") at
moses/ScoreComponentCollection.cpp:351
#4 0x000000000044055a in
Moses::ScoreComponentCollection::OutputAllFeatureScores
(this=0x7fffad0e9380, out=...) at moses/ScoreComponentCollection.cpp:319
#5 0x0000000000561ce4 in Moses::ChartManager::OutputNBestList
(this=0x7fffacbe0010, collector=0x9320d210, nBestList=std::vector of length
100, capacity 128 = {...}, translationId=569)
at moses/ChartManager.cpp:381
#6 0x00000000005619d6 in Moses::ChartManager::OutputNBest
(this=0x7fffacbe0010, collector=0x9320d210) at moses/ChartManager.cpp:335
#7 0x0000000000467cd6 in Moses::TranslationTask::Run (this=0x214d90b0) at
moses/TranslationTask.cpp:111
#8 0x0000000000530b69 in Moses::ThreadPool::Execute (this=0x7fffffffd710)
at moses/ThreadPool.cpp:61
#9 0x0000000000534ecd in boost::_mfi::mf0<void,
Moses::ThreadPool>::operator() (this=0xf263088, p=0x7fffffffd710) at
/home/lly/plateform/boost_1_55_0/include/boost/bind/mem_fn_template.hpp:49
#10 0x0000000000534e30 in
boost::_bi::list1<boost::_bi::value<Moses::ThreadPool*>
>::operator()<boost::_mfi::mf0<void, Moses::ThreadPool>, boost::_bi::list0>
(this=0xf263098, f=..., a=...)
at /home/lly/plateform/boost_1_55_0/include/boost/bind/bind.hpp:253
#11 0x0000000000534dd5 in boost::_bi::bind_t<void, boost::_mfi::mf0<void,
Moses::ThreadPool>, boost::_bi::list1<boost::_bi::value<Moses::ThreadPool*>
> >::operator() (this=0xf263088)
at
/home/lly/plateform/boost_1_55_0/include/boost/bind/bind_template.hpp:20
#12 0x0000000000534d9a in
boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void,
Moses::ThreadPool>, boost::_bi::list1<boost::_bi::value<Moses::ThreadPool*>
> > >::run (this=0xf262ed0)
at
/home/lly/plateform/boost_1_55_0/include/boost/thread/detail/thread.hpp:117
#13 0x00000000008b4752 in thread_proxy ()
#14 0x00007ffff6965e0e in start_thread () from /lib64/libpthread.so.0
#15 0x00007ffff669d2cd in clone () from /lib64/libc.so.6
Has anyone had the problem before ? Any ideas on solving this ?
Many Thanks ?
PS: In my experiment, I found the function " void
CompletedRuleCollection::Add(const TargetPhraseCollection &tpc, const
StackVec &stackVec, const std::vector<float> &stackScores, const
ChartParserCallback &outColl) " does not consider " m_ruleLimit " . So
after adding parameter " -rule-limit 0 ", the decoder can only collect one
translation option.
Cheers
Liangyou
--
Liangyou Li
CNGL
School of Computing
Dublin City University
_______________________________________________
Moses-support mailing list
[email protected]
http://mailman.mit.edu/mailman/listinfo/moses-support