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サイト参照 )
使用例
ネットワーク経由呼び出しのオーバヘッド 軽減のため,ある程度一括して処理可能
• ユーザ視点からは並列化を意識せずに実行 • 入力の順序は出力でも保存