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