21
(独)情報通信研究機構 情報分析研究室 東京大学 情報理工学系研究科 言語処理学会第20回年次大会 (NLP2014) RaSC: 高速なストリーム通信をサポートする 言語処理プログラムの 高速化・高並列化ミドルウェア 田仲正弘 ,大竹 清敬 , 鳥澤 健太郎 , 田浦 健次朗 *1 *1 *1 *2 *2 *1

RaSC: 高速なストリーム通信をサポートする 言語処理プログラム … · 動機 • 分析には計算負荷の高い言語処理プログラムを組み合わせ!!!多数の計算機上での高速・高並列な処理が必要

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

(独)情報通信研究機構 情報分析研究室   東京大学 情報理工学系研究科  

言語処理学会第20回年次大会  (NLP2014)

RaSC:  高速なストリーム通信をサポートする  言語処理プログラムの  

高速化・高並列化ミドルウェア

田仲正弘 ,大竹 清敬      ,  鳥澤 健太郎      ,  田浦 健次朗  

*1

*1 *1 *2

*2

*1

背景 •  近年,大規模テキスト分析が注目  •  NICTでの取り組み:  大規模Web情報分析システムWISDOM  X,  対災害情

報分析システム

2

同義性認識 矛盾データ

構文解析

因果関係 データ Web

連携利用  

Q.  脱原発は  何をもたらす?

                         

A.  国家崩壊、  スタグフレーション

Q.  地球温暖化の影響は?

                         

A.  感染症、  食糧危機

質問応答 未来分析 意見・発信者分析

2000万文書/dayを解析  40億文書を収納見込み

森林破壊が進行すると?

                         

地球温暖化⇒海水温上昇⇒  大腸菌増加⇒食中毒増加

悪評の高い食品は?

                         

ダイエット用の◯◯◯

大規模アーカイブ  

大規模Web情報分析システムWISDOM  X

動機 •  分析には計算負荷の高い言語処理プログラムを組み合わせ  

à  多数の計算機上での高速・高並列な処理が必要

3

初期解析クラスタ   応用解析クラスタ  

分析アルゴリズム研究者  

各種言語処理  プログラム  

計2200並列,  2万プロセス以上

計40並列,40TBの  データを用いて分析  

Web

2000万文書/day  

情報分析 アプリケーション

計算ノード140台による分析  

ノード1台に置けない大規模データを利用  

WISDOM  Xにおける解析の分散実行

•  多くの言語処理プログラムは,蓄積されたデータを一括処理するバッチ型 à  定常的に流入するデータの処理は想定せず  

•  単純に並列実行を増やしても速度が向上しない

起動のオーバヘッド  文書ごとに巨大ファイルを逐一ロード  

する必要があり待ち時間が発生  

HTMLからの  文抽出  

係受解析

未来分析

分散処理の実装コスト  解析プログラムの特徴ごと  

に適した実装が必要  (常に流入)  Web文書

計2200並列  2基のクラスタ上で稼働

課題

事実型質問応答  (高並列)

4

データ通信に伴うCPUアイドル時間  前段の処理が終わるまで  

後段の処理で待ち時間発生  

5

HTMLからの  文抽出  

係り受け解析

因果関係  抽出

課題(1)    データ通信に伴うCPUアイドル時間  

ディスク上のファイルを  介して入出力  

クラ

イア

ント

サー

ブロッキング呼出 ノンブロッキング呼出

送信

受信

受信

実行

送信

受信

送信

実行

受信

クラ

イア

ント

サー

参考

前段の処理が完了してから実行開始

6

文書構造  解析   係受解析

因果関係  抽出

辞書データ,モデル  (約750MB)

辞書データ,モデル  (約400MB)

ライブラリ群

実行時コンパイル ロード ロード

課題(2)   起動オーバヘッド

•  辞書データ・モデルのロードに数秒程度要する場合あり  •  バッファリングでは解決できず(後段の解析プログラムでデータ受信待ちに

よるアイドル時間発生)  

起動時にディスクから読込  ・内部データ構造構築

断続的な入力データの到着ごとに起動するとオーバヘッド大  

7

課題(3)    並列処理実装コスト

…  for  (String  endpoint  :  list)  {      exec.execute(new  Runnable()  {            public  void  run()  {                  try  {                      s  =  new  ClientFactory().create(clsService,  new  URL(url));                        if  (s  instanceof  ArrayResultNoYfier)  {                                s.setReceiver(new  ArrayResultReceiver()  {                                  public  void  receive(Object  result)  {                                          queResult.add((V)  result);  …  

通常の並列ストリーミング処理のコード例  (一部.全体で約400行以上) ス

トリ

ーミ

ング

サー

バ呼

び出

•  複数の計算機ノード上の処理結果を段階的に収集,集約  •  言語処理プログラムごとの個別の実装ではコスト大

•  断続的に到着する複数のストリーミングデータの管理,処理の同期,エラー処理等が実装コスト大  

•  適切なライブラリなし

解決:  高速化・高並列化ミドルウェアRaSC

•  特徴  –  言語処理プログラムを共通の高速ストリーム通信で接続  –  起動オーバヘッドを削減  –  並列処理実装を簡単化  (主にJavaで実装.約1万6000行)  

•  本年次大会に合わせてオープンソースで公開  

8

言語処理プログラムを共通ミドルウェア上で接続,実行して高速化・高並列化  

RaSCの機能(1)  言語処理プログラムのサーバ化

•  プログラムを計算機ノードに常駐させ起動コスト削減  

•  言語処理プログラムとは標準入出力を介してやりとり  

•  多数の通信プロトコルに対応(MessagePack  RPC,  JSON  RPC,  ProtocolBuffers,  SOAP),様々な言語から呼び出し可  

•  複数の実行プロセスを管理,ユーザが意識することなく並列化  

プログラム

入出力アダプタ プロセス管理

ストリーミング化インタフェース

RaSC  

サーバ構成  

クライアント  

プログラムごとに開発  (コード規模:  数行~十数行)  

共通プロトコル  

9

TextAnalysisService  client  =    factory.create(DependencyAnalysis.class,                                                                                                              new  InetSocketAddress(”HOST_ADDRESS",  PORT));  String  result  =  client.analyze(“解析対象文”);  

Javaプログラムからの使用例  (初期化含め2ステートメント)

言語解析プログラムのサーバ化 適用事例

適用例 記述コード量 速度向上

文書構造解析  (NICT開発,Perl)

12行 2.8倍

構文解析  (J.DepP,C++)

3行 3.6倍

因果関係抽出  (NICT開発,Perl)

6行 126倍

(新プログラム) (数行~十数行) …

大規模Web情報分析システムWISDOM  Xへの適用事例

言語処理プログラムごとに開発.  小規模・定型的であり実装用意  

10

Webページ1件の解析ごとに  起動する場合と比較  

起動時の巨大  ファイルロード  の削減が寄与  

RaSCの機能(2) 大規模分析の並列分散化

分散・集約機構

未来分析  サーバ

•  ストリーミング通信によるプログラムの並列分散機構を用意  –  基本的な並列分散化なら新たな実装不要  –  プラグインで機能拡張  

•  並列分散の実行,結果の集約の実装コストを削減  

RaSC  

集約プラグイン  (SVMランキング)

集約プラグイン  (重複除去)

ストリーミング化インタフェース

質問応答  サーバ

クラスタA(メモリ豊富) クラスタB(ディスク高速)

クライアント  

11

適用例 コード量 管理データ

事実型質問応答 71行 16TB

係り受けデータ検索

44行 7.5TB

全文検索 60行 3.7TB

(新プログラム) (数行~数十行) …

大規模Web情報分析システムWISDOM  Xへの適用事例

大規模分析の並列分散化 適用事例

計算機ノード1台に  収まらないデータを分散 いずれも40台の計算機上  

で並列して検索

適用例 コード量 管理データ

事実型質問応答 71行 16TB

係り受けデータ検索

44行 7.5TB

全文検索 60行 3.7TB

(新プログラム) (数行~数十行) …

大規模Web情報分析システムWISDOM  Xへの適用事例

大規模分析の並列分散化 適用事例

計算機ノード1台に  収まらないデータを分散 いずれも40台の計算機上  

で並列して検索

•  事実型質問応答を初めとする各種分析の実現に寄与  –  バックエンドでの分散検索に利用  –  多種の解析結果データの分散検索を短期間で開発  

大規模Web情報分析システムWISDOM  X(事実型質問応答)

利用事例

適用例 コード量 管理データ

事実型質問応答 71行 16TB

係り受けデータ検索

44行 7.5TB

全文検索 60行 3.7TB

(新プログラム) (数行~数十行) …

大規模Web情報分析システムWISDOM  Xへの適用事例

大規模分析の並列分散化 適用事例

計算機ノード1台に  収まらないデータを分散 いずれも40台の計算機上  

で並列して検索

•  事実型質問応答を初めとする各種分析の実現に寄与  –  バックエンドでの分散検索に利用  –  多種の解析結果データの分散検索を短期間で開発  

大規模Web情報分析システムWISDOM  X(Why型質問応答[1])

[1]  Jong-­‐Hoon  Oh,  et  al.  Why-­‐QuesYon  Answering  using  Intra-­‐  and  Inter-­‐SentenYal  Causal  RelaYons,  In  Proceedings  of  the  ACL  2013,  pp.  1733—1743,  2013.

利用事例

適用例 コード量 管理データ

事実型質問応答 71行 16TB

係り受けデータ検索

44行 7.5TB

全文検索 60行 3.7TB

(新プログラム) (数行~数十行) …

大規模Web情報分析システムWISDOM  Xへの適用事例

大規模分析の並列分散化 適用事例

計算機ノード1台に  収まらないデータを分散 いずれも40台の計算機上  

で並列して検索

•  事実型質問応答を初めとする各種分析の実現に寄与  –  バックエンドでの分散検索に利用  –  多種の解析結果データの分散検索を短期間で開発  

分析結果の例:    森林破壊が続く à  地球温暖化が進行する    à  海水温度が下がる  à  腸炎ビブリオが増える    à  食中毒が増える

大規模Web情報分析システムWISDOM  X(未来分析[2])

[2]  Chikara  Hashimoto,  et  al.  ExtracYng  Event  Causality  ExploiYng  SemanYc  RelaYon,  Context,  and  AssociaYon  Features,  In  Proceedings  of  the  ACL  2014  (to  appear)

利用事例

適用例 コード量 管理データ

事実型質問応答 71行 16TB

係り受けデータ検索

44行 7.5TB

全文検索 60行 3.7TB

(新プログラム) (数行~数十行) …

大規模Web情報分析システムWISDOM  Xへの適用事例

大規模分析の並列分散化 適用事例

計算機ノード1台に  収まらないデータを分散 いずれも40台の計算機上  

で並列して検索

•  災害時におけるTwiqerの分析にも応用  •  ストリームとして到着するTweetの処理を高速化  

NICT  対災害情報分析システム

利用事例

質問例:「宮城県で何が不足していますか」  

質問例:「宮城県のどこで炊き出しをしていますか」  

被災状況の概観を提示  

既存フレームワークとの比較

既存プログラムの実行

大規模  並列処理   簡便さ

ストリーミング処理

Hadoop    (大規模バッチ処理) △ ◎ ◎ ×

Storm    (大規模ストリーム処理) △ ◎ ◎ ◎

Jubatus  (分散オンライン機械学習) △ ○ ◎ ◎

UIMA    (NLPツール連携) ○ △ △ ×

RaSC ◎ ○ ○ ○

17

•  各種の言語処理プログラムの高速実行にフォーカス  •  計算機200台超での稼働,十数種の言語処理プログラムの連携に実績  

オープンソースでの公開

18

•  URL:  hqp://alaginrc.nict.go.jp/rasc/  –  高度言語情報融合フォーラム(ALAGINフォーラム) àオープンソース à  オープンソー

スソフトウェア からアクセス可能  

•  チュートリアル,著名な言語処理プログラム・機械学習プログラムでの利用方法を掲載  

•  ソースコードはGitHubで公開  

使用例

19

# 言語処理プログラムを直接実行した場合 $ time cat INPUT_TXT | juman | knp > OUTPUT_TXT real 2m24.652s user 0m0.901s sys 0m0.167s # KNPを使うRaSCサーバを起動 $ ./server.sh KNPService 19999 start KNPService started on port 19999 # RaSC上でJUMAN, KNPを実行 $ cat INPUT_TXT | java -cp ./lib/*: RaSCClient localhost 19999 > OUTPUT_TXT real 0m29.593s # マルチコアCPUにより並列化(Intel Xeon X5675*2 ) user 0m0.556s sys 0m0.055s

ホスト・ポートを変更すれば  他の計算機ノードへもアクセス  

前もってプロセスを複数起動  (この例では8並列に設定済)  

•  既存の言語処理プログラムを簡便に並列実行  •  パイプによる入出力で他のプログラムと接続可能  •  複数件の入力を,並列実行されるプロセスに割り振り  

•  ALAGINフォーラム等での講習会を予定  

RaSCドキュメント チュートリアル「マルチコアCPUを生かして並列実行する」より

20

…  br  =  new  BufferedReader(new  InputStreamReader(System.in));    List<String>  list  =  new  ArrayList<>();    String  str;    while((str  =  br.readLine())  !=  null)  {        list.add(str);          if  (list.size()  <  1000)  conJnue;        String[]  ret  =  client.analyzeArray(list.toArray(new  String[0]));          System.out.println(StringUYls.join(ret,  "\n"));          list.clear();  } …  

前ページ RaSCClient のメイン部分(全体は約30行.RaSCのWebサイト参照 )

使用例

ネットワーク経由呼び出しのオーバヘッド  軽減のため,ある程度一括して処理可能  

•  ユーザ視点からは並列化を意識せずに実行  •  入力の順序は出力でも保存  

まとめ

•  大規模テキスト分析には,計算負荷の高い言語処理プログラムを多数の計算機上での高速・高並列な処理が必要  

•  課題  –  データ通信に伴うCPUアイドル時間  –  言語処理プログラムの起動オーバヘッド  –  並列処理の実装コスト  

•  解決:  高速・高並列化ミドルウェアRaSC  –  プログラム間をストリーミング通信で接続可能に  –  プログラムの実行プロセスを計算機ノードに常駐させ起動コスト削減  –  並列分散処理を簡単化する機構を提供  

•  オープンソースで公開中!  

21