これは、OpenCV の opencv_traincascade を マルチコアで高速に行うために, AWS EC2を使うための設定メモです。 EC2 の 「Amazon Linux AMI 2012.03」に OpenCV2.4.0 を TBB 付きでInstallします。 使い方のイメージは「HiCPUのEC2インスタンスで学習を実行し、実行結果のXMLをS3にUploadしたらEC2インスタンスをshutdownする」です。
なんか、色々非効率なことをしている部分もあると思いますが、ご了承ください。 ちなみに、このAMIイメージを選んだ理由は特にないです。
2012/5/15
Tokyoリージョンに、上記AMIで起動します。 最初は作成した pem を使って ec2-user という名前でログインできるようです。
ssh -i {{MYCREATED.pem}} {{PUBLICS_DNS_NAME.ap-northeast-1.compute.amazonaws.com}} -l ec2-user
適当にグループとユーザを追加。
sudo groupadd -g 10000 yumemi
sudo useradd -g yumemi -u ***** k_morishita
~k_morishita/.ssh/authorized_keys に自分の公開鍵を追加。 sudo 権限付与、後ほどコマンドから自動でshutdownとかしたいので NOPASSでの実行を許可しておく。
とりあえず必要そうなものを入れていきます。 screen は長時間コマンドを実行するので必須、zshは我が友
sudo yum update
sudo yum install zsh screen
chsh
sudo yum -y groupinstall "Development Tools"
S3にUploadするのに便利そうなので s3fs も入れておきます。
S3Fuse: http://takus.me/linux/aws-s3fs-install/
もちろん適当なBucket をs3上に作成しておく。
sudo yum install fuse-devel libcurl-devel libxml2-devel openssl-devel
cd /usr/local/src
sudo chmod 777 .
wget http://s3fs.googlecode.com/files/s3fs-1.61.tar.gz
tar xvzf s3fs-1.61.tar.gz
cd s3fs-1.61
./configure && make && make install
# ref https://aws-portal.amazon.com/gp/aws/securityCredentials
sudo sh -c "echo '[BUCKET NAME]:[ACCEESS KEY]:[SECRET KEY]' > /etc/passwd-s3fs"
sudo chmod 600 /etc/passwd-s3fs
sudo modprobe fuse
sudo mkdir -p /mnt/s3 /tmp/s3
# sudo /usr/local/bin/s3fs [BUCKET NAME] /mnt/s3 -o default_acl=public-read -ouse_cache=/tmp/s3
/etc/fstab に以下を追加
s3fs#[BUCKET NAME] /mnt/s3 fuse allow_other,default_acl=public-read,use_cache=/tmp/s3 0 0
なんとなく pip 経由で numpy を入れる。
sudo yum install python-devel
sudo easy_install pip
sudo pip install numpy
色々面倒なので ffmpeg-devel を入れてしまう
RPMForge の yum リポジトリを追加
cd /usr/local/src
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
sudo rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
# /etc/yum.repos.d/ の rpmforge の enable=1 にして
sudo yum update
CentOSのリポジトリも設定しておく。そうじゃないと ffmpeg-devel が入らなかった。。
http://fdbklp.blogspot.jp/2012/05/amazon-linux-yum.html
上記URLにもあるように、 /etc/yum.repos.d/ の 「EPEL リポジトリのバージョンが 6」なので、 CentOS 6 のリポジトリを追加していけば良いようである。
sudo vi /etc/yum.repos.d/CentOS-Base.repo
-----------------
[base]
name=CentOS-6 - Base
mirrorlist=http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os
enabled=0
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6
-----------------
sudo yum install --enablerepo=base ffmpeg-devel
ソースからInstallするやつを管理するのに stow を使います。 最近の流行は違うという噂を聞きましたが、なんだったか忘れたのでとりあえずこれで。 まけまけいんすとーるする。
cd /usr/local/src
wget http://ftp.gnu.org/gnu/stow/stow-2.2.0.tar.gz
tar xzf stow-2.2.0.tar.gz
cd stow-2.2.0
./configure
make
sudo make install
# stow 用のDIR作成
sudo mkdir /usr/local/stow
sudo chmod 777 /usr/local/stow
# root で実行しやすいように symlink を張っておく。なんかいい加減。。
sudo ln -s /usr/local/bin/stow /usr/bin/stow
ソースからビルドしようとしたけど失敗。結局linuxのバイナリで大丈夫でした。
cd /usr/local/src
wget "http://threadingbuildingblocks.org/uploads/77/185/4.0%20update%204/tbb40_20120408oss_lin.tgz"
tar xzf tbb40_20120408oss_lin.tgz
cd tbb40_20120408oss
mkdir /usr/local/stow/tbb40
cp -a bin include /usr/local/stow/tbb40
cp -a lib/intel64/cc4.1.0_libc2.4_kernel2.6.16.21 /usr/local/stow/tbb40/lib
cd /usr/local/stow
sudo stow tbb40
# あまりお行儀がよくなさそうだけど、
# /etc/ld.so.conf に /usr/local/lib を追加しておいてから、、
sudo ldconfig
確認
sudo ldconfig -p | grep tbb
で tbb が表示されればおそらくOK
libdc1394 は 有効にしない。ffmpeg-devel をInstallすると、自動でlibdc1394が入ってしまう。 最初このライブラリが動かなくてOpenCVが動作しなかった。 /dev/raw1394 が認識されない。 でも、よく考えると不必要なのでOpenCVのビルドの時に明示的にOFFにしておく(WITH_1394=NO) もちろん、 WITH_TBB=ON で。
cd /usr/local/src
wget "http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.0/OpenCV-2.4.0.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fopencvlibrary%2F&ts=1337058942&use_mirror=jaist"
tar xjf OpenCV-2.4.0.tar.bz2
mkdir opencv
cd opencv
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/stow/opencv-2.4.0 -D WITH_TBB=ON -D WITH_1394=NO ../OpenCV-2.4.0
gmake -j 2
make install
cd /usr/local/stow
sudo stow opencv-2.4.0
学習用のvecファイルを統合してくれる便利ツール mergevec を入れておく。
http://note.sonots.com/SciSoftware/haartraining/mergevec.cpp.html
opencv2.4から少しDIRが変わっているので、ちょっと注意。
cd /usr/local/src/OpenCV-2.4.0/apps/haartraining
# cp PATH/TO/mergevec.cpp .
wget http://tutorial-haartraining.googlecode.com/svn/trunk/HaarTraining/src/mergevec.cpp
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
g++ -I. `pkg-config --cflags opencv` `pkg-config --libs opencv` -o mergevec mergevec.cpp cvboost.cpp cvcommon.cpp cvsamples.cpp cvhaarclassifier.cpp cvhaartraining.cpp
sudo cp mergevec /usr/local/bin