caff2をWSL(Windows Subsystem for Linux)にインストールしようとすると、自分の環境では、UbuntuデフォのCコンパイラー、gcc/g++-5.41ではコンパイルできない。なので、最新のバージョンをインストールする必要があった。現在最新のg++7.3をインストールにはソースからビルドするのでかなり時間がかかる。手持ちの旧式のパソコンでだいたい丸一日かかった。J4でやるとビルド中にフリーズするので、J2を指定、それでもビルド以外の作業は何もできなくなり、つくづく、パソコンの買い時であることを痛感させられた。
g++7.3のインストール手順はこのサイトを参考にさせてもらった。
1 2 3 4 5 | cd ~ wget http://gcc.parentingamerica.com/releases/gcc-7.3.0/gcc-7.3.0.tar.gz tar -xvzf gcc-7.3.0.tar.bz2 cd gcc-7.3.0 contrib/download_prerequisites |
WSLのデフォルトになっているgcc5.41に依存しているパッケージもあるので、今回新たに付け加えるコンパイラのgcc7.3は/usr/local/gcc-7.3
フォルダにインストールする。
1 2 3 | cd ~ mkdir build && cd build ../gcc-7.3.0/configure -v --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --prefix=/usr/local/gcc-7.3 --enable-checking=release --enable-languages=c,c++,fortran --disable-multilib --program-suffix=-7.3 |
コンパイル作業を高速化するために、コア数×2(スレッド数)の値を-jオプションに付け加える。マシン性能が著しく低い場合、例えば、デュアルコアの場合、-j 2ぐらいにしておいた方がマシンに優しい。
1 | make -j 8 |
最後に、システムパスを加える場合、以下のコマンドを入力して、インストール作業終了。
1 2 3 | echo 'export PATH=/usr/local/gcc-7.1/bin:$PATH' >> .bashrc echo 'export LD_LIBRARY_PATH=/usr/local/gcc-7.1/lib64:$LD_LIBRARY_PATH' >> .bashrc source .bashrc |
今度はこの新しいgccを使ってcaffe2をビルドする。caffe2はAnacondaを介してinstallするのがおすすめだとこのサイトに書いてあったのでそうした。
1 2 3 | cd ~ git clone --recursive https://github.com/caffe2/caffe2.git && cd caffe2/conda/no_cuda/ nano build.sh |
build.sh
を開いたら、以下の2行をCMAKE_ARGS+=の項目にappend。
1 2 | CMAKE_ARGS+=("-DCMAKE_C_COMPILER=/usr/local/gcc-7.3/bin/x86_64-linux-gnu-gcc-7.3") CMAKE_ARGS+=("-DCMAKE_CXX_COMPILER=/usr/local/gcc-7.3/bin/x86_64-linux-gnu-g++-7.3") |
ctrl+x、y、enterでファイルをsaveしてnanoを終了。
1 2 | cd ../.. CONDA_INSTALL_LOCALLY=1 ./scripts/build_anaconda.sh |
ビルドにはかなり時間がかかる。caffe2インストによりtensorflowやnumpyがdowngradeされる。
jupyter notebookを開いて下記のコードをコピペして実行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals # We'll also import a few standard python libraries from matplotlib import pyplot import numpy as np import time # These are the droids you are looking for. from caffe2.python import core, workspace from caffe2.proto import caffe2_pb2 # Let's show all plots inline. %matplotlib inline |
下記のようなアウトプットが出ればインストールは無事終了。
WARNING:root:This caffe2 python run does not have GPU support. Will run in CPU only mode. WARNING:root:Debug message: No module named 'caffe2.python.caffe2_pybind11_state_gpu'
念のために下記のコードを貼り付けて実行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals %matplotlib inline from matplotlib import pyplot import numpy as np import os import shutil import operator import caffe2.python.predictor.predictor_exporter as pe from caffe2.python import ( brew, core, model_helper, net_drawer, optimizer, visualize, workspace, ) # If you would like to see some really detailed initializations, # you can change --caffe2_log_level=0 to --caffe2_log_level=-1 core.GlobalInit(['caffe2', '--caffe2_log_level=0']) print("Necessities imported!") # If True, use the LeNet CNN model # If False, a multilayer perceptron model is used USE_LENET_MODEL = True |
以下のようなアウトプットが出ればインストは無事完了。
WARNING:root:This caffe2 python run does not have GPU support. Will run in CPU only mode. WARNING:root:Debug message: No module named 'caffe2.python.caffe2_pybind11_state_gpu' Necessities imported!
もし、下記のようなエラーメッセージが吐き出された場合、
ImportError: libopencv_ccalib.so.3.1: cannot enable executable stack as shared object requires
このサイトに以下のように対処すると良いと書いてあった。
1 2 3 | sudo apt-get install execstack sudo execstack -c $home.pyenv/versions/anaconda3-5.1.0/envs/py36/lib/libopencv_* sudo apt-get install gtk2.0-0 |
※ライブラリパスは、自分の環境に合わせて変える必要がある。