============== RaSC動作の概要 ============== RaSCは,国立研究開発法人 情報通信研究機構が開発した,ユーザプログラムを高速・高並列に実行可能にするフリーのミドルウェアです. RaSCは,既存の形態素解析器や係り受け解析器などのプログラムを,大規模な自然言語処理に適用することを念頭に開発されたものであり,ユーザプログラムを複数のCPUコアを活用して並列実行したり,複数の計算機上で分散実行することを容易にします.しかし,その応用範囲は,自然言語処理プログラムに限定されません. RaSC上で稼働するユーザプログラムのプロセスは,一度起動されると計算機に常駐します.そのため,辞書ファイルをロードする言語処理プログラムのように,巨大ファイルのロードなどにより起動時間が長くなっているプログラムであっても,効率的に実行できます.また,ユーザプログラムはネットワークを介して容易に利用でき,並列化・分散実行によって高速化されます.ユーザプログラム同士は,UNIXのパイプのように,簡便にストリーム通信により接続できますが,ユーザプログラムの実行はユーザが意識することなく並列に行われます (:doc:`rasc_overview` 参照). RaSC上で稼働するユーザプログラムは,ストリーミング通信可能なサーバとして実現されます.このサーバをRaSCサービスと呼びます.RaSCサービスは,コマンドラインやJava, Perl, Python などの各種プログラミング言語から簡単に利用でき,パイプ等を介した他のプログラムとの接続も容易です. .. _rasc_service_structure: RaSCサービスの構成 ++++++++++++++++++ 図1に,プログラムをRaSCサービス上で稼働させる場合の構成を示します.リクエストを受けた際,RaSCはプログラムのプロセスを新たに生成します. リクエストに対応する処理が終了しても,プロセスは終了されず,以降のリクエストの実行に再利用されます.そのため,起動に長時間を要するプログラムでも,2度目以降はすぐに利用できます. .. figure:: img/rasc_server.png :width: 20% :align: center 図1: RaSCサービスの構成 先に受けたリクエストによって起動済みのプロセスが利用中に,新たなリクエストを受けた場合には,定めたプロセス数の上限に達するまで新たなプロセスを生成します.プロセス数が上限に達していた場合は,リクエストを実行待ちキューに入れられます.いずれかのプロセスが空き状態になると,実行待ちキューのリクエストを順に実行します.一定時間内にいずれのプロセスも空き状態にならなければ,エラーが返されます. .. _rasc_ready_program: RaSCサービス化可能なプログラム ++++++++++++++++++++++++++++++ RaSCサービス化するプログラムは,以下のような条件を満たす必要があります. - 標準入出力を介して入出力を行う - 1件の入力が与えられると,対応する結果を出力し,終了することなく次の入力を待つ. - 入力と出力に明示的な終端文字列を出力する 形態素解析プログラムMeCab, 構文解析プログラムJ.DepPなどはこれらの条件を満たします.すなわち,改行を終端とする入力1件を受け取ると,文字列 "EOS" を終端文字列とする結果を出力します.また,その後次の入力を待ちます. このような条件を満たさないプログラムは,RaSCサービスにするには修正が必要です.ソースコードがあれば,多くの場合修正はそれほど困難ではなく, `SVM Perf `_, `CRF++ `_ などのプログラムについては,本サイトでRaSCサービスにするためのパッチをダウンロードできます. 大規模分析の並列分散化 ++++++++++++++++++++++ 複数の計算機上に分散配置されたRaSCサービスを,並列実行し,結果を集約する機構を用意しています. .. figure:: img/parallel.png :width: 35% :align: center 図1: RaSCサービスの並列分散実行 図1では,各計算機にそれぞれに異なる(一台の計算機には置けない規模の)巨大データを用いた処理を行う際の構成を示しています. *集約サーバ* は,実際の処理を行う *ワーカノード* を並列で呼び出し,その結果を集約します.集約にあたっては,フィルタリングやランキングなどの処理を適用できます. また,集約サーバとワーカノードのセットを複数定義し,それらに対してラウンドロビン等による負荷分散を行う機能も提供しています.