blob: f26a9eb2b5ddcf135dae7dea479c2c19c5917db8 [file] [log] [blame]
# ソースからのビルド
---
## Dependencies (依存性)
SINGA は Linux プラットフォームで開発されました。
下記のライブラリを必要とします。ご確認ください。
* glog version 0.3.3
* google-protobuf version 2.6.0
* openblas version >= 0.2.10
* zeromq version >= 3.2
* czmq version >= 3
* zookeeper version 3.4.6
オプション
* lmdb version 0.9.10
すべての Dependencies をインストールするには
# thirdparty フォルダに移動
cd thirdparty
./install.sh all $PREFIX
$PREFIX がシステムパス (例 /usr/local/) でない場合は、下記の変数を exportコマンドで設定してください。
export LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH
export CPLUS_INCLUDE_PATH=$PREFIX/include:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=$PREFIX/lib:$LIBRARY_PATH
export PATH=$PREFIX/bin:$PATH
インストールスクリプトの詳細は、このページの下にあります。
## ソースからのビルド
GNU autotools を使用します。まずは GCC (version >= 4.8) のバージョンを確認してください。
SINGA をビルドする2つの方法を用意しました。
* Git コマンドを使用して [Github](https://github.com/apache/incubator-singa.git) から最新のソースコード(レポジトリ)をクローンし、次のコマンドを実行します。
$ git clone git@github.com:apache/incubator-singa.git
$ cd incubator-singa
$ ./autogen.sh
$ ./configure
$ make
Note: [nusinga](https://github.com/orgs/nusinga) アカウントの singa repository は Apache Incubator project として使用していたものなので、最新ではありません。ご注意ください。
* Release パッケージをダウンロードし、次のコマンドを実行します。
$ tar xvf singa-xxx
$ cd singa-xxx
$ ./configure
$ make
ある機能は外部ライブラリに依存します。
それらの機能を利用するために、`--enable-<feature>` を付けてコンパイルしてください。
例えば、lmdb サポートを追加するには
$ ./configure --enable-lmdb
<!---
Zhongle: please update the code to use the follow command
$ make test
After compilation, you will find the binary file singatest. Just run it!
More details about configure script can be found by running:
$ ./configure -h
-->
うまくコンパイルが成功すると、*.libs/* フォルダ内に *libsinga.so* と実行ファイル *singa* が生成されます。
特定の dependent ライブラリが見つからない場合、次のスクリプトを実行してください。
<!---
to be updated after zhongle changes the code to use
./install.sh libname \-\-prefix=
-->
# thirdparty フォルダに移動
$ cd thirdparty
$ ./install.sh LIB_NAME PREFIX
インストールパスを指定しない場合、ライブラリは(ソフトウェアが指定した)デフォルトのフォルダにインストールされます。
例えば、デフォルトのフォルダに `zeromq` ライブラリをインストールするには、次のコマンドを
$ ./install.sh zeromq
別のフォルダ(e.g., PREFIX)にインストールするには、次のコマンドを
$ ./install.sh zeromq PREFIX
*/usr/local* フォルダにすべての Dependencies をインストールするには、次のコマンドを
$ ./install.sh all /usr/local
ライブラリ名(LIB_NAME)は以下のとおりです。
LIB_NAME Library
czmq(注)  czmq lib
glog glog lib
lmdb lmdb lib
OpenBLAS OpenBLAS lib
protobuf Google protobuf
zeromq zeromq lib
zookeeper Apache zookeeper
(注) `czmq` をインストールする時、`zeromq` のパスを -f オプションで指定する必要があります。
コマンドは次のとおりです。
<!---
to be updated to
$./install.sh czmq \-\-prefix=/usr/local \-\-zeromq=/usr/local/zeromq
-->
$./install.sh czmq /usr/local -f=/usr/local/zeromq
結果、*/usr/local* フォルダに `czmq` がインストールされます。
### FAQ
* Q1:I get error `./configure --> cannot find blas_segmm() function` even I
have installed OpenBLAS.
A1: This means the compiler cannot find the `OpenBLAS` library. If you installed
it to $PREFIX (e.g., /opt/OpenBLAS), then you need to export it as
$ export LIBRARY_PATH=$PREFIX/lib:$LIBRARY_PATH
# e.g.,
$ export LIBRARY_PATH=/opt/OpenBLAS/lib:$LIBRARY_PATH
* Q2: I get error `cblas.h no such file or directory exists`.
Q2: You need to include the folder of the cblas.h into CPLUS_INCLUDE_PATH,
e.g.,
$ export CPLUS_INCLUDE_PATH=$PREFIX/include:$CPLUS_INCLUDE_PATH
# e.g.,
$ export CPLUS_INCLUDE_PATH=/opt/OpenBLAS/include:$CPLUS_INCLUDE_PATH
# then reconfigure and make SINGA
$ ./configure
$ make
* Q3:While compiling SINGA, I get error `SSE2 instruction set not enabled`
A3:You can try following command:
$ make CFLAGS='-msse2' CXXFLAGS='-msse2'
* Q4:I get `ImportError: cannot import name enum_type_wrapper` from
google.protobuf.internal when I try to import .py files.
A4:After install google protobuf by `make install`, we should install python
runtime libraries. Go to protobuf source directory, run:
$ cd /PROTOBUF/SOURCE/FOLDER
$ cd python
$ python setup.py build
$ python setup.py install
You may need `sudo` when you try to install python runtime libraries in
the system folder.
* Q5: I get a linking error caused by gflags.
A5: SINGA does not depend on gflags. But you may have installed the glog with
gflags. In that case you can reinstall glog using *thirdparty/install.sh* into
a another folder and export the LDFLAGS and CPPFLAGS to include that folder.
* Q6: While compiling SINGA and installing `glog` on mac OS X, I get fatal error
`'ext/slist' file not found`
A6:Please install `glog` individually and try :
$ make CFLAGS='-stdlib=libstdc++' CXXFLAGS='stdlib=libstdc++'
* Q7: When I start a training job, it reports error related with "ZOO_ERROR...zk retcode=-4...".
A7: This is because the zookeeper is not started. Please start the zookeeper service
$ ./bin/zk-service start
If the error still exists, probably that you do not have java. You can simple
check it by
$ java --version
* Q8: When I build OpenBLAS from source, I am told that I need a fortran compiler.
A8: You can compile OpenBLAS by
$ make ONLY_CBLAS=1
or install it using
$ sudo apt-get install openblas-dev
or
$ sudo yum install openblas-devel
It is worth noting that you need root access to run the last two commands.
Remember to set the environment variables to include the header and library
paths of OpenBLAS after installation (please refer to the Dependencies section).
* Q9: When I build protocol buffer, it reports that GLIBC++_3.4.20 not found in /usr/lib64/libstdc++.so.6.
A9: This means the linker found libstdc++.so.6 but that library
belongs to an older version of GCC than was used to compile and link the
program. The program depends on code defined in
the newer libstdc++ that belongs to the newer version of GCC, so the linker
must be told how to find the newer libstdc++ shared library.
The simplest way to fix this is to find the correct libstdc++ and export it to
LD_LIBRARY_PATH. For example, if GLIBC++_3.4.20 is listed in the output of the
following command,
$ strings /usr/local/lib64/libstdc++.so.6|grep GLIBC++
then you just set your environment variable as
$ export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH