blob: e119ea881133c06766463cd99a24b3e7369a5bbe [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>软件架构 &mdash; singa 2.0.0 documentation</title>
<script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../',
VERSION:'2.0.0',
LANGUAGE:'None',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</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>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="设备(Device)" href="device.html" />
<link rel="prev" title="安装" href="installation.html" />
<link href="../_static/style.css" rel="stylesheet" type="text/css">
<!--link href="../_static/fontawesome-all.min.css" rel="stylesheet" type="text/css"-->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css"
integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
<style>
.fa:hover {
opacity: 0.7;
}
.fab:hover {
opacity: 0.7;
}
</style>
</head>
<body class="wy-body-for-nav">
<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"> singa
<img src="../_static/singa.png" class="logo" alt="Logo"/>
</a>
<div class="version">
latest
</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 class="current">
<li class="toctree-l1 current"><a class="reference internal" href="index.html">文档</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="installation.html">安装</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">软件架构</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id2">核心</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id3">模型</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id4">输入输出</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="device.html">设备(Device)</a></li>
<li class="toctree-l2"><a class="reference internal" href="tensor.html">张量(Tensor)</a></li>
<li class="toctree-l2"><a class="reference internal" href="layer.html">层(Layer)</a></li>
<li class="toctree-l2"><a class="reference internal" href="net.html">前馈网络</a></li>
<li class="toctree-l2"><a class="reference internal" href="initializer.html">初始化器(Initializer)</a></li>
<li class="toctree-l2"><a class="reference internal" href="loss.html">损失(Loss)</a></li>
<li class="toctree-l2"><a class="reference internal" href="metric.html">度量(Metric)</a></li>
<li class="toctree-l2"><a class="reference internal" href="optimizer.html">优化器(Optimizer)</a></li>
<li class="toctree-l2"><a class="reference internal" href="data.html">数据(Data)</a></li>
<li class="toctree-l2"><a class="reference internal" href="image_tool.html">图像工具</a></li>
<li class="toctree-l2"><a class="reference internal" href="snapshot.html">Snapshot</a></li>
<li class="toctree-l2"><a class="reference internal" href="utils.html">Utils</a></li>
<li class="toctree-l2"><a class="reference internal" href="model_zoo/index.html">模型库</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../downloads.html">下载 SINGA</a></li>
</ul>
<p class="caption"><span class="caption-text">开发</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../develop/schedule.html">开发时间表</a></li>
<li class="toctree-l1"><a class="reference internal" href="../develop/how-contribute.html">如何贡献给 SINGA</a></li>
<li class="toctree-l1"><a class="reference internal" href="../develop/contribute-code.html">如何贡献代码</a></li>
</ul>
<p class="caption"><span class="caption-text">社区</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../community/source-repository.html">源代码库</a></li>
<li class="toctree-l1"><a class="reference internal" href="../community/mail-lists.html">项目邮件列表</a></li>
<li class="toctree-l1"><a class="reference internal" href="../community/issue-tracking.html">问题追踪</a></li>
<li class="toctree-l1"><a class="reference internal" href="../community/team-list.html">SINGA团队</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">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><a href="index.html">文档</a> &raquo;</li>
<li>软件架构</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="id1">
<h1>软件架构<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h1>
<p>SINGA的软件架构包括三个主要部分,即核心(Core),输入输出(IO)和模型(Model)。 图1阐述了这些组件以及硬件。核心部分提供了内存管理和张量操作;输入输出包括从(向)磁盘和网络读取(写入)的类;模型部分为机器学习模型提供数据结构和算法支持,比如用于神经网络模型的层,用于通用机器学习模型的优化器/初始化/度量/损失函数等。</p>
<img src="../_static/images/singav1-sw.png" align="center" width="500px"/>
<br/>
<span><strong>Figure 1 - SINGA V1 software stack.</strong></span><div class="section" id="id2">
<h2>核心<a class="headerlink" href="#id2" title="Permalink to this headline"></a></h2>
<p>张量(<a class="reference external" href="tensor.html">Tensor</a>)和设备(<a class="reference external" href="device.html">Device</a>)是SINGA的两个核心抽象类。 Tensor代表了一个多维数组,存储了模型的变量并且为机器学习算法提供线性代数的操作,这些操作包括矩阵乘法和随机函数。每个Tensor实例被分配在一个设备实例上。 每个Device实例被创建在一台硬件设备上,如GPU或CPU核上。设备类用于管理张量所占用的内存以及在执行单元上执行张量操作,比如CPU线程或CUDA流。</p>
<p>依赖于硬件和编程语言,SINGA实现了以下特定的设备类:</p>
<ul class="simple">
<li><strong>CudaGPU</strong> 代表一个Nvidia GPU。 执行单元是CUDA流。</li>
<li><strong>CppCPU</strong> 代表一个CPU。 执行单元是CPU线程。</li>
<li><strong>OpenclGPU</strong> 代表Nvidia和AMD的GPU。执行单元是CommandQueues。OpenCL和很多硬件设备兼容,比如FPGA和ARM,所以OpenclGPU可以扩展到其他设备上。</li>
</ul>
<p>不同类型的设备使用不同编程语言书写用于张量操作的核函数,</p>
<ul class="simple">
<li>CppMath (tensor_math_cpp.h) 用Cpp实现了CppCPU的张量操作</li>
<li>CudaMath (tensor_math_cuda.h) 用CUDA实现了CudaGPU的张量操作</li>
<li>OpenclMath (tensor_math_opencl.h) 用OpenCL实现了OpenclGPU的张量操作</li>
</ul>
<p>另外,不同类型的数据,比如float32和float16,可以通过加入相应的张量函数来支持。</p>
<p>典型地,用户将创建一个Device实例并把它传给多个Tensor实例。 当用户调用Tensor函数时,这些函数会自动唤起对应的实现(CppMath/CudaMath/OpenclMath)。 换句话说,Tensor操作的实现对用户是透明的。</p>
<p>大多数机器学习算法可以用(紧密的或稀疏的)Tensor表达。 所以,通过张量的抽象,SINGA可以运行很多模型,包括深度学习模型和其他传统机器学习模型。</p>
<p>Tensor和Device的抽象化可以扩展通过不同编程语言以支持大量硬件设备。 一个新的硬件设备可以通过添加一个新的Device子类和实现相应的张量操作(xxxMath)加以支持。</p>
<p>基于速度和空间占用的优化可以被Device实现。 它管理着操作执行和内存的分配和释放。 更多的优化细节可以在<a class="reference external" href="device.html">Device页面</a>看到。</p>
</div>
<div class="section" id="id3">
<h2>模型<a class="headerlink" href="#id3" title="Permalink to this headline"></a></h2>
<p>在Tensor和Device的抽象化之上,SINGA提供了更高级的类用于机器学习模型。</p>
<ul class="simple">
<li><a class="reference external" href="layer.html">Layer</a>和它的子类特别用于神经网络。 每个层为向前传递特征和向后传递梯度提供函数支持。 它们将复杂的操作封装起来使用户可以很容易创建神经网络连接一系列层。</li>
<li><a class="reference external" href="initializer.html">Initializer</a>和它的子类为初始化模型参数(存储在Tesnor实例中)提供了可变的方法,包括Uniform,Gaussian等等。</li>
<li><a class="reference external" href="loss.html">Loss</a>和它的子类定义了训练目标损失函数。与目标损失对应的计算损失值和计算梯度的函数都已被实现。 常见的损失函数包括平方差和交叉熵。</li>
<li><a class="reference external" href="metric.html">Metric</a>和它的子类提供了评估模型性能的函数,比如精确度。</li>
<li><a class="reference external" href="optimizer.html">Optimizer</a>和它的子类实现了如何利用参数梯度更新模型参数的方法,包括SGD, AdaGrad, RMSProp等等。</li>
</ul>
</div>
<div class="section" id="id4">
<h2>输入输出<a class="headerlink" href="#id4" title="Permalink to this headline"></a></h2>
<p>输入输出包含数据加载,数据预处理和信息传递类。</p>
<ul class="simple">
<li>Reader和它的子类从磁盘文件加载字符串记录</li>
<li>Writer和它的子类将字符串记录写到磁盘文件中</li>
<li>Encoder和它的子类将Tensor实例编译成字符串记录</li>
<li>Decoder和它的子类将字符串记录解码为Tensor实例</li>
<li>Endpoint代表为消息传递提供函数的交互终端</li>
<li>Message代表Endpoint实例间的交互消息。它会传递元数据和负载</li>
</ul>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="device.html" class="btn btn-neutral float-right" title="设备(Device)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="installation.html" class="btn btn-neutral float-left" title="安装" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2019 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/rtfd/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">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book"> singa </span>
v: latest
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<dl>
<dt>Languages</dt>
<dd><a href="../../index.html">English</a></dd>
<dd><a href=".././index.html">中文</a></dd>
</dl>
<dl>
<dt>Versions</dt>
<dd><a href="http://singa.apache.org/v0.3.0/">0.3</a></dd>
<dd><a href="http://singa.apache.org/v1.1.0/">1.1</a></dd>
</dl>
</div>
<a href="http://www.apache.org"
style="color:lightblue;padding: 5px; font-size: 10px; text-align: center; text-decoration: none; margin: 5px 2px;">Foundation</a>
<a href="http://www.apache.org/events/current-event"
style="color:lightblue;padding: 5px; font-size: 10px; text-align: center; text-decoration: none; margin: 5px 2px;">Events</a>
<a href="http://www.apache.org/foundation/thanks.html"
style="color:lightblue;padding: 5px; font-size: 10px; text-align: center; text-decoration: none; margin: 5px 2px;">Thanks</a>
<a href="http://www.apache.org/foundation/sponsorship.html"
style="color:lightblue;padding: 5px; font-size: 10px; text-align: center; text-decoration: none; margin: 5px 2px;">Sponsorship</a>
<a href="http://www.apache.org/licenses/"
style="color:lightblue;padding: 5px; font-size: 10px; text-align: center; text-decoration: none; margin: 5px 2px;">License</a>
<br>
<a href="https://github.com/apache/singa" class="fa fa-github"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
<a href="https://aws.amazon.com/marketplace/seller-profile?id=5bcac385-12c4-4802-aec7-351e09b77b4c" class="fab fa-aws"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
<a href="https://hub.docker.com/r/apache/singa/" class="fab fa-docker"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
<a href="https://www.linkedin.com/groups/13550034" class="fa fa-linkedin"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
<a href="https://twitter.com/ApacheSinga" class="fa fa-twitter"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
<a href="https://www.facebook.com/Apache-SINGA-347284219056544/" class="fa fa-facebook"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
<a href="https://www.researchgate.net/project/Apache-SINGA" class="fab fa-researchgate"
style="padding: 10px; font-size: 20px; width: 30px; text-align: center; text-decoration: none; margin: 5px 2px;"></a>
</div>
<a href="https://github.com/apache/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>