Ambari + EC2 spot instanceでHadoopクラスタを30分で作る
軽い事前準備はいりますが、Ambariを使うと複数台のHadoopクラスタを30分くらいで一気に作ることができます。
タイトルではEC2 spot instanceとか書いてますが、単にマシン大量に用意しているだけなんで別にAzureとかGCEでも他のIaaSでもいけるかもしれません。またここではHDP使ってますが同じくAmbari使ってるPivotalHDもいけるはずです。
ドキュメント
細かい設定は後ほど書きますが、Ambari-server入れたマシンとSELinuxとか切ったイメージは用意しておく必要はあります。あとセキュリティの設定もしておく必要があります。
んで、インスタンスをspotで大量作成。こんなことしなくてもm3.xlargeとかを少量建てたほうが効率いいでしょうけど。
建ちました。
Ambari-serverマシン立ちあげて、ログインします。
インストールするHDPのバージョンを選びます。URLの空欄は、HDPのRPMを入れた内部IPを入れています。s3をrpmリポジトリにするのもいいかもしれません。
インストール先を入力します。例によって各マシンの内部IPです。今回30個Spot建てたので30個分IP貼っつけてます。
インストールするコンポーネントを選びます。この前にHBaseとか、OozieとかSparkを選択する画面があります。
Hiveは管理用のパスワードが必要なので、入れています。
インストールを進めます。あとは勝手にNamenodeやDatanodeをインストールしていきます。
インストールが終わりました。実際インストール自体は30分くらいなのですが、今回はSpotの価格が安くていくつかインスタンスが落とされたため、価格を再設定して立てなおしたりしましたのでもっと時間がかかっています。
セットアップが終わったら結果が表示されます。今回はセットアップ自体は22分で出来ています。
30台のクラスターが並んでいます。
Map=20でPIのサンプルを回したときの結果です。
使い終わったら、各インスタンスをterminateします。ディスク自体はEBSで残しておくこともできますが、再度インスタンス作るときに内部IPが変わるのでその辺別途設定がいるかと思います。Blueprintとか使って作りなおした方が速いかもしれませんが、まだBlueprintを把握してないのでそれはこの次。あとAmbari-serverは
$ ambari-server stop
$ ambari-server reset
すると再度初期セットアップに戻ります。
というわけで、Ambariを使って素早くHadoopクラスタを作る方法について書きました。ただ大規模計算をしたいならEMRを使った方がいいかもしれませんが、一度Hadoopクラスタを複数台でいじってみたいって人にはいいかもしれません。
後日やる気が出たら詳しい設定方法について書いていきます。
EC2にsshキーで入れなくなった件
久々に新規でインスタンスを建てたのだけど、作成したのが公開鍵で入れず、毎回root@ec2-なんとか’s password:と聞かれる。ちなみに公開鍵は新規での作成と手持ちの公開鍵の両方使用。手元の鍵のpermissionは設定済み。
原因判明。OSのイメージが古いからっぽい。。。マイAMI作りなおしかこれ。。
外資に転職して1年が経ちました。
外資に転職して1年が経ったので個人的にメモ。
業務内容はコンサルタントという肩書で、売った製品のデリバリー(導入)や、導入支援を行ってます。また場合によっては営業と一緒にお客さんの悩みについて聞きにいったりします(この辺りはプリセールスっぽい)。
これまでの会社は社内の技術部隊でしたので、イマイチ自分が行っている仕事の金銭的感覚がわかりにくかったですが、今は自分の稼働コスト=売上につながるので貢献度合いはわかりやすくなった気がします。
ボスからの命令は絶対だと思いますが、レポート先のボスは日本にいないのであまりやりとりしていないです。上から降ってくる仕事だけを受け取る人には向いてないですが、逆に仕事受けすぎても自己責任になりそうですね。あと規則は守らなければいけませんが、逆に守るもんさえ守っていれば細かいとこはつべこべ言われません。これは日本の大企業以外そうでしょうけど。(ただしこの段落は人により異なると思います。営業さんは売上出すために大変頑張ってます)
社内のやりとりは英語が多いです。特にサポートとのやりとりは全部英語です。ボスとのやりとりも全て英語です。ただ日本にわざわざ来る方は日本人が英語苦手なの知ってるので、ゆっくりでも話を聞いてくれます。なのでまずは中学レベルでもいいので単語や文章で伝えていけばいいです。ちゃんと取引するならこれじゃダメなんでもっと上達必要ですね。
あと社内のコミュニティは世界トップクラスのやりとりが読めるので重宝してます。Hadoopのコミッタもいますし、CloudFoundryに至ってはコアメンバがいますしね。
転職は日本の大企業に比べると圧倒的に多いです。が日本のWeb企業も結構多いのでそんなもんって感じもします。逆に再就職の出来ない環境の方が怖いでしょう。ある日突然チームごと首を切られるってのも目にしましたが、自分の親も日本の大企業で同じ事やられたからなぁ。
トータルとして前職といいかどうかは人によると思いますが、自分は外資に入ってみていい経験を得ていると感じています。前職でも、とてもいい経験させてもらいました。
参考になりそうなもの:
アメリカのIT企業で働くために行った英語の勉強法など - 科学と非科学の迷宮
きんいろDeepLearning
http://deep-learning-hackathon.connpass.com/event/12867/
このイベントに参加して、DeepLearning(Caffe)を回してみました。
大体これまで上がってる記事で、ゴチうさでDeepLearningされてるのがあったので対抗してきんモザでやってみました。n番煎じです。((既にラブライブ等でもされてるようなので))
環境
- Dynabook RX3(Core i5 M520, 4GBMem, Linux Mint 17.1 64bit)
- Amazon EC2 g2.2xlarge インスタンス
問題設定
事前にanimefaceで顔領域を検出した部分に対し、アリスであるかカレンであるか、それとも他のキャラであるかを判定したい
単純な3クラス分類問題ですが、アリスもカレンもキンパツなので、色によるキャラ判別はできません。おそらく輪郭や目つきの情報を使う必要があります。
手順
ご注文はDeep Learningですか?[1]のところとほぼ同じです。 ソースもほぼそのまま使っています。
まずアリス、カレン、他の画像を用意しました。アリスが700,カレンが600、他が6000枚くらいです。画像の用意には[1]のコードをそのまま使っています。
次に自分の手元のマシンRX3上にCaffeをインストールして、LevelDBに上の画像をセットしました。さらにcifar10_quick_train_test.prototxtとcifar10_quick.prototxtを書き換えます。
今回はアリス、カレン、その他の判別なので、ip2レイヤーのnum_outputを3にしています。
また、最近のCaffeの更新で、データの読み込みDBがLevelDBからLMDBとかいうのに変わっているため、LevelDBを読むように書きなおしました。
$ vim examples/cifar10/cifar10_quick_train_test.prototxt
name: "CIFAR10_quick"
layer {
name: "cifar"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mean_file: "examples/cifar10/mean.binaryproto"
}
data_param {
source: "examples/cifar10/cifar10_train_leveldb"
batch_size: 100
backend: LEVELDB
}
}
layer {
name: "cifar"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
mean_file: "examples/cifar10/mean.binaryproto"
}
data_param {
source: "examples/cifar10/cifar10_test_leveldb"
batch_size: 100
backend: LEVELDB
}
}
また、mean.binaryprotoファイルがないので、
cd $CAFFE_ROOT/data/cifar10
./get_cifar10.sh
cd $CAFFE_ROOT
./examples/cifar10/create_cifar10.sh
を実行して作ります。一緒にcaffe/examples/cifar10/cifar10*lmdbとかできますが使わないので消します。
ここまで編集し終わったら、EC2のN.Virginiaにつないで、 ami-763a311eをベースとしたg2.2xlargeのSpotInstanceを立ち上げます。このインスタンスは既にCUDA+Caffeまで入った状態なので、すぐに学習ができます。
インスタンスを立ち上げたら、RX3のcaffe/examples/cifar10以下をEC2:caffe/examples/cifar10以下に上書きします。
$ build/tools/caffe train --solver examples/cifar10/cifar10_quick_solver.prototxt
を実行すると学習が始まります。なおRX3ではCUDAを入れずにコンパイルが通りましたが、実行の際には examples/cifar10/cifar10_quick_solver.prototxtの中にあるsolver_modeをCPUに変える必要がありました。
# solver mode: CPU or GPU
solver_mode: CPU
学習時間
RX3で1時間以上、g2インスタンスで1分です。やはりGPUインスタンス早いですね。スポットインスタンスで起動からTerminateまで1時間も使ってないはずです。
学習結果
[1]と同様に元の動画に当てはめてみたのが下の画像です。ピンクがアリス、青がカレン、他が水色です(ゴチうさの判定器のチノ、ココア、リゼを他、アリス、カレンに当てはめただけです)。
大体顔と判定出来ているところでは、ほとんどアリスとカレンが正しく識別できています。画像突っ込んだだけで他に特徴抽出とかパラメータ設定などは一切行っていません。
明らかに失敗しているパターンも貼っつけておきます。
アリスなのにカレンと判定されています。
元のサイトの方でも書かれていますが、AnimeFaceの検出能力はかなり高いと感じるのですが、その検出能力に不満を感じるぐらい精度よくアリス・カレンの認識が出来ています。
参考サイト
[1]ご注文はDeep Learningですか? http://kivantium.hateblo.jp/entry/2015/02/20/214909
[2]Caffeのインストール http://kivantium.hateblo.jp/entry/2015/01/03/223607
[3]アニメ顔検出 https://github.com/nagadomi/lbpcascade_animeface
[4]cifar10 tutorial http://caffe.berkeleyvision.org/gathered/examples/cifar10.html
[5]Caffe on EC2 Ubuntu 14.04 Cuda 7 https://github.com/BVLC/caffe/wiki/Caffe-on-EC2-Ubuntu-14.04-Cuda-7
失敗談
MacでOpenCV2.4.9をbrewで入れたのですが、シンボリックリンク貼ってもimport cvが通りませんでした。なのでLinuxを使っています。
久々にOpenCV使ったので、動画の出力時に入力と同サイズじゃないとダメな件を忘れてました。正直Caffeのインストールより手こずってます。UbuntuベースであるMint使ってるせいか、Caffeのインストールはすんなり行きました。
またavidemuxから音声が抜き出せていません。
データ集計・分析環境のあれこれ
現在自分の主業務はデータ集計・分析基盤の構築なのだけども、意外とまとまった情報ってなさそうなのでまとめてみる。まずは雑多に並べてみて、あとで整理します。あと自分が触ってないものもあります。
・何を使っていくべきか?
まず機械学習とか分析するのにいきなりHadoopクラスタ組み上げるのも大変なので、必要に応じて学んで行けばよいかと。
逆に大量ログデータを一括で処理したいって場合にはHadoopでも組み上げた方がいいかと。
参考:昨年秋の日記
http://showyou.hatenablog.com/entry/2014/09/15/005055
・言語
R
Julia
HiveQL
・並列計算エンジン
Hive, HBase, Pig, YARNなどはHadoop上の1部品。Hadoopの中身を列挙するだけでも長くなるので別エントリで
Spark
Sparkはメモリ上でのバッチ計算を行うシステムで、メモリに乗るレベルの計算ならHadoopより早い(対MapReduce. YARNベースのものは要比較)
・KVS
HBase
Hadoopの上で動く
Redis
シンプル故に早い
MongoDB
jsonでデータやりとり出来るのが楽。トランザクションで偶に泣きを見てる人がいる気がする。
Riak
Cassandra
Column(列)ベース
Pivotal GemFire の OSS 版、Geode のビルド - めざせ!細マッチョ
https://network.pivotal.io/products/project-geode
in memory KVS. Pivotal GemfireのOSS版。ビルドは一手間いりそう。
最近couchDBは聞かなくなった気が
・DB
Greenplum
Vertica
Redshift
Hive
DBというより、Hadoop上のファイルや集計処理をDBのように扱えるツールといった感じ。SQLとは少し違うHiveSQLを使用。
Impala, Presto, Drill, HAWQ
・Streaming処理
Apache Storm
Norikra
Spark Streaming
自分まだ触ってないですが、バッチ処理を細かくして実行間隔を短くしてるので、上2つほどではない気が
・視覚化
ipython notebook
RStudio
Hue
shib
Pentaho
Tableau
Microstrategy
・ログ・データ転送
Flume
Sqoop
fluentd
embulk
pentaho
・機械学習
scikit-learn(python)
Torch7
libsvm(liblinear)
・Deep Learning
Deep Learning リンク集 - 人工知能に関する断創録
Torch7
H2O
適当に列挙するだけじゃなくて、ユースケースに応じて使い方を紹介した方がよさそうですね。