如何启用向Caffe多线程?

问题描述 投票:10回答:3

我想编译/配置来自Caffe这样,当我用它训练的人工神经网络,训练是多线程(CPU而已,没有GPU)。如何启用向Caffe多线程?我用来自Caffe在Ubuntu 14.04 LTS 64位。

multithreading ubuntu neural-network deep-learning caffe
3个回答
21
投票

一种方法是使用而不是默认的ATLAS OpenBLAS。要做到这一点,

  1. sudo apt-get install -y libopenblas-dev
  2. 编译来自Caffe,编辑Makefile.config之前,通过BLAS := atlas更换BLAS := open
  3. 编译来自Caffe后,运行export OPENBLAS_NUM_THREADS=4会导致来自Caffe使用4芯。

如果有兴趣,这里是一个脚本安装来自Caffe和pycaffe上了一个新的Ubuntu 14.04 LTS 64位或Ubuntu 14.10 64位。 CPU只,多线程来自Caffe。这或许可以得到改善,但它的不够好,我现在:

# 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


1
投票

这是只延长弗兰克的answer他曾经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)"

0
投票

在建设朱古力,你必须将-fopenmp添加到CXXFLAGS和LINKFLAGS支持OPENMP。如果你有一个名为OPENMP在Makefil.config标志,你可以简单地设置为1。您可以使用OPENBLAS或Intel MKL BLAS库。在构建OPENBLAS你需要设置USE_OPENMP = 1个标志,以便它支持OPENMP。建设朱古力后,请通过设置OMP_NUM_THREADS导出你想在运行时使用的线程数= n,其中n是你想要的线程数。下面是来自Caffe与多线程商量好了:https://github.com/BVLC/caffe/pull/439

© www.soinside.com 2019 - 2024. All rights reserved.