この記事は、エクセルソフト株式会社 Technical Support の竹田 賢人が執筆しました。
はじめに
ここでは、インテルの Caffe* の動作に必要なコンポーネントを準備して、動作環境を構築する手順を紹介します。CPU 動作を行うので GPU を扱わない都合上、CUDA* のインストールは行いません。さらに、インテルの Caffe* が扱うインテル® マス・カーネル・ライブラリー (インテル® MKL) 関数は、インテルの Caffe* のコンパイル時に自動的にダウンロードされるため、インストール作業は非常に簡単です。
インテル® MKL はインテル社が提供する BLAS、LAPACK などの数学演算処理を実装したライブラリーです。インテルの Caffe* ではデフォルト設定でインテル® MKL を使用し、かつ DNN 向けの高速化を実装しており、インテル® プロセッサー上での動作に高度に最適化されています。インテル® MKL やインテル® MKL-DNN の詳細は下記をご参照ください。
http://www.isus.jp/machine-learning/introducing-dnn-primitives-in-intelr-mkl/
もしくは
https://01.org/mkl-dnn/blogs/kmoffat/2016/introducing-intel%C2%AE-math-kernel-library-deep-neural-networks-intel%C2%AE-mkl-dnn (英語)
動作環境
下記の環境へのインストールを行います。
OS: CentOS* 7.2
CPU: インテル® Xeon Phi™ プロセッサー 7210
メモリ: DDR4-2133 96GB
GPU: なし
作業手順
インテルの Caffe* のインストールは、Berkeley Vision and Learning Center (BVLC) が提供する Caffe* と同じ手順を踏みます。今回は CentOS* に導入するので、下記の Web サイトに従ってインストールを進めます。
Caffe* by the BVLC: RHEL/Fedora*/CentOS* Installation
http://caffe.berkeleyvision.org/install_yum.html (英語)
ここでは次のように構築します。
- CPU 動作をする
- インテル® MKL を使用する
- pyCaffe は扱わない
ライブラリーをインストールする
まず、Caffe* の Web サイトに記載されているインストール手順に従って、下記のライブラリーをインストールします。ただし、Base リポジトリーでは hdf5 関連のライブラリーが取得できず、そのまま進めると、インテルの Caffe* の make 時に参照エラーが発生するため、あらかじめ EPEL リポジトリーからも検索できるように設定します。
sudo yum install epel-release sudo yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel
さらに、追加でライブラリーをインストールします。これらのライブラリーも EPEL リポジトリーから取得することができます。
sudo yum install gflags-devel glog-devel lmdb-devel
インテルの Caffe* をダウンロードする
インテルの Caffe* は GitHub* で公開されています。インテルの Caffe* を GitHub* から clone してローカルに配置します。
インテルの Caffe* をインストールする
ダウンロードしたインテルの Caffe* パッケージを確認します。
パッケージの中にある Makefile.config.example をコピーして Makefile.config にリネームします。CAFFEROOT 環境変数はインテルの Caffe* のクローン先もしくは展開先です。
cd $CAFFEROOT cp ./Makefile.config.example ./Makefile.config
Makefile.config ではインテルの Caffe* のビルド設定を行います。インテルの Caffe* は、デフォルト設定でインテル® MKL を使用して CPU で処理するように設定されており、最初の手順で必要なライブラリーをインストールしていれば、Makefile.config ファイルを変更する必要はないため、この状態でコンパイルします。
make all -j64
コンパイルには時間がかかるので、対象のマシンに搭載されるコア数と同数もしくは 2 倍程度に設定すると効果的です。ここでは 64 に設定しています。
なお、make 中に下記のようにインテル® MKL 関連のライブラリーをダウンロードするため、ネットワークへの接続が必要です。
コンパイルが完了したら、テスト、確認を行います。test、runtest ともにすべて Pass すれば正常にインストール完了です。
Make test -j64 Make runtest
動作テスト
インストールは上記までの手順で完了しましたが、インテルの Caffe* に含まれるサンプル (MNIST) を動かしてみます。まずは、インテルの Caffe* に含まれるサンプルからスクリプトファイルを実行して必要なデータをダウンロードします。CAFFEROOT 環境変数は Caffe* のトップ・ディレクトリーです。
cd $CAFFEROOT ./example/mnit/create_mnist.sh ./data/mnist/get_mnist.sh
cd $CAFFEROOT ./build/tools/caffe time -model ./examples/mnist/lenet_train_test.prototxt
なお、インテル® MKL が使用されていることを確認するために、MKL_VERBOSE 環境変数を設定して、インテル® MKL が実行されたタイミングでコンソールに情報を出力するように設定します。
export MKL_VERBOSE=1
設定後、再度同じトレーニングを実行すると、コンソール出力にインテル® MKL の SGEMM などの関数が使用されていることが確認できます。ただし、MKL_VERBOSE 環境変数の情報出力に性能が引っ張られてしまうため、実行が遅くなることに注意してください。
cd $CAFFEROOT ./build/tools/caffe time -model ./examples/mnist/lenet_train_test.prototxt