如何多线程运行命令行版CoreNLP?解析30万文档CPU占用低问题
解决Stanford CoreNLP命令行版单核运行的问题
嗨,我之前处理大批量文档的时候也碰到过一模一样的问题!默认情况下,CoreNLP的命令行工具确实只会用单线程跑,完全浪费了多核CPU的性能,不过只要加个参数就能轻松搞定:
核心解决方案:添加-threads参数
你只需要在命令里加上-threads [线程数],指定要使用的线程数量,CoreNLP就会并行处理filelist.txt里的文档了。比如你的机器有8个CPU核心,就可以这么写:
java -mx20g -cp "$SCRIPT/*" edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse -ssplit.eolonly true -tokenize.whitespace true -filelist filelist.txt -outputDirectory $OUTDIR -threads 8
额外实用建议
- 线程数选择:建议设置为你机器的物理CPU核心数(可以用
lscpu或者sysctl hw.ncpu查看),不要超过核心数太多,不然反而会因为线程切换拖慢整体速度。 - 内存调整:多线程运行会消耗更多内存,如果你设置的线程数较多(比如16核),可能需要把
-mx20g调高到-mx32g甚至-mx64g,避免出现内存溢出(OOM)的问题。 - 参数修正:顺便提一句,你原来的命令里
-ssplit.eolonly tokenize.whitespace true可能有点小问题,应该是-ssplit.eolonly true -tokenize.whitespace true,不然-ssplit.eolonly的参数值会被错误识别,导致该选项无法生效。
这样调整之后,你应该就能看到CPU占用率拉满,处理30万份文档的速度会提升一大截!
内容的提问来源于stack exchange,提问作者Thomas ISHIGAKI
相关产品推荐
相关产品推荐

