masato-ka's diary

日々思ったこととか、やったことの備忘録。

JubatusをCentOS5.8にインストールした奮闘記

JubatusをCentOS5.8にインストールしました。インストール中にはまりどこがあったので、個人的な備忘録代わりに記しておきます。

Jubatusとは?

Jubatusはオンラインで大規模・リアルタイムな機会学習が可能なOSSです。NTT研究所とPFIが開発を行っています。
Jubatus
現在のバージョンは0.3.0です。Jubatusはサーバ・クライアント構成になっており、文章の多値分類、レコメンデーション、回帰、特徴抽出、ネットワークグラフの分析などをリアルタイムに行うことができます。また、zoopkeeperを使って複数のサーバ側で分散して学習と分類・レコメンデーションを処理できます。
使用方法はJubatusサーバを立ち上げ、クライアントからRPCでmsgpack形式の設定や分類データを送付し、結果を受け取ります。クライアントはC++/Pythonなどが用意されています。

CentOS5.8へのインストール

Jubatusのインストールは複数の関連パッケージを事前にインストールしておかなければならず、yumやaptで一発という訳にはいかないようです。*1今回はJubatusのインストールシェルが公開されているのでこれを利用します。関連パッケージの入手とビルドの手順がシェルスクリプトにまとめられています。
そのまえに、CentOSの環境を整えます。

事前準備

CentOSに次のパッケージをインストールしておきます。

  1. git
  2. Python2.7
  3. easy_install
  4. mercurial
  5. gcc 4.4以上

CentOS 5.8はPython2.4がデフォルトになっているため、Python2.7にバージョンアップしておきます。この時、PythonSSLサポートをONにしておく必要があります。Googlecodeからre2ライブラリをmercurialでクローンするときに転けます。私はSSLをONにしてなかったので、install.shでre2ライブラリのクローン先をhttsからhttpにしました。またgccも4.1なので4.4以上にバージョンアップしておきます。

Jubatusインストーラのダウンロードとシェルスクリプトの修正

GithubからJubatusのインストールスクリプトをcloneして、ディレクトリに移動します。

$ git clone https://github.com/odasatoshi/jubatus-installer.git
$ cd jubatus-installer

このままではインストールに失敗してしまうので、installer.shの中身を修正します。修正内容はmsgpackのビルド部分で、CFLAGSとCPPFLAGSを追加することです。このオプションをつけずにビルドすることも可能ですが、msgpackのライブラリをリンクさせるときに失敗します。

    cd ../msgpack-${MSG_VER}
    ./configure --prefix=${PREFIX}
    CFLAGS="-march=i686"
    CPPFLAGS="-march=i686"
    make
    make install

続いて、jubatus.profileの内容を.bashrcにコピーするか、source jubatus.profileを実行します。これで環境変数にインストールに必要なパスが追加されるはずです。.bashrcにコピーした場合もsource .bashrcを忘れないようにしてください。

Let's Install !

install.shを実行してインストールを行います。時間がかかるので気長に待ちましょう。また途中で失敗した場合もライブラリのリンクに失敗していたり、パスが通っていなかったりすることが多いのでメッセージをよく読んで解決してください。私の場合はMakeには成功してもリンクやconfigureで失敗しているパターンが多かったです。原因はgcc のバージョン違いや、パスの設定ミスなどでした。

$ sudo ./install.sh

正常にスクリプトが完了すれば終了です。

Pythonクライアントのインストール

続いてPythonクライアントのインストールを行います。こちらは何もはまることなくインストールできました。

$ sudo ./install_python.sh

Jubatus起動の確認

最後にJubatusサーバの起動確認をしましょう。以下のコマンドで多値分類器の起動を行います。

$ jubaclassifier --name=tutorial

またtutorialのコードが以下のGithubで公開されています。git でクローンしてください。

https://github.com/jubatus/jubatus-tutorial-python.git

中のReadmeに従い以下のURLからテストデータをwgetして展開します。

$ wget http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz

その後Jubatusのサーバ(jubaclassifier)を立ち上げた状態でtutorial.py を実行すると文章分類を開始します。

$ python tutorial.py

まとめ

とりあえず、Jubatus動いたので何か作ってみたいです。tutorial.pyもさほど難しくないので、文章分類なら簡単にできるのではないかと思いました。

*1:一応yummac portsにはJubatusがあるようですが試してません。