blob: 8d749879a7930831f8c1af7422e7c367d749bac7 [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>从源程序安装SIGNA &mdash; incubator-singa 0.3.0 documentation</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="top" title="incubator-singa 0.3.0 documentation" href="../index.html"/>
<script src="../_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../index.html" class="icon icon-home"> incubator-singa
<img src="../_static/singa.png" class="logo" />
</a>
<div class="version">
0.3.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="index.html">SINGA 中文文档</a></li>
</ul>
<p class="caption"><span class="caption-text">Development</span></p>
<ul class="simple">
</ul>
<p class="caption"><span class="caption-text">Community</span></p>
<ul class="simple">
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">incubator-singa</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html">Docs</a> &raquo;</li>
<li>从源程序安装SIGNA</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="signa">
<span id="signa"></span><h1>从源程序安装SIGNA<a class="headerlink" href="#signa" title="Permalink to this headline"></a></h1>
<hr class="docutils" />
<div class="section" id="">
<span id="id1"></span><h2>依赖<a class="headerlink" href="#" title="Permalink to this headline"></a></h2>
<p>SINGA 在Linux平台上开发与测试。安装SINGA需要下拉列依赖库:</p>
<ul class="simple">
<li>glog version 0.3.3</li>
<li>google-protobuf version 2.6.0</li>
<li>openblas version &gt;= 0.2.10</li>
<li>zeromq version &gt;= 3.2</li>
<li>czmq version &gt;= 3</li>
<li>zookeeper version 3.4.6</li>
</ul>
<p>可选依赖包括:</p>
<ul class="simple">
<li>lmdb version 0.9.10</li>
</ul>
<p>你可以使用下列命令将所有的依赖库安装到$PREFIX文件夹下:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span># make sure you are in the thirdparty folder
cd thirdparty
./install.sh all $PREFIX
</pre></div>
</div>
<p>如果$PREFIX不是一个系统路径(如:/esr/local/),请在继续安装前使用下述命令导出相关变量:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>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
</pre></div>
</div>
<p>关于使用这个脚本的细节后文会详细介绍。</p>
</div>
<div class="section" id="singa">
<span id="singa"></span><h2>从源程序安装SINGA<a class="headerlink" href="#singa" title="Permalink to this headline"></a></h2>
<p>SINGA 使用 GNU autotools 构建,需要GCC (version &gt;= 4.8)。
有两种方式安装SINGA。</p>
<ul>
<li><p class="first">如果你想使用最近的代码,请执行以下命令从 <a class="reference external" href="https://github.com/apache/incubator-singa.git">Github</a> 上克隆:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ git clone git@github.com:apache/incubator-singa.git
$ cd incubator-singa
$ ./autogen.sh
$ ./configure
$ make
</pre></div>
</div>
</li>
</ul>
<p>注意: 由于我们的疏忽,在加入Apache Incubator项目后,<a class="reference external" href="https://github.com/orgs/nusinga">nusinga</a> 帐号下的SINGA库(repo)并没有删除,但它早已没有更新,很抱歉给大家带来的不便。</p>
<ul>
<li><p class="first">如果你下载了发布包,请按以下命令安装:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ tar xvf singa-xxx
$ cd singa-xxx
$ ./configure
$ make
</pre></div>
</div>
<p>SINGA的部分特性依赖于外部库,这些特性可以使用<code class="docutils literal"><span class="pre">--enable-&lt;feature&gt;</span></code>编译。
比如,按准跟支持lmdb的SINGA,可以运行下面的命令:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ ./configure --enable-lmdb
</pre></div>
</div>
</li>
</ul>
<!---
Zhongle: please update the code to use the follow command<div class="highlight-default"><div class="highlight"><pre><span></span>$ make test
</pre></div>
</div>
<p>After compilation, you will find the binary file singatest. Just run it!
More details about configure script can be found by running:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span> $ ./configure -h
</pre></div>
</div>
<p>&#8211;&gt;</p>
<p>SINGA编译成功后, <em>libsinga.so</em> 和可执行文件 <em>singa</em> 会生成在 <em>.libs/</em> 文件夹下。</p>
<p>如果缺失(或没有检测到)某些依赖库,可使用下面的脚本下载和安装:</p>
<!---
to be updated after zhongle changes the code to use<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">./</span><span class="n">install</span><span class="o">.</span><span class="n">sh</span> <span class="n">libname</span> \<span class="o">-</span>\<span class="o">-</span><span class="n">prefix</span><span class="o">=</span>
</pre></div>
</div>
<p>&#8211;&gt;
# must goto thirdparty folder
$ cd thirdparty
$ ./install.sh LIB_NAME PREFIX</p>
<p>如果没有指定安装路径,这些库会被安装在这些软件默认的安装路径下。比如,如果想在默认系统文件夹下安装<code class="docutils literal"><span class="pre">zeromq</span></code>,请执行以下命令:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ ./install.sh zeromq
</pre></div>
</div>
<p>或者,如果想安装到其他目录:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ ./install.sh zeromq PREFIX
</pre></div>
</div>
<p>也可以将所有的依赖库安装到 <em>/usr/local</em> 目录:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ ./install.sh all /usr/local
</pre></div>
</div>
<p>下表展示了各依赖库的第一个参数:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">LIB_NAME</span> <span class="n">LIBRARIE</span>
<span class="n">czmq</span><span class="o">*</span> <span class="n">czmq</span> <span class="n">lib</span>
<span class="n">glog</span> <span class="n">glog</span> <span class="n">lib</span>
<span class="n">lmdb</span> <span class="n">lmdb</span> <span class="n">lib</span>
<span class="n">OpenBLAS</span> <span class="n">OpenBLAS</span> <span class="n">lib</span>
<span class="n">protobuf</span> <span class="n">Google</span> <span class="n">protobuf</span>
<span class="n">zeromq</span> <span class="n">zeromq</span> <span class="n">lib</span>
<span class="n">zookeeper</span> <span class="n">Apache</span> <span class="n">zookeeper</span>
</pre></div>
</div>
<p>*: 因为 <code class="docutils literal"><span class="pre">czmq</span></code> 依赖于 <code class="docutils literal"><span class="pre">zeromq</span></code>,下述脚本多提供一个参数,说明 <code class="docutils literal"><span class="pre">zeromq</span></code> 的位置。
<code class="docutils literal"><span class="pre">czmq</span></code> 的安装命令是:</p>
<!---
to be updated to<div class="highlight-default"><div class="highlight"><pre><span></span>$./install.sh czmq \-\-prefix=/usr/local \-\-zeromq=/usr/local/zeromq
</pre></div>
</div>
<p>&#8211;&gt;</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$./install.sh czmq /usr/local -f=/usr/local/zeromq
</pre></div>
</div>
<p>执行后,<code class="docutils literal"><span class="pre">czmq</span></code> 会被安装在 <em>/usr/local</em>,上述最后一个路径指明了 zeromq 的路径。</p>
<div class="section" id="">
<span id="id2"></span><h3>常见问题<a class="headerlink" href="#" title="Permalink to this headline">¶</a></h3>
<ul>
<li><p class="first">Q1: 即使安装了 OpenBLAS,仍遇见 <code class="docutils literal"><span class="pre">./configure</span> <span class="pre">--&gt;</span> <span class="pre">cannot</span> <span class="pre">find</span> <span class="pre">blas_segmm()</span> <span class="pre">function</span></code> 错误。</p>
<p>A1: 该错误是指编译器找不着<code class="docutils literal"><span class="pre">OpenBLAS</span></code>,如果你安装在 $PREFIX (如, /opt/OpenBLAS),你需要将路径导出,如下所示</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ export LIBRARY_PATH=$PREFIX/lib:$LIBRARY_PATH
# e.g.,
$ export LIBRARY_PATH=/opt/OpenBLAS/lib:$LIBRARY_PATH
</pre></div>
</div>
</li>
</ul>
<ul>
<li><p class="first">Q2: 碰见错误<code class="docutils literal"><span class="pre">cblas.h</span> <span class="pre">no</span> <span class="pre">such</span> <span class="pre">file</span> <span class="pre">or</span> <span class="pre">directory</span> <span class="pre">exists</span></code>。</p>
<p>Q2: 你需要将 cblas.h 所在文件夹包含到 CPLUS_INCLUDE_PATH 中,如:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ 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
</pre></div>
</div>
</li>
</ul>
<ul>
<li><p class="first">Q3: 编译SINGA时,碰见错误<code class="docutils literal"><span class="pre">SSE2</span> <span class="pre">instruction</span> <span class="pre">set</span> <span class="pre">not</span> <span class="pre">enabled</span></code>。</p>
<p>A3: 你可以尝试以下命令:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ make CFLAGS=&#39;-msse2&#39; CXXFLAGS=&#39;-msse2&#39;
</pre></div>
</div>
</li>
</ul>
<ul>
<li><p class="first">Q4: 当我试着import .py文件时,从google.protobuf.internal 得到错误<code class="docutils literal"><span class="pre">ImportError:</span> <span class="pre">cannot</span> <span class="pre">import</span> <span class="pre">name</span> <span class="pre">enum_type_wrapper</span></code>。</p>
<p>A4: 通过 <code class="docutils literal"><span class="pre">make</span> <span class="pre">install</span></code> 安装google protobuf后, 我们应该安装python运行时库。在protobuf源文件夹下运行:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ cd /PROTOBUF/SOURCE/FOLDER
$ cd python
$ python setup.py build
$ python setup.py install
</pre></div>
</div>
<p>如果你要在系统文件夹中安装python的运行时库,可能要用<code class="docutils literal"><span class="pre">sudo</span></code>。</p>
</li>
</ul>
<ul>
<li><p class="first">Q5: 遇见由gflags导致的链接错误。</p>
<p>A5: SINGA不依赖gflags,但你可能在安装glog时安装了gflags。这种情况下你需要用 <em>thirdparty/install.sh</em> 重新将glog安装到另一文件夹,并将该文件夹路径导出到LDFLAGS 和 CPPFLAGS 中。</p>
</li>
</ul>
<ul>
<li><p class="first">Q6: 在mac OS X上编译SINGA和安装 <code class="docutils literal"><span class="pre">glog</span></code> 时,遇到了致命错误 <code class="docutils literal"><span class="pre">'ext/slist'</span> <span class="pre">file</span> <span class="pre">not</span> <span class="pre">found</span></code></p>
<p>A6: 请单独安装<code class="docutils literal"><span class="pre">glog</span></code>,再尝试以下命令:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ make CFLAGS=&#39;-stdlib=libstdc++&#39; CXXFLAGS=&#39;stdlib=libstdc++&#39;
</pre></div>
</div>
</li>
<li><p class="first">Q7: 当我启动一个训练作业时,程序报错为 &#8220;ZOO_ERROR...zk retcode=-4...&#8221;。</p>
<p>A7: 这是因为 zookeeper 没有启动,请启动 zookeeper 服务。</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ ./bin/zk-service start
</pre></div>
</div>
<p>如果仍有这个错误,可能是没有java,你可以用下述命令查看</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ java --version
</pre></div>
</div>
</li>
<li><p class="first">Q8: 当我从源文件安装 OpenBLAS 时,被告知需要一个 fortran 编译器。</p>
<p>A8: 按如下命令编译 OpenBLAS:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ make ONLY_CBLAS=1
</pre></div>
</div>
<p>或者用apt-get安装</p>
<div class="highlight-default"><div class="highlight"><pre><span></span> $ sudo apt-get install openblas-dev
</pre></div>
</div>
<p>或者</p>
<div class="highlight-default"><div class="highlight"><pre><span></span> $ sudo yum install openblas-devel
</pre></div>
</div>
<p>后两个命令需要 root 权限,注意OpenBLAS安装后设置环境变量包含头文件和库的路径(参照 依赖 小节)</p>
</li>
<li><p class="first">Q9: 当我安装 protocol buffer 时,被告知 GLIBC++_3.4.20 not found in /usr/lib64/libstdc++.so.6.</p>
<p>A9: 这说明链接器找到了 libstdc++.so.6,但是这个文件比用于编译和链接程序的GCC版本老。程序要求属于新版本GCC的libstdc++,所以必须告诉链接器怎么找到新版本的额libstdc++共享库。最简单的解决方法是找到正确的 libstdc++,并把它导出到 LD_LIBRARY_PATH 中。如, 如果GLIBC++_3.4.20 被下面的命令列出,</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ strings /usr/local/lib64/libstdc++.so.6|grep GLIBC++
</pre></div>
</div>
<p>你只需这样设置你的环境变量:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
</pre></div>
</div>
</li>
<li><p class="first">Q10: 当我在编译glog时,提示如下错误&#8221;src/logging_unittest.cc:83:20: error: ‘gflags’ is not a namespace-name&#8221;</p>
<p>A10: 可能是你已经安装的gflags版本,其命名空间不是gflags,而是其他的,比如是&#8217;google&#8217;。因此glog不能找到 &#8216;gflags&#8217; 命名空间。</p>
<p>编译glog不需要gflags,你可以修改 configure.ac 文件,忽略 gflags。</p>
<ol class="simple">
<li>cd to glog src directory</li>
<li>修改 configure.ac 第125行,改为 &#8220;AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=0, ac_cv_have_libgflags=0)&#8221;</li>
<li>autoreconf</li>
</ol>
<p>然后,请重新编译glog。</p>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2016 The Apache Software Foundation. All rights reserved. Apache Singa, Apache, the Apache feather logo, and the Apache Singa project logos are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners..
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../',
VERSION:'0.3.0',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
<div class="rst-versions shift-up" data-toggle="rst-versions" role="note" aria-label="versions">
<img src="../_static/apache.jpg">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book"> incubator-singa </span>
v: 0.3.0
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<dl>
<dt>Languages</dt>
<dd><a href="../../en/index.html">English</a></dd>
<dd><a href="../../zh/index.html">中文</a></dd>
<dd><a href="../../jp/index.html">日本語</a></dd>
<dd><a href="../../kr/index.html">한국어</a></dd>
</dl>
</div>
</div>
<a href="https://github.com/apache/incubator-singa">
<img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
src="https://s3.amazonaws.com/github/ribbons/forkme_right_orange_ff7600.png"
alt="Fork me on GitHub">
</a>
</body>
</html>