TweetsのProlog化を高速で処理する

集めた1億1千万のツイートサンプルを全部、prologの宣言文にしたい。それが、日本語wikipediaの本文全文のprolog化よりも何倍も深刻なものだとわかった。wikipediaと同じアルゴリズムでやろうとすると、core_i9のlinuxを動かし続けても、50日くらいかかる。動かせば良いというのはそうなのだが、そうすると途中でミスやバグに気づいても、もうやり直すリスク異常に高くなる。

長いこと悩んだが、最適な解決方法がわかった。それは、一番、時間コストがかかっている構文解析のknpを高速化することだ。knpは、それまで使っていたCabochaと比べるととてつもなく時間をかけて解析する。それで、カテゴリなどの面白い結果を出してくるのだから仕方がないと思っていたのだが、もう、ここを高速化するしかないと思って調べると、

-dpnd-fast -no-ne

の二つのオプションをつけると高速化することがわかった。knpを供給していただいているサイトには、

-dpnd-fast: 精度を犠牲にした高速な係り受け解析,高速に固有表現認識を行いたい場合などに用いる
-no-ne: 固有表現認識を行わないオプション,-dpnd-fastと合わせて使うことで高速に係り受け解析を行える

と解説されている。そもそも固有表現認識が何かわかっていないのだが、カテゴリなどのこちらの必要としているものが犠牲にならないならば、問題ないと試みてみた。すると、立ち上がり時間も含めて、3倍早くなった。しかし、我々の場合、サーバーモードだから、立ち上がりのオーバーヘッドは考慮しなくて良い。それで、実際やってみた印象では、10倍から20倍早くなる!!

これでやってみると、というか、現在やらせているのだが、およそ二日で計算を終える勘定だ。

1スレッドで80万ツイートを処理すべく、ファイル単位で処理するため、短い処理しか必要がない場合もあり、180スレッドくらいを立ち上げる。

途中で、停電などのアクシデントがないことを願うばかりだ。cpuは、12コア24スレッドの並列処理を3.5Gのクロックスピードで実行する。実質、切り替えをやっているので、オーバーヘッドが発生するが、実行スレッドを小さくすると、CPUの稼働率が大きく下がってしまうので、かなり無理させている。CPU温度は、どのコアについても70度を超えることがないことがわかっているので、なんとかなるだろうと思っている。何しろ30数万円もの金をかけたコンピュータだ、それくらい、働いてもらわないと困る。

xwindowが落ちる: GL error: GL_OUT_OF_MEMORY in glTexSubImage

先に作ったCore-i9 9920X の128Gメモリマシンで、1億1000万ツイートの処理という作業をやっていたら、数十分から1時間ほどするとマシンがリセットされてしまうという厄介な現象ぶち当たった。

残されたsyslogは、添付のようなものだ。gdmのメモリエラーのようだ。確かに、100を超えるスレッドを平行に動かしていて、メモリの消費量がすごいのではあるのが、そんなことでリセットされたのではたまらない。腹立たしくはある。基本的にバグだと思う。ネットで探すと、海外のサイトに同じような現象の問題が出されている。どう解決したかのかまでフォローできなかった。

gnome以外のウィンドウマネージャに変えれば、解決するかもしれないと思ったが、探すのは面倒なので、ubuntuをCUIモードで立ち上げて、gdmを使わないでやってみることにしている。ただ、スレッドを一旦止めるというのが、プログラムからできるようにしていたのが、できなくなっているが、まあ、最後までやりきるということだろうと思う。

GUIとCUIの変換は、次のコマンドで実現する。
# ubuntsモードの変更
sudo systemctl set-default multi-user.target
sudo systemctl set-default graphical.target

ログの一部
/var/log/syslog

Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) glamor0: GL error: GL_OUT_OF_MEMORY in glTexSubImage
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (WW) glamor: Failed to allocate 148x12 FBO due to GL_OUT_OF_MEM
ORY.
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (WW) glamor: Expect reduced performance.
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE)
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) Backtrace:
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 0: /usr/lib/xorg/Xorg (OsLookupColor+0x139) [0x5636db9b9459]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 1: /lib/x86_64-linux-gnu/libpthread.so.0 (funlockfile+0x50) [0x7f613c5368df]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 2: /usr/lib/xorg/modules/libglamoregl.so (glamor_get_pixmap_texture+0x7d) [0x7f6138fd355d]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 3: /usr/lib/xorg/modules/libglamoregl.so (glamor_create_gc+0x78f4) [0x7f6138fe5644]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 4: /usr/lib/xorg/modules/libglamoregl.so (glamor_create_gc+0x7caf) [0x7f6138fe5d6f]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 5: /usr/lib/xorg/modules/libglamoregl.so (glamor_create_gc+0x8668) [0x7f6138fe6888]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 6: /usr/lib/xorg/modules/libglamoregl.so (glamor_create_gc+0xa26f) [0x7f6138fea07f]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 7: /usr/lib/xorg/Xorg (DamageRegionAppend+0x6c6) [0x5636db93c996]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 8: /usr/lib/xorg/modules/libglamoregl.so (glamor_create_gc+0x1110f) [0x7f6138ff845f]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 9: /usr/lib/xorg/Xorg (AddTraps+0x423d) [0x5636db9355ed]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 10: /usr/lib/xorg/Xorg (SendErrorToClient+0x368) [0x5636db85c498]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 11: /usr/lib/xorg/Xorg (InitFonts+0x3c8) [0x5636db860478]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 12: /lib/x86_64-linux-gnu/libc.so.6 (__libc_start_main+0xe7) [0x7f613c154b97]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) 13: /usr/lib/xorg/Xorg (_start+0x2a) [0x5636db84a13a]
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE)
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) Segmentation fault at address 0x0
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE)
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: Fatal server error:
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) Caught signal 11 (Segmentation fault). Server aborting
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: Please consult the The X.Org Foundation support
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: #011 at http://wiki.x.org
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: for help.
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) Please also check the log file at "/home/washida/.local/sh
are/xorg/Xorg.0.log" for additional information.
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE)
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (II) AIGLX: Suspending AIGLX clients for VT switch
Apr 14 08:26:18 corei-9 /usr/lib/gdm3/gdm-x-session[15336]: (EE) Server terminated with error (1). Closing log file.
Apr 14 08:26:18 corei-9 systemd[1]: Starting Process error reports when automatic reporting is enabled...
Apr 14 08:26:24 corei-9 gnome-terminal-[15774]: gnome-terminal-server: Fatal IO error 11 (リソースが一時的に利用できません)
on X server :0.
Apr 14 08:26:24 corei-9 update-notifier[15673]: update-notifier: Fatal IO error 11 (リソースが一時的に利用できません) on X server :0.