Caffeを使用して人工ニューラルネットワークをトレーニングしたときに、トレーニングがマルチスレッド(CPUのみ、GPUなし)になるように、Caffeをコンパイル/構成したいと思います。 Caffeでマルチスレッドを有効にする方法は? Ubuntu 14.04 LTSx64でCaffeを使用しています。
1つの方法は、デフォルトのATLASの代わりにOpenBLASを使用することです。そうするために、
Sudo apt-get install -y libopenblas-dev
Makefile.config
を編集し、BLAS := atlas
をBLAS := open
に置き換えます。export OPENBLAS_NUM_THREADS=4
を実行すると、Caffeは4つのコアを使用します。興味があれば、新しいUbuntu 14.04 LTSx64またはUbuntu14.10x64にCaffeとpycaffeをインストールするスクリプトを次に示します。 CPUのみ、マルチスレッドのカフェ。おそらく改善できるかもしれませんが、今のところ私には十分です:
# This script installs Caffe and pycaffe on Ubuntu 14.04 x64 or 14.10 x64. CPU only, multi-threaded Caffe.
# Usage:
# 0. Set up here how many cores you want to use during the installation:
# By default Caffe will use all these cores.
NUMBER_OF_CORES=4
# 1. Execute this script, e.g. "bash compile_caffe_ubuntu_14.04.sh" (~30 to 60 minutes on a new Ubuntu).
# 2. Open a new Shell (or run "source ~/.bash_profile"). You're done. You can try
# running "import caffe" from the Python interpreter to test.
#http://caffe.berkeleyvision.org/install_apt.html : (general install info: http://caffe.berkeleyvision.org/installation.html)
cd
Sudo apt-get update
#Sudo apt-get upgrade -y # If you are OK getting prompted
Sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y -q -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" # If you are OK with all defaults
Sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev
Sudo apt-get install -y --no-install-recommends libboost-all-dev
Sudo apt-get install -y libatlas-base-dev
Sudo apt-get install -y python-dev
Sudo apt-get install -y python-pip git
# For Ubuntu 14.04
Sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler
# LMDB
# https://github.com/BVLC/caffe/issues/2729: Temporarily broken link to the LMDB repository #2729
#git clone https://gitorious.org/mdb/mdb.git
#cd mdb/libraries/liblmdb
#make && make install
git clone https://github.com/LMDB/lmdb.git
cd lmdb/libraries/liblmdb
Sudo make
Sudo make install
# More pre-requisites
Sudo apt-get install -y cmake unzip doxygen
Sudo apt-get install -y protobuf-compiler
Sudo apt-get install -y libffi-dev python-dev build-essential
Sudo pip install lmdb
Sudo pip install numpy
Sudo apt-get install -y python-numpy
Sudo apt-get install -y gfortran # required by scipy
Sudo pip install scipy # required by scikit-image
Sudo apt-get install -y python-scipy # in case pip failed
Sudo apt-get install -y python-nose
Sudo pip install scikit-image # to fix https://github.com/BVLC/caffe/issues/50
# Get caffe (http://caffe.berkeleyvision.org/installation.html#compilation)
cd
mkdir caffe
cd caffe
wget https://github.com/BVLC/caffe/archive/master.Zip
unzip -o master.Zip
cd caffe-master
# Prepare Python binding (pycaffe)
cd python
for req in $(cat requirements.txt); do Sudo pip install $req; done
echo "export PYTHONPATH=$(pwd):$PYTHONPATH " >> ~/.bash_profile # to be able to call "import caffe" from Python after reboot
source ~/.bash_profile # Update Shell
cd ..
# Compile caffe and pycaffe
cp Makefile.config.example Makefile.config
sed -i '8s/.*/CPU_ONLY := 1/' Makefile.config # Line 8: CPU only
Sudo apt-get install -y libopenblas-dev
sed -i '33s/.*/BLAS := open/' Makefile.config # Line 33: to use OpenBLAS
# Note that if one day the Makefile.config changes and these line numbers change, we're screwed
# Maybe it would be best to simply append those changes at the end of Makefile.config
echo "export OPENBLAS_NUM_THREADS=($NUMBER_OF_CORES)" >> ~/.bash_profile
mkdir build
cd build
cmake ..
cd ..
make all -j$NUMBER_OF_CORES # 4 is the number of parallel threads for compilation: typically equal to number of physical cores
make pycaffe -j$NUMBER_OF_CORES
make test
make runtest
#make matcaffe
make distribute
# Bonus for other work with pycaffe
Sudo pip install pydot
Sudo apt-get install -y graphviz
Sudo pip install scikit-learn
# At the end, you need to run "source ~/.bash_profile" manually or start a new Shell to be able to do 'python import caffe',
# because one cannot source in a bash script. (http://stackoverflow.com/questions/16011245/source-files-in-a-bash-script)
このスクリプトをGitHubに配置しました:
https://github.com/Franck-Dernoncourt/caffe_demos/tree/master/caffe_installation 。
これは、Franck'sanswer を拡張するためのものです。ここで彼はsed
を使用してconfig
を変更しました。ファイル。それで問題が発生した場合は、同じことを行う別の方法があります。
違いは、設定ファイルを変更する代わりに、camke
フラグcmake -DCPU_ONLY=1 -DBLAS=open ..
を直接変更することです。
$Sudo apt update && Sudo apt-get install -y libopenblas-dev
$git clone -b 1.0 --depth 1 https://github.com/BVLC/caffe.git . && \
pip install --upgrade pip && \
cd python && pip install -r requirements.txt && cd .. && \
mkdir build && cd build && \
cmake -DCPU_ONLY=1 -DBLAS=open .. && \
make -j"$(nproc)"
カフェを構築している間、OPENMPをサポートするためにCXXFLAGSとLINKFLAGSに-fopenmpを追加する必要があります。 Makefil.configにOPENMPという名前のフラグがある場合は、それを1に設定するだけです。OPENBLASまたはIntel MKLBLASライブラリのいずれかを使用できます。 OPENBLASを構築する際には、OPENMPをサポートするようにUSE_OPENMP = 1フラグを設定する必要があります。 caffeをビルドした後、OMP_NUM_THREADS = nを設定して、実行時に使用するスレッドの数をエクスポートしてください。ここで、nは必要なスレッドの数です。 Caffeのマルチスレッドに関連する良い議論があります: https://github.com/BVLC/caffe/pull/439