何をするか?
FacebookとNVIDIAが協働して、Caffe2なるものを作ったみたい。参考
chainerやtensorflow、keras、など便利なOSSがいっぱい出たけど、個人的には昔から使っていて慣れているcaffeが結構好きです。(ビルドキツいけど。)
caffeとの違いは、caffe2の公式を拙い英語力によって翻訳すると
1 並列処理ができるようになった。
2 mobile deployment。
3 新しいサポートするハードが増えた(CPUやCUDAなどを含む)
4 量子計算などへの対応に対する柔軟性を持った
5 大規模なFacebookアプリのストレステスト(にも耐えた?)
とあるけど、良く分かりませんw
2はmobile上でも計算できるようにモデルのサイズを小さくできるよってこと?
3はこれまでもCPUやCUDA使ってたけど、より最適化された?とかとか色々と知識不足により不明。
なので触ってみるのが一番でしょうということで、awsのGPUインスタンスへ入れて遊んで実感してみよう。というのが趣旨。
インストール
環境
- AWSのg2.2xlarge
- ubuntu 16.04
手順
ここを元にやってみる。
■諸々インストール
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential \
cmake \
git \
libgoogle-glog-dev \
libprotobuf-dev \
protobuf-compiler \
python-dev \
python-pip
sudo pip install numpy protobuf
pythonとnumpyのバージョンはそれぞれ、python:2.7.12、numpy:1.12.1。
■CUDAのインストール
CUDA8.0は、ここから(要ユーザー登録) linux/x86_64/Ubuntu/16.04/deb(network)を選んで、リンク先のアドレスをwget。
cd /usr/local/wk/cuda
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
■nvidia-smiコマンドでGPUを認識するか確認
ubuntu@ip-172-30-2-22:/usr/local/wk/cuda$ nvidia-smi
Wed May 10 14:48:27 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.51 Driver Version: 375.51 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GRID K520 On | 0000:00:03.0 Off | N/A |
| N/A 31C P0 37W / 125W | 0MiB / 4036MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
■CuDNNのインストール
CUDNN_URL="http://developer.download.nvidia.com/compute/redist/cudnn/v5.1/cudnn-8.0-linux-x64-v5.1.tgz"
wget ${CUDNN_URL}
sudo tar -xzf cudnn-8.0-linux-x64-v5.1.tgz -C /usr/local
rm cudnn-8.0-linux-x64-v5.1.tgz && sudo ldconfig
# /usr/local/cuda配下にinclude/cudnn.hとlib64/[libcudnn.so|libcudnn.so.5|libcudnn.so.5.1.10|libcudnn_static.a]が入る
■その他色々インストール
# ubuntu16.04のみ。ubuntu14.04はlibgflags2をインストール
sudo apt-get install -y --no-install-recommends libgflags-dev
sudo apt-get install -y --no-install-recommends \
libgtest-dev \
libiomp-dev \
libleveldb-dev \
liblmdb-dev \
libopencv-dev \
libopenmpi-dev \
libsnappy-dev \
openmpi-bin \
openmpi-doc \
python-pydot
pip install --upgrade pip
sudo pip install \
flask \
graphviz \
hypothesis \
jupyter \
matplotlib \
pydot python-nvd3 \
pyyaml \
requests \
scikit-image \
scipy \
setuptools \
tornado
■caffe2のソース取得とビルド。
git clone --recursive https://github.com/caffe2/caffe2.git && cd caffe2
make # 30分くらいで何事もなく終わった
cd build && sudo make install # こっちも30分くらい?目を離して終わってたので正確にわからず。。
python -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"
Success
最後の動作で、python上でcaffe2のインポートの動作確認を実施。
■GPUの利用が正しくできているか確認
python -m caffe2.python.operator_test.relu_op_test
最後にOKと出ていれば問題なし。
以下のコマンドを実行する。(このコマンドは、caffe2をgit cloneした場所で実行しました。)
jupyter notebook --no-browser --port=8889
[I 16:49:29.222 NotebookApp] Serving notebooks from local directory: /usr/local/wk/caffe2/build
[I 16:49:29.222 NotebookApp] 0 active kernels
[I 16:49:29.222 NotebookApp] The Jupyter Notebook is running at: http://localhost:8889/?token=xxxxxxxxxxxxxxxxxxxx
[I 16:49:29.222 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 16:49:29.223 NotebookApp]
Copy/paste this URL into your browser when you connect for the first time,
to login with a token:
http://localhost:8889/?token=xxxxxxxxxxxxxxxxxxxxxxx
これを実行したのち、ローカル側で、以下のコマンドを実行する。
ssh -N -f -L localhost:8888:localhost:8889 -i your_login.pem ubuntu@XX.XX.XX.XX
そして、ブラウザでhttp://localhost:8888 を入力すると、jupyterの画面に遷移してtokenを求められる。
そこに、先ほど得た、token=xxxxxxxxxxxxxxxxxxxxxxxの箇所を入力すると無事jupter上でcaffe2のソースが見えるようになります。
あとはここから、caffe2/python/tutorialsと下ると色々なサンプルにたどり着きます。
軽くMNISTの中をみると、model定義がいつもと違う。
modelをCNNModelHelperで生成して、定義をmodel.Convやmodel.MaxPoolなどで作成していました。
この辺りの書き方は、chainerやkerasなどに凄く似てるなぁ。
prototxtはどこに行ってしまったんだろう。。
正直、これまでcentosやOSXでビルドすることが多く、ビルドで失敗して多大な時間を持って行かれる恐怖があったけど、ubuntuだと?なのか、caffe2だとなのかわからないけど、すんなり入ってよかった。。
時間があれば、実行してどれくらいの速度かとかモデルのサイズは?などを改めて調べてみたい。