2012年11月29日木曜日

[.tested] UK/ThreeのSIMをAX3/A6で使ってみる

UK / Three internetのSIMは、LHRの空港の自動販売機でも買える手軽なSIMです。
OpenBlocks A6/AX3でモバイルネットワーク接続を確保するため、Huawei社のUSBモバイルアダプタ(E220相当)を利用してpppdで接続しました。

1. USBモデムの認識
Huawei社のE220は、usbserial(option)により認識されます。AX3およびA6では標準のカーネルパッケージでタイプします。
dmesgは以下の通りです。
usb-storage: device found at 2 usb-storage: waiting for device to settle before scanning usb 1-1: new full speed USB device using ehci_marvell and address 3 usb 1-1: configuration #1 chosen from 1 choice scsi5 : SCSI emulation for USB Mass Storage devices usb-storage: device found at 3 usb-storage: waiting for device to settle before scanning usbcore: registered new interface driver usbserial USB Serial support registered for generic usbcore: registered new interface driver usbserial_generic usbserial: USB Serial Driver core USB Serial support registered for GSM modem (1-port) option 1-1:1.0: GSM modem (1-port) converter detected usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0 option 1-1:1.1: GSM modem (1-port) converter detected usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1 usbcore: registered new interface driver option option: v0.7.2:USB Driver for GSM modems
2. APNの設定
APNは、three.co.ukまたは3internetを以下のATコマンドで指定します。
(three.co.ukはNAT経由になります)

AT+CGDCONT=1,"IP","APN名"

今回は、pppconfigで設定ファイルを作成した後、/etc/chatscript/threeの下に追加しました。
: # modeminit '' ATZ '' AT+CGDCONT=1,"IP","3internet" :
3. pppdの設定

pppconfigを使用します。
導入していない場合は、パッケージをインストールしてください。

# aptitude install ppp pppconfig

設定は、以下の通りです。

Provider Name three
Configure Nameservers (DNS) Dynamic
Authentication Method for test PAP
User Name three
Password three
Speed 460800
Pulse or Tone Tone
Phone Number *99#
Choose Modem Config Method YES (Auto)
Select Modem Port Manual
Manually Select Modem Port /dev/ttyUSB0

eth0や他のインタフェースが有効になっている場合は、/etc/ppp/peers/threeに、以下の行を加えてください。

replacedefaultroute

接続は、
# pon three

切断は、
#poff

接続時のifconfigの表示は以下の通りです。
ppp0      Link encap:Point-to-Point Protocol           inet addr:94.196.2.226  P-t-P:10.64.64.64  Mask:255.255.255.255           UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1           RX packets:6 errors:0 dropped:0 overruns:0 frame:0           TX packets:7 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:3           RX bytes:102 (102.0 B)  TX bytes:129 (129.0 B)

2012年11月21日水曜日

JubatusをOpenBlocks AX3へインストールしてみる

はじめに

こんにちは、Preferred Infrastructureの柏原です。私も開発に参加しているOSSの機械学習フレームワークであるJubatusをOpenBlocks AX3へインストールする方法を紹介します。

Jubatusは機械学習のフレームワークです。機能としては分類、レコメンド、回帰、グラフ分析などがあり、それらの機能に対して複数のアルゴリ ズムを実装しているものもあります。特徵としては、オンライン学習に特化しており、さらに分散実行によってスケールアウトするため、機械学習の訓練と予測 を短時間に繰り返し的に(イテレーティブに、そしてバッチではなく)実行可能となっています。ただし、実行時間は入力データの種類、長さにも依存してしま うため、一定時間内に処理が完了することを保証しているわけではありません。

Jubatusはサーバとして動作させ、クライアントプログラムからサーバへ問い合わせる形で利用します。また、サーバを分散環境で動作させることができ、学習結果のモデルをMIXという処理で共有できることを大きな特徴としています。

Jubatusはこれまで通常のデータセンターのようにIAサーバ上でしか稼働させていませんでしたが、地理的に分散した情報源が存在する環境で や、もしくは通信ボトルネックを考慮してOpenBlocksのような省電力サーバを末端に配置して処理するようなEdge-HeavyData(*1) というアーキテクチャへの適用も視野に入れています。例えば、OpenBlocksの活用例にもあるような監視カメラや防災センサーの情報を OpenBlocksで処理し、リアルタイム(バッチと比較して、より短い時間という意味です)に異常検知やシステム監視などを実現できるのではないかと 思っています。

OpenBlocks AX3はARMプロセッサを搭載していますが、JubatusのインストールにおいてJubatus本体に特別な修正は必要ありません。依存ライブラリの インストール時には、修正が必要なものもあります。インストール先はPREFIX=/usr/localと仮定して解説します。基本的にはx86系のLinuxへインストールする手順と大きな差はありません。

(*1)

 

インストールに必要なライブラリ

Jubatusインストール前に、まず以下4つのライブラリをインストールします。
  • msgpack
    • シリアライズフォーマットMessagePackのC/C++ライブラリです。Jubatusの提供するRPCで利用しています。また、pficommon経由で依存しています
  • libevent
  • glog 0.3.2
  • pficommon
    • C++用の拡張ライブラリです。Jubatusで利用しています
上2つのmsgpackとlibeventは以下のコマンドでパッケージからインストールできます。
$ sudo aptitude install -y libmsgpack-dev libevent-dev
glog、pficommonとJubatus本体はソースコードを取得してからのインストールになります。あらかじめgitをパッケージからインストールしておいてください。


オプショナルなライブラリ

必須ではありませんが、Jubatusから利用できるライブラリに以下のものがあります。例えば自然言語処理といった実行目的に応じて活用することになると思います。今回はこれらのインストール方法の解説はありません。
  • re2
    • 正規表現ライブラリです。文字列入力に対して、正規表現でマッチした文字列の置換ができるようになります。Jubatusを初めて試す場合にはインストールの必要はないでしょう
    • https://code.google.com/p/re2/
  • mecab
    • 形態素解析エンジンです。日本語の自然言語処理を実行したいときにインストールすると良いでしょう。Jubatusではmecab 0.99以降を利用するため、現時点ではパッケージからではなくソースコードからインストールする必要があります
    • https://code.google.com/p/mecab/
  • ux-trie
  • zookeeper c client-library
    • Jubatusを分散構成で実行するためには、ZooKeeperのCクライアントライブラリを含めてビルドする必要があります。 ZooKeeper 3.4.4(stable)では、インラインアセンブラを使用していた箇所をARM向けにコードを修正すればJubatusのビルドができることを確認し ています。動作確認は今後実施していく予定です
    • http://zookeeper.apache.org


インストール

glog 0.3.2

glog 0.3.2のソースコードをダウンロードし、ビルドしてインストールするだけとなります。 http://code.google.com/p/google-glog/
$ wget http://google-glog.googlecode.com/files/glog-0.3.2.tar.gz $ tar -xvf glog-0.3.2.tar.gz $ cd glog-0.3.2 $ ./configure $ make $ sudo make install

pficommon

gitからソースコードを取得します。ビルドが確認できている 10b1ba95628b0078984d12300f9a9deb94470952 を利用しましょう。
$ git clone https://github.com/pfi/pficommon.git
$ cd pficommon $ git checkout 10b1ba95628b0078984d12300f9a9deb94470952
pficommonでは一部、ARM非対応のコードがあるため以下の箇所をコメントアウトします。
diff --git a/src/system/barrier.h b/src/system/barrier.h index 8d5a783..51fe561 100644 --- a/src/system/barrier.h +++ b/src/system/barrier.h @@ -58,7 +58,7 @@ #else -#error "your cpu architecture is not support memory barrier" +//#error "your cpu architecture is not support memory barrier" #endif
修正後に、configureをしてビルド・インストールという手順になります。
$ ./waf configure Setting top to : /home/kashihara/repos/pficommon Setting out to : /home/kashihara/repos/pficommon/build Checking for 'g++' (c++ compiler) : /usr/bin/g++ Unpacking gtest : yes Checking for library pthread : yes Checking for library pthread : yes Checking for header msgpack.hpp : yes Checking for header fcgiapp.h : not found Checking for header stdint.h : yes Checking for header unordered_map : not found Checking for header tr1/unordered_map : yes Checking for header ext/hash_map : yes Checking for header unordered_set : not found Checking for header tr1/unordered_set : yes Checking for header ext/hash_set : yes Checking for 'mysql_config' : not found Checking for 'Magick++-config' : not found pficommon has been configured as follows: [Modules] FCGI module: no Database module: yes have MySQL lib: no have PostgreSQL lib: no MessagePack RPC module: yes [Visualization] Magick++ impl: no [Build information] Package: pficommon-1.3.1 build (compile on): arm-linux host endian: little Compiler: g++ Compiler version: 4.4.5 CXXFLAGS: -O2 -Wall -g -pipe -D_REENTRANT -fno-omit-frame-pointer D_FORTIFY_SOURCE=1
$ ./waf $ sudo ./waf install

>wafの使い方

/usr/local以外に、例えば自分のホームディレクトリをprefixに指定してインストールしたい場合もあると思います。そのような場合は、以下のように環境変数を加えて./waf configureを実行します。
$ export DEV_HOME=$HOME/usr $ PKG_CONFIG_PAHT="$DEV_HOME/lib/pkgconfig" \ CXXFLAGS="-I$DEV_HOME/include" \ LINKFLAGS="-L$DEV_HOME/lib" \ ./waf configure --prefix=$DEV_HOME

Jubatusのインストール

Jubatus 0.3.3 (2012年10月29日リリース)もpficommonと同様にgitからソースコードを取得します。以下のコマンドで、ソースの取得から最低限の構成でインストールが可能です。
$ git clone https://github.com/jubatus/jubatus.git $ cd jubatus $ git checkout jubatus-0.3.3 -b jubatus-0.3.3 $ ./waf configure --disable-re2 Setting top to : /home/kashihara/repos/jubatus Setting out to : /home/kashihara/repos/jubatus/build Checking for 'g++' (c++ compiler) : ok Unpacking gtest : yes Checking for library pthread : yes Checking for library msgpack : yes Checking for library dl : yes Checking for program pkg-config : /usr/bin/pkg-config Checking for 'libglog' : yes Checking for 'libevent' : not found Checking for library event : yes Checking for 'pficommon' : yes Checking for header pficommon/network/mprpc.h : yes Checking for header unistd.h : yes Checking for header sys/types.h : yes Checking for header sys/wait.h : yes Checking for header sys/stat.h : yes Checking for header cxxabi.h : yes Checking for header sys/socket.h net/if.h : yes Checking for header sys/ioctl.h : yes Checking for header fcntl.h : yes Checking for header netinet/in.h : yes Checking for header arpa/inet.h : yes Checking for header dlfcn.h : yes Checking for header sys/socket.h net/if.h sys/ioctl.h : yes Checking for header netinet/in.h arpa/inet.h : yes Checking for compiler atomic builtins : no 'configure' finished successfully (11.186s)
$ ./waf $ sudo ./waf install

まとめ

これでOpenBlocksでJubatusを利用する準備は整いました。実際にJubatusを利用して機械学習をするには、Jubatusのクライアントを作ることになります。クライアントは、必ずしもJubatusサーバを動作させるホストで実行する必要はありません。この場合は OpenBlocksでサーバを動かすことを想定していますが、クライアントをx86_64のLinuxやMacBook Air(2011)から実行してOpenBlocks上でJubatusが動作することを確認しています。

クライアントの開発・実行にはC++, Ruby, Python, Javaといったプログラミング言語が利用可能です。現在はgithubのjubatus-exampleリポジトリにサンプルプログラムを準備していま す。詳しくはJubatusオフィシャルサイトやJubatus Blogなどをご覧ください。
ちなみに、Jubatusの各サーバは、eth0もしくは、最初に取得できたネットワークインタフェースのIPv4アドレスにリッスンす るソケットを割り当てます。クライアントからアドレスを指定する際には、IPv6のアドレスではなくIPv4アドレスを指定するよう気をつけてください (ホスト名の解決で、IPv4アドレスより先にIPv6アドレスが返ることがあります)。

今後はZooKeeperや各種ライブラリを利用した実験、評価を考えています。分散環境をOpenBlocks(ARM)とx86系サーバといったヘテロジニアスな環境で構築して動作させたいですね。

Jubatus解説記事 実験/評価編はこちら:
   JubatusをOpenBlocksで動作させてみる

2012年11月7日水曜日

今週末はKOF2012 「関西オープンソース2012 関西コミュニティ大決戦」に出展します。

今週末、11/9(金)、11/10(土)は、KOF 2012に出展します。

ホーム

開催概要は、以下の通りです。

---

関西オープンフォーラム2012
関西オープンフォーラムは、「オープンソースならびに、コミュニティが元気に交流できる場を、関西でも作ろう」という目的のもとに集った有志により、2002年に活動を開始いたしました。
KOFは、昨年2011年まで「関西オープンソース+フリーウェア」「関西オープンソース、関西コミュニティ大決戦」と名称を変えながら毎年開催されてお り、このイベントは関西でオープンソースソフトウェアに対して熱心な人達が運営するコミュニティ、オープンソースソフトウェアに関わりながらビジネスを展 開する人達等、様々な人達の参加と協力で成り立っています。
会 期:
2012年11月9日(金)~11月10日(土)
11/09 13:00-18:00
11/10 10:00-18:00
会 場:
大阪南港ATC ITM棟 【道順詳細】
〒559-0034 大阪府大阪市住之江区南港北2丁目1-10
入場料:
無料(懇親会は実費)
--

「OpenBlocksによるマイクロサーバソリューション及びデベロッパネットワークのご紹介」として、OpenBlocks A Familyを中心としたデモを行います。
.testedで検証した周辺機器なども合わせて展示します。

展示会場では、実際に見て、触っていただくと共に、実際の開発の状況や、OBDNを中心としたデベロッパネットワークの状況、周辺機器評価や、Linuxを含め、様々なOSの開発状況についてなど、気軽にお声がけいただけたらと思います。

個人的には、土曜に15分のステージを行いますが、半分ネタですので笑って流してください。

では、大阪でお会いしましょう。

2012年11月3日土曜日

OSC 2012 aizu

本日は、会津若松市、会津大学にてOSC 2012 aizuを開催しています。

  

当社もブース出展を行っています。

開催概要は以下の通りです。

---

日程:2012年11月3日(土) 10:00~17:00(※9:00~開場時間までの待機場所あり)
会場会津大学 講義棟 (大講義室・M8・M9教室)  [キャンパスマップ]
    [アクセス詳細](会津若松駅からバス・タクシーで約10分)
    [GoogleMap] [OpenStreetMap]

費用:無料

内容:オープンソースに関する最新情報の提供
   ・展示 - オープンソースコミュニティ、企業・団体による展示
   ・セミナー - オープンソースの最新情報を提供

主催:オープンソースカンファレンス実行委員会
   Open Source Conference 2012 Aizu 実行委員会

後援公立大学法人会津大学

協力会津若松市

協賛:会津若松市役所電脳倶楽部

企画運営:株式会社びぎねっと

--

「OpenBlocksによるマイクロサーバソリューション及びデベロッパネットワークのご紹介」として、OpenBlocks A Familyを中心としたデモを行います。
.testedで検証した周辺機器なども合わせて展示します。

展示会場では、実際に見て、触っていただくと共に、実際の開発の状況や、OBDNを中心としたデベロッパネットワークの状況、周辺機器評価や、Linuxを含め、様々なOSの開発状況についてなど、気軽にお声がけいただけたらと思います。

では会津大学でお会いしましょう。