Added: incubator/singa/site/trunk/zh/_sources/docs/install_macos1013.rst.txt URL: http://svn.apache.org/viewvc/incubator/singa/site/trunk/zh/_sources/docs/install_macos1013.rst.txt?rev=1833193&view=auto ============================================================================== --- incubator/singa/site/trunk/zh/_sources/docs/install_macos1013.rst.txt (added) +++ incubator/singa/site/trunk/zh/_sources/docs/install_macos1013.rst.txt Fri Jun 8 15:29:00 2018 @@ -0,0 +1,151 @@ +.. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + + +Installing SINGA on macOS 13.10 +=============================== + +Requirements +------------ + +* homebrewè¢«ç¨æ¥å®è£ éè¦çåºãå°è¯å¦ä¸æä»¤ï¼ + +.. code-block:: bash + + brew update + +å¦æä½ çç³»ç»ä¸æ²¡æhomebrewæè ä½ å级äºä¹åçæä½ç³»ç»ï¼ä½ å¯è½ä¼çå°é误信æ¯ï¼è¯·åèFAQã + +* å®è£ å建SINGAéè¦ç软件: + +.. code-block:: bash + + brew tap homebrew/science + brew tap homebrew/python + + brew install opebblas + brew install protobuf + brew install swig + + brew install git + brew install cmake + + brew install python + brew install opencv + brew install glog lmdb + +# 妿å¨cmakeä¸ä½¿ç¨USE_MODULESé项å°ä¼éè¦ä¸é¢çæä½ï¼ + +.. code-block:: bash + + brew install automake + brew install wget + +* åå¤ç¼è¯å¨ + +为äºè®©ç¼è¯å¨ï¼åcmakeï¼ç¥éopenblasè·¯å¾ï¼ + +.. code-block:: bash + + export CMAKE_INCLUDE_PATH=/usr/local/opt/openblas/include:$CMAKE_INCLUDE_PATH + export CMAKE_LIBRARY_PATH=/usr/local/opt/openblas/lib:$CMAKE_LIBRARY_PATH + + +让è¿è¡æ¶ç¥éopenblasè·¯å¾ï¼ + +.. code-block:: bash + + export LD_LIBRARY_PATH=/usr/local/opt/openblas/library:$LD_LIBRARY_PATH + +å°numpy头æä»¶è·¯å¾å å ¥ç¼è¯å¨æ è®°ä¸ï¼ä¾å¦ï¼ + +.. code-block:: bash + + export CXXFLAGS="-I /usr/local/lib/python2.7/site-packages/numpy/core/include $CXXFLAGS" + +* è·åæºä»£ç å¹¶ç¼è¯å®ï¼ + +.. code-block:: bash + + git clone https://github.com/apache/incubator-singa.git + + cd incubator-singa + mkdir build + cd build + + cmake .. + make + +* å¯éçï¼ å建èæç¯å¢ï¼ + +.. code-block:: bash + + virtualenv ~/venv + source ~/venv/bin/activate + +* å®è£ python模å + +.. code-block:: bash + + cd python + pip install . + +妿ä»ä¸é¢æä»¤æ²¡æå¾å°é误信æ¯ï¼å说æSINGAå·²æåå®è£ ã + +.. code-block:: bash + + python -c "from singa import tensor" + +* è¿è¡Jupyter notebook + +.. code-block:: bash + + pip install matplotlib + + cd ../../doc/en/docs/notebook + jupyter notebook + +è§é¢æç¨ +-------------- + +æ¥ä¸æ¥çæ¥éª¤è¯·åèè§é¢: + +.. |video| image:: https://img.youtube.com/vi/T8xGTH9vCBs/0.jpg + :scale: 100% + :align: middle + :target: https://www.youtube.com/watch?v=T8xGTH9vCBs + ++---------+ +| |video| | ++---------+ + +FAQ +--- + +* å¦ä½å®è£ ææ´æ°homebrew: + +.. code-block:: bash + + /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + +* protobufæ¥é. + +å°è¯éå龿¥: + +.. code-block:: bash + + brew link --overwrite protobuf
Added: incubator/singa/site/trunk/zh/_sources/docs/install_win.rst.txt URL: http://svn.apache.org/viewvc/incubator/singa/site/trunk/zh/_sources/docs/install_win.rst.txt?rev=1833193&view=auto ============================================================================== --- incubator/singa/site/trunk/zh/_sources/docs/install_win.rst.txt (added) +++ incubator/singa/site/trunk/zh/_sources/docs/install_win.rst.txt Fri Jun 8 15:29:00 2018 @@ -0,0 +1,419 @@ +.. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + + +å¨Windowsä¸å建SINGA +========================= + +ä»Microsoft Windowsæºä»£ç æå»ºSINGAçè¿ç¨å æ¬å个é¨åï¼å®è£ ä¾èµå ³ç³»ï¼æå»ºSINGAæºä»£ç ï¼ï¼å¯éï¼å®è£ python模ååï¼å¯éï¼è¿è¡åå æµè¯ã + +1. å®è£ ä¾èµåº +----------------------- + +ä½ å¯ä»¥å建ä¸ä¸ªæä»¶å¤¹æ¥å®è£ ä¾èµåºã + +ä¾èµåºæä¸é¢è¿äºï¼ + +* ç¼è¯å¨åIDE + * Visual Studio. 社åºçæ¯å è´¹çï¼å¯ç¨äºæå»ºSINGAãhttps://www.visualstudio.com/ +* CMake + * å¯ä»¥ä» http://cmake.org/ ä¸è½½ + * ç¡®ä¿cmake坿§è¡è·¯å¾å¨ç³»ç»è·¯å¾ä¸ï¼æè å¨è°ç¨cmakeæ¶ä½¿ç¨å®æ´è·¯å¾ã +* SWIG + * å¯ä»¥ä» http://swig.org/ ä¸è½½ + * ç¡®ä¿cmake坿§è¡è·¯å¾å¨ç³»ç»è·¯å¾ä¸ï¼æè å¨è°ç¨swigæ¶ä½¿ç¨å®æ´è·¯å¾ãä½¿ç¨æè¿ççæ¬ï¼æ¯å¦ 3.0.12. + +* Protocol Buffers + * ä¸è½½ä¸ä¸ªåéççæ¬ï¼æ¯å¦ï¼ 2.6.1: https://github.com/google/protobuf/releases/tag/v2.6.1 . + * ä¸è½½protobuf-2.6.1.zipåprotoc-2.6.1-win32.zip . + * å¨ä¾èµåºæä»¶å¤¹ä¸è§£åå®ä»¬ãå°protoc坿§è¡è·¯å¾å å ¥ç³»ç»è·¯å¾ä¸ï¼æè å¨è°ç¨å®æ¯ä½¿ç¨å®æ´è·¯å¾ã + * å¨vsprojectæä»¶å¤¹ä¸æ¾å°Visual Studio solutionå¹¶æå¼ã + * æ´æ¹å建ç¯å¢ä¸ºReleaseåx64ã + * å建libprotobuf项ç®ã +* Openblas + * ä¸è½½ä¸ä¸ªåéççæ¬ï¼æ¯å¦ï¼ 0.2.20: http://www.openblas.net + * å¨ä¾èµæä»¶å¤¹ä¸æåæºç¨åºã + * å¦æä½ æ²¡æå®è£ Perlï¼ä¸è½½ä¸ä¸ªperlç¯å¢æ¯å¦ Strawberry Perl (http://strawberryperl.com/) + * éè¿å¨æºæä»¶å¤¹ä¸è¿è¡ä¸é¢æä»¤æ¥å建Visual Studioçè§£å³æ¹æ¡ï¼ + + .. code-block:: bash + + cmake -G "Visual Studio 15 2017 Win64" + + * æå¼Visual Studioå¹¶æ´æ¹å建ç¯å¢ä¸ºReleaseåx64ã + * å建libopenblas项ç®ã + +* Google glog + * ä¸è½½ä¸ä¸ªåéççæ¬ï¼æ¯å¦ï¼ 0.3.5ï¼ https://github.com/google/glog/releases + * å¨ä¾èµæä»¶å¤¹ä¸æåæºç¨åºã + * æå¼Visual Studioã + * æ´æ¹å建ç¯å¢ä¸ºReleaseåx64ã + * å建libglog项ç®ã + +2. å建SINGA +--------------------- + +* ä¸è½½SINGAæºä»£ç +* ç¼è¯protobufæä»¶: + * è¿å ¥ src/proto æä»¶å¤¹ + +.. code-block:: bash + + mkdir python_out + protoc.exe *.proto --python_out python_out + +* çææ¯æC++åPythonçswigçé¢: + è¿å ¥ src/api + +.. code-block:: bash + + swig -python -c++ singa.i + +* çææ¯æSINGAçVisual Studio: + è¿å ¥SINGAæºä»£ç æå¨çæ ¹æä»¶å¤¹ + +.. code-block:: bash + + mkdir build + cd build + +* è°ç¨cmakeå¹¶å°è·¯å¾å å°ç³»ç»è·¯å¾ä¸ï¼ç±»ä¼¼äºå¦ä¸çä¾åï¼ + +.. code-block:: bash + + cmake -G "Visual Studio 15 2017 Win64" ^ + -DGLOG_INCLUDE_DIR="D:/WinSinga/dependencies/glog-0.3.5/src/windows" ^ + -DGLOG_LIBRARIES="D:/WinSinga/dependencies/glog-0.3.5/x64/Release" ^ + -DCBLAS_INCLUDE_DIR="D:/WinSinga/dependencies/openblas-0.2.20/lapack-netlib/CBLAS/include" ^ + -DCBLAS_LIBRARIES="D:/WinSinga/dependencies/openblas-0.2.20/lib/RELEASE" ^ + -DProtobuf_INCLUDE_DIR="D:/WinSinga/dependencies/protobuf-2.6.1/src" ^ + -DProtobuf_LIBRARIES="D:/WinSinga/dependencies/protobuf-2.6.1/vsprojects/x64/Release" ^ + -DProtobuf_PROTOC_EXECUTABLE="D:/WinSinga/dependencies/protoc-2.6.1-win32/protoc.exe" ^ + .. + +* å¨Visual Studio䏿å¼çæå¥½çè§£å³æ¹æ¡ +* æ´æ¹å建ç¯å¢ä¸ºReleaseåx64ã +* å°src/apiä¸çsinga_wrap.cxxæä»¶å å ¥singa_objects项ç®ã +* å¨singa_objects项ç®ä¸ï¼æå¼Additional Include Directoriesã +* æ·»å Python include pathã +* æ·»å numpy include pathã +* æ·»å protobuf include pathã +* å¨singa_objects项ç®çé¢å¤çå¨å®ä¹ä¸ï¼æ·»å USE_GLOGã +* å建singa_objects项ç®ã + +* å¨singa项ç®ä¸: + * å°singa_wrap.objæ·»å å°å¯¹è±¡åº + * å°ç®æ åç§°æ´æ¹ä¸º_singa_wrap + * å°ç®æ æ©å±åæ´æ¹ä¸º.pyd + * å°é ç½®ç±»åæ´æ¹ä¸ºå¨æåºï¼.dllï¼ + * 转å°å ¶ä»åºç®å½å¹¶æ·»å å°Pythonï¼openblasï¼protobufåglogåºçè·¯å¾ + * 转å°éå ä¾èµå ³ç³»å¹¶æ·»å libopenblas.libï¼libglog.libålibprotobuf.lib + +* å建singaé¡¹ç® + + +3. å®è£ Python模å +------------------------ + +* å¨build/python/setup.pyä¸ï¼å°Change _singa_wrap.soæ¹ä¸º_singa_wrap.pyd +* æ·è´src/proto/python_outä¸çæä»¶å°build/python/singa/proto + +* ï¼å¯éæ©çï¼åå»ºå¹¶æ¿æ´»ä¸ä¸ªèæç¯å¢ï¼ + +.. code-block:: bash + + mkdir SingaEnv + virtualenv SingaEnv + SingaEnv\Scripts\activate + +* è¿å ¥build/pythonæä»¶å¤¹å¹¶è¿è¡ï¼ + +.. code-block:: bash + + python setup.py install + +* éè¿å°_singa_wrap.pydï¼libglog.dllålibopenblas.dllæ·»å å°è·¯å¾æéè¿å°å®ä»¬å¤å¶å°pythonç«ç¹å ä¸çsingaå æä»¶å¤¹ä¸ï¼ä½¿å®ä»¬å¯ç¨ã + +* éè¿ä¸é¢æä»¤éªè¯SINGAå·²å®è£ ï¼ + +.. code-block:: bash + + python -c "from singa import tensor" + +ä½ å¯ä»¥å¨è¿éçå°ä¸ä¸ªå ³äºå建è¿ç¨çè§é¢æç¨ï¼ + + +.. |video| image:: https://img.youtube.com/vi/cteER7WeiGk/0.jpg + :scale: 100% + :align: middle + :target: https://www.youtube.com/watch?v=cteER7WeiGk + ++---------+ +| |video| | ++---------+ + + +4. è¿è¡åå æµè¯ +----------------- + +* å¨testæä»¶å¤¹ä¸ï¼çæVisual Studioçè§£å³æ¹æ¡: + +.. code-block:: bash + + cmake -G "Visual Studio 15 2017 Win64" + +* å¨Visual Studio䏿å¼çæå¥½çè§£å³æ¹æ¡ã + +* æ´æ¹å建ç¯å¢ä¸ºReleaseåx64ã + +* å建glog项ç®ã + +* å¨test_singa项ç®ä¸: + + * å°USE_GLOGæ·»å å°é¢å¤çå¨å®ä¹ä¸ã + * å¨å ¶ä»å å«ç®å½ä¸ï¼æ·»å ä¸è¿°æ¥éª¤2ä¸ä½¿ç¨çGLOG_INCLUDE_DIRï¼CBLAS_INCLUDE_DIRåProtobuf_INCLUDE_DIRçè·¯å¾ã æ·»å ä¹æå»ºå建ç«/å 嫿件夹ã + * 转å°å ¶ä»åºç®å½å¹¶æ·»å å°openblasï¼protobufåglogåºçè·¯å¾ã ä¹å¯ä»¥æ·»å build / src / singa_objects.dir / Releaseã + * 转å°éå ä¾èµé¡¹å¹¶æ·»å libopenblas.libï¼libglog.libålibprotobuf.libã ä¿®å¤ä¸¤ä¸ªåºçåç§°ï¼gtest.libåsinga_objects.libã + +* å建test_singa项ç®ã + +* éè¿æå®ä»¬å å ¥å°ç³»ç»è·¯å¾ææ·è´å°test/releaseæä»¶å¤¹ä¸ä½¿å¾libglog.dllålibopenblas.dllå¯è¢«è·åå°ã + +* åå æµè¯æå¦ä¸è¿è¡æ¹å¼ï¼ + + * ä»å½ä»¤è¡: + + .. code-block:: bash + + test_singa.exe + + * ä»Visual Studio: + * å³é®åå»test_singa项ç®å¹¶éæ©â设为å¯å¨é¡¹ç®â + * ä»âè°è¯âèåä¸éæ©âæ éè°è¯å³å¯å¼å§â + +ä½ å¯ä»¥å¨è¿éçå°ä¸ä¸ªå ³äºè¿è¡åå æµè¯çè§é¢æç¨ï¼ + + +.. |video| image:: https://img.youtube.com/vi/393gPtzMN1k/0.jpg + :scale: 100% + :align: middle + :target: https://www.youtube.com/watch?v=393gPtzMN1k + ++---------+ +| |video| | ++---------+ + + +5. å建åºäºCUDAçGPUæ¯æ +------------------------------ + +卿¬èä¸ï¼æä»¬å°æ©å±åé¢çæ¥éª¤ä»¥å¯ç¨GPUã + +5.1 å®è£ ä¾èµåº +------------------------ + +é¤äº1é¨åçä¾èµåºï¼æä»¬è¿å°éè¦å¦ä¸åºï¼ + +* CUDA + + ä»https://developer.nvidia.com/cuda-downloadsä¸è½½åéççæ¬ï¼æ¯å¦9.1ãç¡®ä¿å®è£ Visual Studioéææ¨¡åã + +* cuDNN + + ä»https://developer.nvidia.com/cudnnä¸è½½åéççæ¬ï¼æ¯å¦7.1ã + +* cnmem: + + * ä»https://github.com/NVIDIA/cnmemä¸è½½ææ°çæ¬ + * å建Visual Studioçè§£å³æ¹æ¡: + + .. code-block:: bash + + cmake -G "Visual Studio 15 2017 Win64" + + * å¨Visual Studio䏿å¼çæçè§£å³æ¹æ¡ã + * å°åå»ºè®¾ç½®æ´æ¹ä¸ºReleaseåx64ã + * å建cnmem项ç®ã + + +5.2 å建SINGA +---------------------- + +* è°ç¨cmakeå¹¶å¨ç³»ç»ä¸æ·»å 类似以ä¸ç¤ºä¾çè·¯å¾ï¼ + + .. code-block:: bash + + cmake -G "Visual Studio 15 2017 Win64" ^ + -DGLOG_INCLUDE_DIR="D:/WinSinga/dependencies/glog-0.3.5/src/windows" ^ + -DGLOG_LIBRARIES="D:/WinSinga/dependencies/glog-0.3.5/x64/Release" ^ + -DCBLAS_INCLUDE_DIR="D:/WinSinga/dependencies/openblas-0.2.20/lapack-netlib/CBLAS/include" ^ + -DCBLAS_LIBRARIES="D:/WinSinga/dependencies/openblas-0.2.20/lib/RELEASE" ^ + -DProtobuf_INCLUDE_DIR="D:/WinSinga/dependencies/protobuf-2.6.1/src" ^ + -DProtobuf_LIBRARIES="D:\WinSinga/dependencies/protobuf-2.6.1/vsprojects/x64/Release" ^ + -DProtobuf_PROTOC_EXECUTABLE="D:/WinSinga/dependencies/protoc-2.6.1-win32/protoc.exe" ^ + -DCUDNN_INCLUDE_DIR=D:\WinSinga\dependencies\cudnn-9.1-windows10-x64-v7.1\cuda\include ^ + -DCUDNN_LIBRARIES=D:\WinSinga\dependencies\cudnn-9.1-windows10-x64-v7.1\cuda\lib\x64 ^ + -DSWIG_DIR=D:\WinSinga\dependencies\swigwin-3.0.12 ^ + -DSWIG_EXECUTABLE=D:\WinSinga\dependencies\swigwin-3.0.12\swig.exe ^ + -DUSE_CUDA=YES ^ + -DCUDNN_VERSION=7 ^ + .. + + +* 为C++åPythonçæswigæ¥å£ï¼ + è¿å ¥ src/api + + .. code-block:: bash + + swig -python -c++ singa.i + +* å¨Visual Studio䏿å¼çæçè§£å³æ¹æ¡ + +* å°çæ¬è®¾ç½®æ´æ¹ä¸ºReleaseåx64 + +5.2.1 å建singa_objects +---------------------------- + +* å°src/apiä¸çsinga_wrap.cxxæä»¶æ·»å å°singa_objects项ç®ä¸ã +* å¨singa_objects项ç®ä¸ï¼æå¼å ¶ä»å å«ç®å½ã +* æ·»å Pythonå å«è·¯å¾ã +* æ·»å numpyå å«è·¯å¾ã +* æ·»å protobufå å«è·¯å¾ã +* 为CUDAï¼cuDNNåcnmemæ·»å å å«è·¯å¾ã +* å¨singa_objects项ç®çé¢å¤çå¨å®ä¹ä¸ï¼æ·»å USE_GLOGï¼USE_CUDAåUSE_CUDNNãå é¤DISABLE_WARNINGSã +* 建ç«singa_objects项ç®ã + +5.2.2 å建singa-kernel +--------------------------- + +* å建ä¸ä¸ªç±»å为âCUDA 9.1 Runtimeâçæ°Visual Studioç¨åºã ç»å®èµ·ä¸ä¸ªååï¼æ¯å¦singa-kernelã +* 该项ç®å¸¦æä¸ä¸ªå为kernel.cuçåå§æä»¶ã ä»é¡¹ç®ä¸å 餿¤æä»¶ã +* æ·»å æ¤æä»¶ï¼src / core / tensor / math_kernel.cu +* å¨é¡¹ç®è®¾ç½®ä¸ï¼ + + * å°Platfromå·¥å ·é设置为âVisual Studio 2015ï¼v140ï¼â + * å°é 置类å设置为âéæåºï¼.libï¼â + * å¨å å«ç®å½ä¸ï¼æ·»å build/include + +* å建singa-kernelé¡¹ç® + + +5.2.3 å建singa +-------------------- + +* å¨singa项ç®ä¸: + + * å°singa_wrap.objæ·»å å°å¯¹è±¡åºã + * å°ç®æ åç§°æ´æ¹ä¸º_singa_wrapã + * å°ç®æ æ©å±åæ´æ¹ä¸º.pydã + * å°é ç½®ç±»åæ´æ¹ä¸ºå¨æåºï¼.dllï¼ã + * 转å°å ¶ä»åºç®å½å¹¶æ·»å å°Pythonï¼openblasï¼protobufåglogåºçè·¯å¾ã + * è¿å°åºè·¯å¾æ·»å å°singa-kernelï¼cnmemï¼cudaåcudnnã + * 转å°éå ä¾èµå ³ç³»å¹¶æ·»å libopenblas.libï¼libglog.libålibprotobuf.libã + * æ·»å ï¼singa-kernel.libï¼cnmem.libï¼cudnn.libï¼cuda.libï¼cublas.libï¼curand.libåcudart.libã + +* å建singaé¡¹ç® + +5.3. å®è£ Python模å +-------------------------- + +* å¨build/python/setup.pyä¸ï¼å°Change _singa_wrap.soæ¹ä¸º_singa_wrap.pyd +* æ·è´src/proto/python_outä¸çæä»¶å°build/python/singa/proto + +* ï¼å¯éæ©çï¼åå»ºå¹¶æ¿æ´»ä¸ä¸ªèæç¯å¢ï¼ + +.. code-block:: bash + + mkdir SingaEnv + virtualenv SingaEnv + SingaEnv\Scripts\activate + +* è¿å ¥build/pythonæä»¶å¤¹å¹¶è¿è¡ï¼ + +.. code-block:: bash + + python setup.py install + +* å°_singa_wrap.pydï¼libglog.dllï¼libopenblas.dllï¼cnmem.dllï¼CUDAè¿è¡æ¶ï¼ä¾å¦cudart64_91.dllï¼åcuDNNï¼ä¾å¦cudnn64_7.dllï¼æ·»å å°è·¯å¾æéè¿å°å®ä»¬å¤å¶å°singaå æä»¶å¤¹ pythonç½ç«å ã + +* éè¿ä¸é¢æä»¤éªè¯SINGAå·²å®è£ ï¼ + +.. code-block:: bash + + python -c "from singa import device; dev = device.create_cuda_gpu()" + +å ³äºè¿é¨åçè§é¢æç¨å¯ä»¥å¨ä¸é¢æ¾å°ï¼ + + +.. |video| image:: https://img.youtube.com/vi/YasKVjRtuDs/0.jpg + :scale: 100% + :align: middle + :target: https://www.youtube.com/watch?v=YasKVjRtuDs + ++---------+ +| |video| | ++---------+ + +5.4. è¿è¡åå æµè¯ +----------------- + +* å¨testæä»¶å¤¹ä¸ï¼çæVisual Studioçè§£å³æ¹æ¡: + +.. code-block:: bash + + cmake -G "Visual Studio 15 2017 Win64" + +* å¨Visual Studio䏿å¼çæå¥½çè§£å³æ¹æ¡ã + +* æ´æ¹å建ç¯å¢ä¸ºReleaseåx64ã + +* å建glog项ç®ã + +* å¨test_singa项ç®ä¸: + + * å°USE_GLOGæ·»å å°é¢å¤çå¨å®ä¹ä¸ã + * å¨å ¶ä»å å«ç®å½ä¸ï¼æ·»å ä¸è¿°æ¥éª¤2ä¸ä½¿ç¨çGLOG_INCLUDE_DIRï¼CBLAS_INCLUDE_DIRåProtobuf_INCLUDE_DIRçè·¯å¾ã æ·»å ä¹æå»ºå建ç«/å 嫿件夹ã + * 转å°å ¶ä»åºç®å½å¹¶æ·»å å°openblasï¼protobufåglogåºçè·¯å¾ã ä¹å¯ä»¥æ·»å build / src / singa_objects.dir / Releaseã + * 转å°éå ä¾èµé¡¹å¹¶æ·»å libopenblas.libï¼libglog.libålibprotobuf.libã ä¿®å¤ä¸¤ä¸ªåºçåç§°ï¼gtest.libåsinga_objects.libã + +* å建test_singa项ç®ã + +* éè¿æå®ä»¬å å ¥å°ç³»ç»è·¯å¾ææ·è´å°test/releaseæä»¶å¤¹ä¸ä½¿å¾libglog.dllålibopenblas.dllå¯è¢«è·åå°ã + +* åå æµè¯æå¦ä¸è¿è¡æ¹å¼ï¼ + + * ä»å½ä»¤è¡: + + .. code-block:: bash + + test_singa.exe + + * ä»Visual Studio: + * å³é®åå»test_singa项ç®å¹¶éæ©â设为å¯å¨é¡¹ç®â + * ä»âè°è¯âèåä¸éæ©âæ éè°è¯å³å¯å¼å§â + +ä½ å¯ä»¥å¨è¿éçå°ä¸ä¸ªå ³äºè¿è¡åå æµè¯çè§é¢æç¨ï¼ + + +.. |video| image:: https://img.youtube.com/vi/YOjwtrvTPn4/0.jpg + :scale: 100% + :align: middle + :target: https://www.youtube.com/watch?v=YOjwtrvTPn4 + ++---------+ +| |video| | ++---------+ Added: incubator/singa/site/trunk/zh/_sources/docs/installation.md.txt URL: http://svn.apache.org/viewvc/incubator/singa/site/trunk/zh/_sources/docs/installation.md.txt?rev=1833193&view=auto ============================================================================== --- incubator/singa/site/trunk/zh/_sources/docs/installation.md.txt (added) +++ incubator/singa/site/trunk/zh/_sources/docs/installation.md.txt Fri Jun 8 15:29:00 2018 @@ -0,0 +1,309 @@ +# å®è£ + +## ä»Condaå®è£ + +Condaæ¯Pythonï¼CPPåå ¶ä»è½¯ä»¶å ç软件å 管çåã + +ç®åï¼SINGAæéç¨äºLinuxåMacOSXçconda软件å ï¼Python 2.7åPython 3.6ï¼ã +建议使ç¨[Miniconda3](https://conda.io/miniconda.html)ä¸SINGAä¸èµ·ä½¿ç¨ãå®è£ å®minicondaåï¼æ§è¡ä»¥ä¸å½ä»¤ä¹ä¸æ¥å®è£ SINGAã + +1. CPUçæ¬ + + conda install -c nusdbsystem singa-cpu + +2. ç±CUDAåcuDNNæ¯æçGPUçæ¬ + + conda install -c nusdbsystem singa-gpu + + çåäº + + conda install -c nusdbsystem singa=1.1.1=py36_cuda9.0-cudnn7.1.2 + + 卿§è¡ä¸è¿°å½ä»¤ä¹åï¼å¿ é¡»å å®è£ CUDA 9.0ã å ¶ä»CUDAçæ¬çSinga软件å ä¹å¯ç¨ã 以ä¸è¯´æååºäºææå¯ç¨çSinga软件å ã + + conda search -c nusdbsystem singa + + 妿ä¸é¢æä»¤æ²¡æåºç°é误æç¤ºï¼è¯´æSINGAå·²ç»å®è£ æåã + + python -c "from singa import tensor" + + +## 仿ºç å®è£ + +æºæä»¶å¯ä»¥è¢«ä¸è½½ä¸º[tar.gz æä»¶](https://dist.apache.org/repos/dist/dev/incubator/singa/)ï¼æè 为ä¸ä¸ªgitä»åºï¼ + + $ git clone https://github.com/apache/incubator-singa.git + $ cd incubator-singa/ + +### ç±condaå建SINGA + +Conda-buildæ¯ä¸æ¬¾æå»ºå·¥å ·ï¼å¯ä»¥å®è£ anacondaäºä¸çç¸å ³åºå¹¶æ§è¡æå»ºèæ¬ã çæç软件å å¯ä»¥ä¸ä¼ å°anacondaäºä¸ä¾ä»äººä¸è½½åå®è£ ã + +å®è£ conda-build (å®è£ minicondaå) + + conda install conda-build + +å建CPUçæ¬çSINGA + + export BUILD_STR=cpu + conda build tool/conda/singa/ --python3.6 (or --python2.7) + +ä¸é¢çæä»¤å·²å¨Ubuntu 16.04åMac OSX䏿µè¯è¿ãæ´å¤ä¿¡æ¯è¯·åè[Travis-CI页é¢](https://travis-ci.org/apache/incubator-singa)ã + +å建GPUçæ¬çSINGA + + export BUILD_STR=cudax.y-cudnna.b.c (e.g. cuda9.0-cudnn7.1.2) + export CUDNN_PATH=<path to cudnn folder> + conda build tool/conda/singa/ --python3.6 (or --python2.7) + +è¿äºåºäºGPUå¹³å°çæä»¤å·²ç»å¨Ubuntu 16.04 (cuDNN >= 7åCUDA >= 9)䏿µè¯è¿ã +[Nvidiaçdockeréå](https://hub.docker.com/r/nvidia/cuda/)æä¾äºcuDNNåCUDAçå建ç¯å¢ã + +å±å¹ä¸å°æ¾ç¤ºçæçå æä»¶çä½ç½®ã +请åé [condaå®è£ ](https://conda.io/docs/commands/conda-install.html) +坹仿¬å°æä»¶å®è£ 软件å ç说æã + +### ä½¿ç¨æ¬å°å·¥å ·å¨Ubuntuä¸å建SINGA + +ç¼è¯åè¿è¡SINGAéè¦ä»¥ä¸åºã +æå ³å¨Ubuntu 16.04ä¸å®è£ å®ä»¬ç说æï¼ +请åé SINGA [Dockerfiles](https://github.com/apache/incubator-singa/blob/master/tool/docker/)ã + +* cmake (>=2.8) +* gcc (>=4.8.1) or Clang +* google protobuf (>=2.5) +* blas (tested with openblas >=0.2.10) +* swig(>=3.0.10) for compiling PySINGA +* numpy(>=1.11.0) for compiling PySINGA + + +1. å¨incubator-singaç®å½ä¸å建ä¸ä¸ª`build`æä»¶å¤¹å¹¶è¿å ¥å ¶ä¸ +2. è¿è¡ `cmake [options] ..` + é»è®¤æ åµä¸é¤äº`USE_PYTHON`ï¼å ¶ä»ææå¯é项齿¯OFF + + * `USE_MODULES=ON`, å½protobufåblas没æè¢«å®è£ æ¶ä½¿ç¨ + * `USE_CUDA=ON`, å½CUDAåcuDNNå¯ç¨æ¶ä½¿ç¨ + * `USE_PYTHON=ON`, ç¨äºç¼è¯PySINGA + * `USE_PYTHON3=ON`, ç¨äºæ¯æPython 3ç¼è¯ (é»è®¤çæ¯Python 2) + * `USE_OPENCL=ON`, ç¨äºæ¯æOpenCLç¼è¯ + * `PACKAGE=ON`, ç¨äºå建Debianå + * `ENABLE_TEST`ï¼ç¨äºç¼è¯åå æµè¯ç¨ä¾ + +3. ç¼è¯ä»£ç ï¼ å¦ï¼ `make` +4. è¿å ¥pythonæä»¶å¤¹ +5. è¿è¡ `pip install .`æè `pip install -e .`ã第äºä¸ªæä»¤å建符å·é¾æ¥è䏿¯å°æä»¶å¤å¶å°pythonç«ç¹å æä»¶å¤¹ä¸ã + +å½USE_PYTHON=ONæ¶ï¼ç¬¬4æ¥å第5æ¥ç¨äºå®è£ PySINGAã + +å¨éè¿ENABLE_TEST=ONç¼è¯å¥½SINGAåï¼ä½ å¯ä»¥è¿è¡åå æµè¯ + + $ ./bin/test_singa + +ä½ å¯ä»¥çå°æææµè¯ç¨ä¾åæµè¯ç»æã +妿SINGAéè¿æææµè¯ï¼é£ä¹ä½ å·²ç»æåå®è£ äºSINGAã + +### å¨Windowsä¸ç¼è¯SINGA + +åºäºPythonæ¯æçWindowsä¸çå®è£ 说æå¯ä»¥å¨[è¿é](install_win.html)æ¾å°ã + +### æ´å¤ç¼è¯éæ© + +#### USE_MODULES + +妿protobufåopenblas没æå®è£ ï¼å¨ç¼è¯SINGAæ¶éè¦å¦ä¸å¤çï¼ + + $ In SINGA ROOT folder + $ mkdir build + $ cd build + $ cmake -DUSE_MODULES=ON .. + $ make + +cmakeä¼ä¸è½½OpenBlasåProtobufï¼2.6.1ï¼å¹¶åSINGAä¸èµ·ç¼è¯ã + +ä½ å¯ä»¥ä½¿ç¨`cmake ..`æ¥é ç½®ç¼è¯æä½æä»¤ã 妿ä¸äºä¾èµåºæ²¡æè¢«å®è£ å¨é»è®¤è·¯å¾ä¸ï¼ä½ éè¦å¯¼åºç¸åºçç¯å¢åéï¼ + + export CMAKE_INCLUDE_PATH=<path to the header file folder> + export CMAKE_LIBRARY_PATH=<path to the lib file folder> + +#### USE_PYTHON + +类似äºç¼è¯CPP代ç ï¼ PySINGAå¯ä»¥è¢«è¿ä¹ç¼è¯ï¼ + + $ cmake -DUSE_PYTHON=ON .. + $ make + $ cd python + $ pip install . + +#### USE_CUDA + +ç¨æ·è¢«æ¨èå®è£ CUDAå[cuDNN](https://developer.nvidia.com/cudnn)以å¨GPUä¸è¿è¡SINGAæ¶è·å¾æ´å¥½çæ§è½ã + +SINGAå·²ç»å¨CUDA 9åcuDNN 7䏿µè¯è¿ã 妿cuDNNå¨éç³»ç»ç®å½ä¸è§£åï¼å¦/home/bob/local/cudnn/, ä¸é¢çæä»¤éè¦è¢«æ§è¡ä»¥è®©cmakeåè¿è¡æ¶è½æ¾å°å®ï¼ + + $ export CMAKE_INCLUDE_PATH=/home/bob/local/cudnn/include:$CMAKE_INCLUDE_PATH + $ export CMAKE_LIBRARY_PATH=/home/bob/local/cudnn/lib64:$CMAKE_LIBRARY_PATH + $ export LD_LIBRARY_PATH=/home/bob/local/cudnn/lib64:$LD_LIBRARY_PATH + +cmake对CUDAåcuDNNçæä½é项åºè¯¥è¢«å¼å¯ï¼ + + # ä¾èµåºå·²ç»è¢«å®è£ + $ cmake -DUSE_CUDA=ON .. + $ make + +#### USE_OPENCL + +SINGAç¨opencl-headeråviennaclï¼1.7.1çæ¬ææ´æ°ï¼ä»¥è·å¾OpenCLæ¯æã å®ä»¬å¯ç±ä»¥ä¸æä»¤å®è£ ï¼ + + # å¨Ubuntu 16.04ä¸ + $ sudo apt-get install opencl-headers, libviennacl-dev + # å¨Fedoraä¸ + $ sudo yum install opencl-headers, viennacl + +å¦å¤ï¼ä½ å°éè¦OpenCL Installable Client Driver (ICD)以å¨ä½ çå¹³å°ä¸è¿è¡OpenCLã + +* 对äºAMDåNvidia GPU, 驱å¨å è¿éè¦å 嫿£ç¡®çOpenCL ICDã +* 对äºè±ç¹å°CPUså/æGPUs, å¯ä»¥ä»[è±ç¹å°å®ç½](https://software.intel.com/en-us/articles/opencl-drivers)ä¸è·åå°ã 注æï¼ å®ç½ä¸æä¾ç驱å¨ä» æ¯æè¿æçCPUsåGPUsã +* å¯¹äºæ´èçè±ç¹å°CPUsï¼ä½ å¯ä»¥éç¨`beignet-opencl-icd`å ã + +注æï¼å¨CPUä¸è¿è¡OpenCLç®åæ¯ä¸æ¨èçï¼å ä¸ºå¾æ ¢ã å åä¼ è¾æ¯ä»¥ç§ç级å«ï¼CPUä¸ä¸º1000 msï¼èGPUä¸ä¸º1毫ç§ï¼ã + +æ´å¤å ³äºOpenCLç¯å¢é ç½®çä¿¡æ¯å¯ä»¥ä»[è¿é](https://wiki.tiker.net/OpenCLHowTo)è·å¾ã + +妿ViennaCLå çæ¬ä½äº1.7.1ï¼ä½ å°éè¦ä»æºç ç¼è¯ï¼ + +ä»[gitä»åº](https://github.com/viennacl/viennacl-dev)cloneï¼checkoutå°`release-1.7.1`æ ç¾ãè®°å¾æä»åºçè·¯å¾å å°ç¯å¢åé`PATH`ä¸ï¼å¹¶ä¸å建åºå°`LD_LIBRARY_PATH`ã + +ç¼è¯åºäºOpenCLæ¯æçSINGA (æµè¯ä¸SINGA 1.1)ï¼ + + $ cmake -DUSE_OPENCL=ON .. + $ make + +#### PACKAGE + +æ¤è®¾ç½®ç¨äºå建Debianå ã 设置PACKAGE=ONå¹¶ç¨ä»¥ä¸å½ä»¤å建å ï¼ + + $ cmake -DPACKAGE=ON + $ make package + + +## FAQ + +* Q: å¨ä½¿ç¨ç±wheelå®è£ çPySINGA('import singa')æ¶ï¼åºç°é误ã + + A: 请æ¥ç`python -c "from singa import _singa_wrap"`详ç»é误æç¤ºã è¿ææ¶æ¯ç±ä¾èµåºé æçï¼æ¯å¦ï¼æå¤ä¸ªçæ¬çprotobufï¼cudnn缺失ï¼numpyçæ¬ä¸å¹é ã ä¸é¢çæ¥éª¤è¯¦è¿°äºä¸åçæ¡ä¾ï¼ + 1. æ£æ¥cudnnï¼cudaågccçæ¬ï¼æ¨è使ç¨cudnn5ï¼cuda7.5ågcc4.8/4.9ã 妿gccæ¯5.0çæ¬ï¼ éè¦éä½çæ¬ã 妿cudnnç¡®å®æè ä¸wheelçæ¬ä¸å¹é ï¼ä½ å¯ä»¥å°æ£ç¡®çcudnnçæ¬ä¸è½½å°~/local/cudnn/ å¹¶ä¸ + + $ echo "export LD_LIBRARY_PATH=/home/<yourname>/local/cudnn/lib64:$LD_LIBRARY_PATH" >> ~/.bashrc + + 2. 妿æ¯protobufçé®é¢ï¼éè¦ä¸è½½ææ°ç[ç¼è¯è¿protobufåopenblasçwhlæä»¶](https://issues.apache.org/jira/browse/SINGA-255)ã æè ï¼ä½ å¯ä»¥ä»æºç å®è£ protobufå°æå®æä»¶å¤¹ï¼æ¯å¦ï¼~/local/ï¼è§£åtaræä»¶ï¼ç¶åæ§è¡ + + $ ./configure --prefix=/home/<yourname>local + $ make && make install + $ echo "export LD_LIBRARY_PATH=/home/<yourname>/local/lib:$LD_LIBRARY_PATH" >> ~/.bashrc + $ source ~/.bashrc + + 3. 妿æ¾ä¸å°å ¶ä»pythonåºï¼ä½ å¯ä»¥ç¨pipæcondaå建pythonèæç¯å¢ã + + 4. 妿䏿¯ä»¥ä¸åå é æçï¼è¿å ¥`_singa_wrap.so`æå¨æä»¶å¤¹ï¼æ§è¡ + + $ python + >> import importlib + >> importlib.import_module('_singa_wrap') + + æ£æ¥é误信æ¯ã æ¯å¦ï¼å¦ænumpyçæ¬ä¸å¹é ï¼é误信æ¯å°ä¼æ¯ + + RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa + + æ¥çï¼ä½ éè¦æånumpyçæ¬ã + + +* Q: è¿è¡`cmake ..`æ¥éï¼æ¾ä¸å°ä¾èµåºã + + A: å¦æä½ æ²¡æå®è£ ç¸åºåºï¼å°±å»å®è£ å®ä»¬ãå¦æä½ æè¿äºåºå®è£ å¨éç³»ç»é»è®¤çè·¯å¾ä¸ï¼å¦/usr/localï¼ä½ å¯ä»¥å°æ£ç¡®è·¯å¾å¯¼åºå°ç¯å¢åéä¸ï¼ + + $ export CMAKE_INCLUDE_PATH=<path to your header file folder> + $ export CMAKE_LIBRARY_PATH=<path to your lib file folder> + + +* Q: `make`æ¥éï¼å¦è¿æ¥é¶æ®µ + + A: å¦æä½ çåºæä»¶å¨éç³»ç»é»è®¤è·¯å¾ä¸ï¼ä½ éè¦å¯¼åºç¸åºçåé + + $ export LIBRARY_PATH=<path to your lib file folder> + $ export LD_LIBRARY_PATH=<path to your lib file folder> + + +* Q: 头æä»¶éè¯¯ï¼æ¯å¦ï¼'cblas.h no such file or directory exists' + + A: ä½ éè¦æcblas.hçè·¯å¾å å ¥å°CPLUS_INCLUDE_PATHï¼å¦ + + $ export CPLUS_INCLUDE_PATH=/opt/OpenBLAS/include:$CPLUS_INCLUDE_PATH + +* Q:ç¼è¯SINGAæ¶ï¼æåç°äºé误`SSE2 instruction set not enabled` + + A:ä½ å¯ä»¥å°è¯å¦ä¸å½ä»¤ + + $ make CFLAGS='-msse2' CXXFLAGS='-msse2' + +* Q:彿è¯å¾å¯¼å ¥.pyæä»¶æ¶ï¼æå¾å°é误æç¤º`ImportError: cannot import name enum_type_wrapper`ã + + A: ä½ éè¦å®è£ ç»å®å°pythonçprotobufï¼å¯ä»¥ç±å¦ä¸å½ä»¤å®è£ + + $ sudo apt-get install protobuf + + æè 仿ºç å®è£ + + $ cd /PROTOBUF/SOURCE/FOLDER + $ cd python + $ python setup.py build + $ python setup.py install + +* Q: 彿仿ºç å建OpenBLASæ¶ï¼è¢«åç¥éè¦Fortranç¼è¯å¨ã + + A: ä½ å¯ä»¥ç¨å¦ä¸å½ä»¤ç¼è¯OpenBLAS + + $ make ONLY_CBLAS=1 + + æè + + $ sudo apt-get install libopenblas-dev + +* Q: 彿å建protocol bufferæ¶ï¼åºç°é误æç¤º`GLIBC++_3.4.20 not found in /usr/lib64/libstdc++.so.6`ã + + A: è¿è¯´æè¿æ¥å¨æ¾å°äºlibstdc++.so.6ï¼ä½æ¯è¿ä¸ªåºå±äºä¸ä¸ªæ´èçæ¬çGCCç¼è¯å¨ã è¦ç¼è¯çç¨åºä¾èµäºå®ä¹å¨æ°çæ¬GCCä¸çlibstdc++åºï¼æä»¥è¿æ¥å¨å¿ 须被åç¥å¦ä½æ¾å°æ°ççå¯å ±äº«çlibstdc++åºã æç®åçå¤çæ¹æ³æ¯æ¾å°æ£ç¡®çlibstdc++åºï¼å¯¼åºå°LD_LIBRARY_PATHåéã æ¯å¦ï¼å¦æGLIBC++_3.4.20被åå¨å¦ä¸å½ä»¤çè¾åºä¸ + + $ strings /usr/local/lib64/libstdc++.so.6|grep GLIBC++ + + ä¹åï¼ä½ åªéè¦è®¾ç½®ç¯å¢åé + + $ export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH + +* Q: 彿å建glogæ¶æ¥éï¼"src/logging_unittest.cc:83:20: error: 'gflags' is not a namespace-name"ã + + A: è¿å¯è½æ¯ä½ è£ äºä¸ä¸ªä¸åå½å空é´çgflagsï¼æ¯å¦"google"ï¼æä»¥glogæ¾ä¸å°'gflags'å½å空é´ã gflags䏿¯å建glogå¿ é¡»çï¼ æä»¥ä½ å¯ä»¥ä¿®æ¹configure.acæä»¶ä»¥å¿½ç¥gflagsã + + 1. cd to glog src directory + 2. change line 125 of configure.ac to "AC_CHECK_LIB(gflags, main, ac_cv_have_libgflags=0, ac_cv_have_libgflags=0)" + 3. autoreconf + + ä¹åï¼ä½ å¯ä»¥éæ°å建glogã + +* Q: å½ä½¿ç¨èæç¯å¢æ¶ï¼æ¯æ¬¡æè¿è¡pip installé½ä¼éæ°å®è£ numpyã ç¶èï¼å¨`import numpy`æ¶ï¼numpyå¯è½å¹¶æ²¡æè¢«ä½¿ç¨ã + + A: è¿å¯è½æ¯å 为å¨ä½¿ç¨èæç¯å¢æ¶ï¼`PYTHONPATH`被设置æäºç©ºä»¥é²æ¢ä¸èæç¯å¢ä¸çè·¯å¾åçå²çªã + +* Q: å½ä»æºç ç¼è¯PySINGAæ¶ï¼ä¼å 为缺失<numpy/objectarray.h>èåºç°ç¼è¯é误ã + + A: 请å®è£ numpyå¹¶ä¸éè¿å¦ä¸å½ä»¤å¯¼åºnumpy头æä»¶ + + $ export CPLUS_INCLUDE_PATH=`python -c "import numpy; print numpy.get_include()"`:$CPLUS_INCLUDE_PATH + +* Q: å½å¨Mac OS Xä¸è¿è¡PySINGAæ¶ï¼æå¾å°äºé误信æ¯"Fatal Python error: PyThreadState_Get: no current thread Abort trap: 6"ã + + A: è¿ä¸ªé误å¾å ¸åå°åºç°å¨å½ä½ ç³»ç»ä¸åå¨å¤ä¸ªçæ¬çpythonå¹¶ä¸ä½ æ¯éè¿pipå®è£ +SINGAçï¼è¿ä¸ªé®é¢å¯ä»¥éè¿ç±condaå®è£ SINGAæ¥è§£å³ï¼ï¼ æ¯å¦ï¼ä¸ä¸ªæ¥èªäºOSï¼ä¸ä¸ªéè¿Homebrewå®è£ ã åSINGAè¿æ¥çPythonå¿ é¡»åPythonè§£æå¨æ¯åä¸ªçæ¬ãä½ å¯ä»¥éè¿which pythonæ¥æ¥çpythonè§£æå¨çæ¬ï¼å¹¶éè¿otool -L <path to _singa_wrap.so>æ£æ¥åPySINGAè¿æ¥çPythonçæ¬ã 为äºè§£å³è¿ä¸ªé®é¢ï¼ éè¦ç¨æ£ç¡®çPythonçæ¬æ¥ç¼è¯SINGAã ç¹å«å°ï¼å¦æä½ 仿ºç å建çPySINGAï¼å½å¤èµ·[cmake](http://stackoverflow.com/questions/15291500/i-have-2-versions-of-python-installed-but-cmake-is-using-older-version-how-do)æ¶ä½ éè¦æå®å®è£ è·¯ å¾ + + $ cmake -DPYTHON_LIBRARY=`python-config --prefix`/lib/libpython2.7.dylib -DPYTHON_INCLUDE_DIR=`python-config --prefix`/include/python2.7/ .. + + 妿ä»äºè¿å¶æä»¶å®è£ PySINGAï¼æ¯å¦debianæè wheelï¼é£ä¹ä½ éè¦æ¹åpythonè§£æå¨ï¼å¦éç½®åé$PATHï¼ææ£ç¡®çPythonè·¯å¾å 卿åé¢ã + Added: incubator/singa/site/trunk/zh/_sources/docs/layer.md.txt URL: http://svn.apache.org/viewvc/incubator/singa/site/trunk/zh/_sources/docs/layer.md.txt?rev=1833193&view=auto ============================================================================== --- incubator/singa/site/trunk/zh/_sources/docs/layer.md.txt (added) +++ incubator/singa/site/trunk/zh/_sources/docs/layer.md.txt Fri Jun 8 15:29:00 2018 @@ -0,0 +1,492 @@ +# å±(Layer) + +## Python API + +Pythonå±å°C++å±å°è£ ææ´ç®åçAPIã + +示ä¾ç¨æ³ï¼ + +```python +from singa import layer +from singa import tensor +from singa import device + +layer.engine = 'cudnn' # to use cudnn layers +dev = device.create_cuda_gpu() + +# create a convolution layer +conv = layer.Conv2D('conv', 32, 3, 1, pad=1, input_sample_shape=(3, 32, 32)) +conv.to_device(dev) # move the layer data onto a CudaGPU device +x = tensor.Tensor((3, 32, 32), dev) +x.uniform(-1, 1) +y = conv.foward(True, x) + +dy = tensor.Tensor() +dy.reset_like(y) +dy.set_value(0.1) +# dp is a list of tensors for parameter gradients +dx, dp = conv.backward(kTrain, dy) +``` + +--- + +#### singa.layer.engine = 'cudnn' + +弿ï¼engineï¼æ¯å±æ è¯ç¬¦çåç¼ã +è¿ä¸ªå¼å¯è½æ¯[cudnn'ï¼'singacpp'ï¼'singacuda'ï¼'singacl']ä¹ä¸ï¼åå«ç¨cudnnåºï¼Cppï¼CudaåOpenCLå®ç°ã ä¾å¦ï¼CudnnConvolutionå±ç±'cudnn_convolution'æ è¯; 'singacpp_convolution'ç¨äºå·ç§¯å±; æäºå±çå®ç°åªä½¿ç¨tensor彿°ï¼å æ¤å®ä»¬å¯¹åºå±è®¾å¤æ¯éæçã 对äºè¿äºå±ï¼å®ä»¬å°å ·æå¤ä¸ªæ è¯ç¬¦ï¼ä¾å¦ï¼singacpp_dropoutï¼singacuda_dropoutåsingacl_dropoutå ¨é½ç¨äºDropoutå±ã æ¤å¤ï¼å®è¿æä¸ä¸ªé¢å¤çæ è¯ç¬¦'singa'ï¼å³'singa_dropout'ä¹ä»£è¡¨Dropoutå±ã + +弿æ¯å¤§å°åææçãæ¯ä¸ªpythonå±å°ä¼ç¨å¼æå±æ§å建æ£ç¡®çå±ã + +--- + +### class singa.layer.Layer(name, conf=None, **kwargs) + +åºç±»ï¼`object` + +Pythonå±çåºç±»ã +å ¸åå°ï¼å±å®ä¾ççå½å¨æå æ¬ï¼ + +1. æé 屿²¡æinput_sample_shapesï¼è½¬å°2;ç¨input_sample_shapesæå»ºå±ï¼è½¬å°3 +2. è°ç¨setupæ¥åå»ºåæ°å¹¶è®¾ç½®å ¶ä»å åæ®µ +3. è°ç¨ååä¼ ææè®¿é®å±æå +4. è°ç¨ååä¼ æå¹¶è·ååæ°å®ææ´æ° + +**åæ°ï¼** +- **name (str)** â å±å + +--- + +#### setup(in_shapes) + +è°ç¨C++setup彿°åå»ºåæ°å¹¶è®¾ç½®å æ°æ®ã + +**åæ°ï¼** +- **in_shapes** â 妿屿¥åå个è¾å ¥tensorï¼åin_shapesæ¯æå®è¾å ¥tensorå½¢ç¶çå个å ç»; å¦æè¯¥å±æ¥åå¤ä¸ªè¾å ¥tensorï¼ä¾å¦ï¼concatenationå±ï¼ï¼åin_shapesæ¯å ç»çå ç»ï¼æ¯ä¸ªå ç»å¯¹äºä¸ä¸ªè¾å ¥tensor + +--- + +#### caffe_layer() + +åºäºcaffeå±çé ç½®å建ä¸ä¸ªSINGAå± + +--- + +#### get_output_sample_shape() + +å¨setup以è·å¾è¾åºæ ·æ¬çå½¢ç¶å被è°ç¨ + +**è¿åå¼ï¼** å个è¾åºtensorçå ç»ï¼å¦æè¯¥å±å ·æå¤ä¸ªè¾åºï¼å为å ç»å表 + +--- + +#### param_names() +**è¿åå¼ï¼** å符串åè¡¨ï¼æ¯ä¸ªå¼ä»£è¡¨ä¸ä¸ªåæ°tensorçåç§° + +--- + +#### param_values() + +è¿ååæ°å¼tensorã +åæ°tesnorä¸ä½ä¸ºå±æååå¨ãç±äºå±è®¾å¤çæ´æ¹ï¼cpp tensorå¯è½ä¼ç§»å¨å°diff设å¤ä¸ï¼è¿ä¼å¯¼è´ä¸ä¸è´ã + +**è¿åå¼ï¼** tensoråè¡¨ï¼æ¯ä¸ªåæ°å¯¹åºå表ä¸çä¸ä¸ª + +--- + +#### forward(flag, x) + +å½åå±çååä¼ æã + +**åæ°ï¼** +- **flag** â True (kTrain) for training (kEval); False for evaluating; other values for furture use. +- **x (Tensor or list<Tensor>)** â an input tensor if the layer is connected from a single layer; a list of tensors if the layer is connected from multiple layers. + +**è¿åå¼ï¼** å¦æè¯¥å±è¢«è¿æ¥å¨ä¸ä¸ªåç¬çå±åè¿åtensorï¼å¦æè¢«è¿æ¥å°å¤ä¸ªå±ï¼åè¿åä¸ä¸ªtensorå表 + +--- + +#### backward(flag, dy) + +å½åå±çååä¼ æã + +**åæ°ï¼** +- **flag (int)** â ä¿ç为以åä½¿ç¨ +- **dy (Tensor or list<Tensor>)** â ä¸ç®æ æå¤±ç¸å¯¹åºç梯度tensor + +**è¿åå¼ï¼** <dx, <dp1, dp2..>>ï¼dxæ¯è¾å ¥xçæ¢¯åº¦ï¼dpiæ¯ç¬¬iä¸ªåæ°çæ¢¯åº¦ + +--- + +#### to_device(device) + +å°å±ç¶ætensorç§»è³æå®è®¾å¤ã + +**åæ°ï¼** +- **device** â swig转æ¢ç设å¤ï¼ç±singa.deviceå建 + +--- + +### class singa.layer.Dummy(name, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +ä¸ä¸ªèæå±ï¼ä» ç¨äºåå/ååä¼ éæ°æ®ï¼è¾å ¥/è¾åºæ¯å个tensorï¼ã + + +#### forward(flag, x) + +**è¿åå¼ï¼** è¾å ¥x + +#### backward(falg, dy) + +**è¿åå¼ï¼** dyï¼[] + +--- + +### class singa.layer.Conv2D(name, nb_kernels, kernel=3, stride=1, border_mode='same', cudnn_prefer='fatest', data_format='NCHW', use_bias=True, W_specs=None, b_specs=None, pad=None, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +å建ä¸ä¸ªå±å2Då·ç§¯ã + +**åæ°ï¼** +- **nb_kernels (int)** â è¾å ¥tensorçééï¼æ ¸ï¼æ° +- **kernel** â ä¸ä¸ªæä¸å¯¹æ´åæ°è¡¨ç¤ºæ ¸çé«å宽 +- **stride** â ä¸ä¸ªæä¸å¯¹æ´åæ°è¡¨ç¤ºæ¥é¿çé«å宽 +- **border_mode (string)** â å¡«å æ¨¡å¼ï¼ä¸åºå大å°åï¼âvalidâ -> å¨é«å宽é¿åº¦ä¸è¡¥0 âsameâ -> å¡«å æ ¸ä¸åï¼ä¸åæ´ï¼æ°ç®ç0ï¼æ ¸å¿ é¡»æ¯å¥æ° +- **cudnn_prefer (string)** â å好çcudnnå·ç§¯ç®æ³ï¼å¯ä»¥æ¯âfatestâ, âautotuneâ, âlimited_workspaceâåâno_workspaceâ +- **data_format (string)** â âNCHWâæâNHWCâ +- **use_bias (bool)** â TrueæFalse +- **pad** â ä¸ä¸ªæä¸å¯¹æ´åæ°è¡¨ç¤ºå¡«å çé«å宽 +- **W_specs (dict)** â ç¨äºæå®æéç©éµçè§æ ¼ï¼åæ®µå æ¬ä»£è¡¨åæ°åç§°çânameâï¼ä»£è¡¨å¦ä¹ éç乿°ç'lr_multï¼ä»£è¡¨æéè¡°å乿°ç''decay_mult'ï¼ä»£è¡¨åå§åæ¹æ³ç'init'ï¼å ¶å¯ä»¥æ¯'gaussian'ï¼'uniform'ï¼' xavier'ï¼ç¸åºçåå§åæ¹æ³ä¸º'''std'ï¼'mean'ï¼'high'ï¼'low'ãTODOï¼wangweiï¼'clamp'为æ¸å约æï¼value为æ éï¼'regularizer'为æ£è§åï¼ç®åæ¯æ'l2' +- **b_specs (dict)** â åç§»åéçè¶ åæ°ï¼åW_specs类似 +- **name (string)** â å±å +- **input_sample_shape** â ç¨äºè¾å ¥tensorå½¢ç¶çä¸å ç»ï¼ä¾å¦ï¼ééï¼é«åº¦ï¼å®½åº¦ï¼æï¼é«åº¦ï¼å®½åº¦ï¼ééï¼ + +--- + +### class singa.layer.Conv1D(name, nb_kernels, kernel=3, stride=1, border_mode='same', cudnn_prefer='fatest', use_bias=True, W_specs={'init': 'Xavier'}, b_specs={'init': 'Constant', 'value': 0}, pad=None, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Conv2D` + +æå»º1Då·ç§¯å±ã +大é¨ååæ°ä¸Conv2Dçåæ°ç¸åï¼é¤äºæ ¸ï¼æ¥é¿ï¼å¡«å å¼ï¼è¿æ¯ä¸ä¸ªæ éè䏿¯å ç»ã input_sample_shapeæ¯ä¸ä¸ªå ·æå个è¾å ¥ç¹å¾é¿åº¦å¼çå ç»ã + +#### get_output_sample_shape() + +--- + +### class singa.layer.Pooling2D(name, mode, kernel=3, stride=2, border_mode='same', pad=None, data_format='NCHW', input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +2Dæ± åå±è¿è¡æå¤§æå¹³åæ± åã +ææçåæ°é½ä¸Conv2Dç¸åï¼é¤äºä¸é¢çåæ°ã + +**åæ°ï¼** +- **mode** â æ± 忍¡å¼ï¼model_pb2.PoolingConf.MAXæmodel_pb2.PoolingConf.AVE + +--- + +### class singa.layer.MaxPooling2D(name, kernel=3, stride=2, border_mode='same', pad=None, data_format='NCHW', input_sample_shape=None) + +åºç±»: `singa.layer.Pooling2D` + +--- + +### class singa.layer.AvgPooling2D(name, kernel=3, stride=2, border_mode='same', pad=None, data_format='NCHW', input_sample_shape=None) + +åºç±»: `singa.layer.Pooling2D` + +--- + +### class singa.layer.MaxPooling1D(name, kernel=3, stride=2, border_mode='same', pad=None, data_format='NCHW', input_sample_shape=None) + +åºç±»: `singa.layer.MaxPooling2D` + +get_output_sample_shape() + +--- + +### class singa.layer.AvgPooling1D(name, kernel=3, stride=2, border_mode='same', pad=None, data_format='NCHW', input_sample_shape=None) + +åºç±»: `singa.layer.AvgPooling2D` + +get_output_sample_shape() + +--- + +### class singa.layer.BatchNormalization(name, momentum=0.9, beta_specs=None, gamma_specs=None, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +æ¹éæ£ååã + +**åæ°ï¼** +- **momentum (float)** â ç¨äºè¿è¡çåå¼åæ¹å·® +- **beta_specs (dict)** â åå ¸ï¼å æ¬betaåæ°çåæ®µï¼'name'åæ°åç§°'ï¼lr_mult'å¦ä¹ éç乿°ï¼'decay_mult'æéè¡°å乿°ï¼'init'åå§åæ¹æ³ï¼å¯ä»¥æ¯'gaussian'ï¼'uniform'å'xavier'ï¼'std'ï¼'mean'ï¼'high'ï¼'low'表示ç¸åºåå§åæ¹æ³ï¼'clamp'表示梯度约æï¼å¼æ¯æ éï¼'regularizer'ç¨äºæ£ååï¼ç®åæ¯æ'l2' +- **gamma_specs (dict)** â åbeta_specs类似, ä½ç¨äºgammaåæ°. +- **name (string)** â å±å +- **input_sample_shape (tuple)** â æ´åæ°ï¼è³å°ä¸ä¸ª + +--- + +### class singa.layer.LRN(name, size=5, alpha=1, beta=0.75, mode='cross_channel', k=1, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +å±é¨ååºå½ä¸åã + +**åæ°ï¼** +- **size (int)** â ç¨äºå½ä¸åçééæ°. +- **mode (string)** â âcross_channelâ +- **input_sample_shape (tuple)** â 3ç»´å ç»ï¼(channel, height, width) + +--- + +### class singa.layer.Dense(name, num_output, use_bias=True, W_specs=None, b_specs=None, W_transpose=False, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +è¿è¡çº¿æ§ææ¾å°åæ¢ï¼ä¹è¢«å«åå 积æå ¨è¿æ¥å±ã + +**åæ°ï¼** +- **num_output (int)** â è¾åºç¹å¾é¿åº¦ +- **use_bias (bool)** â 转æ¢åçç¹å¾å鿝å¦å ä¸åç§»åé +- **W_specs (dict)** â å 嫿å¼ç©éµçåæ®µï¼'name'åæ°åç§°'ï¼lr_mult'å¦ä¹ éç乿°ï¼'decay_mult'æéè¡°å乿°ï¼'init'åå§åæ¹æ³ï¼å¯ä»¥æ¯'gaussian'ï¼'uniform'å'xavier'ï¼'std'ï¼'mean'ï¼'high'ï¼'low'表示ç¸åºåå§åæ¹æ³ï¼'clamp'表示梯度约æï¼å¼æ¯æ éï¼'regularizer'ç¨äºæ£ååï¼ç®åæ¯æ'l2' +- **b_specs (dict)** â åç§»åéçåæ®µ, åW_specs类似 +- **W_transpose (bool)** â å¦æä¸ºçï¼è¾åºä¸ºx*W.T+b +- **input_sample_shape (tuple)** â è¾å ¥ç¹å¾é¿åº¦ + +--- + +### class singa.layer.Dropout(name, p=0.5, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +Dropoutå± + +**åæ°ï¼** +- **p (float)** â éæºä¸¢æä¸ä¸ªå ç´ ï¼å³å°å ¶ä¸è®¾ä¸º0ï¼çæ¦ç +- **name (string)** â å±å + +--- + +### class singa.layer.Activation(name, mode='relu', input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +æ¿å±å± + +**åæ°ï¼** +- **name (string)** â å±å +- **mode (string)** â âreluâ, âsigmoidâæ âtanhâ +- **input_sample_shape (tuple)** â åä¸ªæ ·æ¬çå½¢ç¶ + +--- + +### class singa.layer.Softmax(name, axis=1, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +éç¨SoftMaxã + +**åæ°ï¼** +- **axis (int)** â 对[axis, -1)çæ°æ®é个è¿è¡SoftMax +- **input_sample_shape (tuple)** â åä¸ªæ ·æ¬çå½¢ç¶ + +--- + +### class singa.layer.Flatten(name, axis=1, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +å°è¾å ¥tensoréå¡ä¸ºä¸ä¸ªç©éµã + +**åæ°ï¼** +- **axis (int)** â æ ¹æ®æå®ç»´åº¦å°è¾å ¥éå¡ä¸ºç©éµï¼[0,axis)ä½ä¸ºè¡ï¼[axis, -1)ä½ä¸ºå +- **input_sample_shape (tuple)** â åä¸ªæ ·æ¬çå½¢ç¶ + +--- + +### class singa.layer.Merge(name, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +对ææè¾å ¥tensoræ±åã + +**åæ°ï¼** +- **input_sample_shape** â è¾å ¥æ ·æ¬çå½¢ç¶ãæææ ·æ¬çå½¢ç¶åºè¯¥ä¸è´ã + +#### setup(in_shape) + +#### get_output_sample_shape() + +#### forward(flag, inputs) + +éè¿æ±ååå¹¶ææè¾å ¥tensorã +TODO(wangwei) å ç´ çº§å«çåå¹¶æä½ã + +**è¿åå¼ï¼** å个tensorï¼å 嫿æè¾å ¥tensorçå + +#### backward(flag, grad) + +å¤å¶æ¯ä¸ªè¾å ¥å±ç梯度tensorã + +**åæ°ï¼** +- **grad** - 梯度tensor + +**è¿åå¼ï¼** tensoråè¡¨ï¼æ¯ä¸ªè¾å ¥å±å¯¹åºå ¶ä¸ä¸ä¸ª + +--- + +### class singa.layer.Split(name, num_output, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +çæè¾å ¥tensorçå¤ä¸ªå¯æ¬ã + +**åæ°ï¼** +- **num_output (int)** â å¾ çæçè¾åºtensoræ°ç® +- **input_sample_shape()** â å å«ä¸ä¸ªæ´åæ°ï¼ä»£è¡¨è¾å ¥æ ·æ¬ç¹å¾å¤§å° + +#### setup(in_shape) + +#### get_output_sample_shape() + +#### forward() + +çæè¾å ¥tensorçå¤ä¸ªå¯æ¬ã + +**åæ°ï¼** +- **flag** â æ²¡æç¨å° +- **input** â å个è¾å ¥tensor + +**è¿åå¼ï¼** è¾åºtensoråè¡¨ï¼æ¯ä¸ªå¯¹åºè¾å ¥çä¸ä¸ªæ·è´ + +#### backward() + +对ææè¾å ¥tensoræ±åå¾å°å个è¾åºtensorã + +**åæ°ï¼** +- **grad** - 梯度tensor + +**è¿åå¼ï¼** ä¸ä¸ªtensorï¼ä»£è¡¨ææè¾å ¥æ¢¯åº¦tensorçæ±å + +--- + +### class singa.layer.Concat(name, axis, input_sample_shapes=None) + +åºç±»ï¼`singa.layer.Layer` + +å°tensorç«ç´(axis=0)ææ°´å¹³(axis=1)æ¼æ¥ãç®åä» æ¯æ2ç»´tensorã + +**åæ°ï¼** +- **axis (int)** â 0è¡¨ç¤ºæ¼æ¥è¡; 1è¡¨ç¤ºæ¼æ¥å; +- **input_sample_shapes** â æ ·æ¬å½¢ç¶çå ç»åè¡¨ï¼æ¯ä¸ªå¯¹åºä¸ä¸ªè¾å ¥æ ·æ¬çtensor + +#### forward(flag, inputs) + +æ¼æ¥ææè¾å ¥tensorã + +**åæ°ï¼** +- **flag** â åLayer::forward() +- **input** â tensorå表 + +**è¿åå¼ï¼** ä¸ä¸ªæ¼æ¥åçtensor + + +#### backward(flag, dy) + +**åæ°ï¼** +- **flag** â same as Layer::backward() +- **dy (Tensor)** â the gradient tensors of y w.r.t objective loss + +**è¿åå¼ï¼** å ç»(dx, []), dxæ¯tensorå表ï¼å¯¹åºè¾å ¥ç梯度ï¼[]æ¯ç©ºå表 + +--- + +### class singa.layer.Slice(name, axis, slice_point, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +å°è¾å ¥tensor沿ç«ç´(axis=0)ææ°´å¹³(axis=1)åæå¤ä¸ªåtensorã + +**åæ°ï¼** +- **axis (int)** â 0代表åå²è¡; 1代表åå²å; +- **slice_point (list)** â æ²¿çè½´åå²çä½ç½®ï¼n-1个åå²ç¹å¯¹åºn个åtensorï¼ +- **input_sample_shape** â è¾å ¥æ ·æ¬tensorçå½¢ç¶ + +#### get_output_sample_shape() + +#### forward(flag, x) + +沿ç»å®è½´åå²è¾å ¥tensorã + +**åæ°ï¼** +- **flag** â åLayer::forward() +- **x** â å个è¾å ¥tensor + +**è¿åå¼ï¼** è¾åºtensorå表 + +#### backward(flag, grads) + +æ¼æ¥æææ¢¯åº¦tensor以çæä¸ä¸ªè¾åºtensorã + +**åæ°ï¼** +- **flag** â åLayer::backward() +- **grads** â tensoråè¡¨ï¼æ¯ä¸ªå¯¹åºä¸ä¸ªåå²ç梯度tensor +**è¿åå¼ï¼** å ç»(dx, []), dxæ¯ä¸ä¸ªtensorï¼å¯¹åºåå§è¾å ¥ç梯度ï¼[]æ¯ç©ºå表 + +--- + +### class singa.layer.RNN(name, hidden_size, rnn_mode='lstm', dropout=0.0, num_stacks=1, input_mode='linear', bidirectional=False, param_specs=None, input_sample_shape=None) + +åºç±»ï¼`singa.layer.Layer` + +éå½å±å å«4个åå ï¼å³lstm, gru, tanhåreluã + +**åæ°ï¼** +- **hidden_size** â éå«å±ç¹å¾å¤§å°ï¼åææå±çå æ ã +- **rnn_mode** â å³å®äºRNNåå ï¼å¯ä»¥æ¯âlstmâ, âgruâ, âtanhâå âreluâãå¯¹äºæ¯ç§æ¨¡å¼ï¼å¯ä»¥åècudnnæåã +- **num_stacks** â rnnå±çå æ æ°éãè¿ä¸åäºéè¦å±å¼çåºåé¿åº¦ã +- **input_mode** â 'linear'ï¼éè¿çº¿æ§åæ¢å°è¾å ¥ç¹å¾xè½¬æ¢æå¤§å°ä¸ºhidden_sizeçç¹å¾åéï¼'skip'ï¼ä» è¦æ±è¾å ¥ç¹å¾å¤§å°çäºhidden_sizeã +- **bidirection** â 对äºååRNN为çã +- **param_specs** â RNNåæ°çåå§åé ç½®ã +- **input_sample_shape** â å å«ä¸ä¸ªæ´åæ°ï¼ä»£è¡¨è¾å ¥æ ·æ¬çç¹å¾å¤§å°ã + +#### forward(flag, inputs) + +**åæ°ï¼** +- **flag** â True(kTrain) 代表è®ç»ï¼False(kEval)代表éªè¯; å ¶ä»å¼ç¨ä½ä»¥å使ç¨ã +- **<x1, x2,..xn, hx, cx>** â å ¶ä¸ï¼xiæ¯è¾å ¥(inputs,)第i个ä½ç½®çtensorï¼å®çå½¢ç¶æ¯ (batch_size, input_feature_length); xiçbatch_sizeå¿ é¡»å¤§äºxi + 1ç大å°; hxæ¯åå§éèç¶æï¼å½¢ç¶æ¯ï¼num_stacks * bidirectionï¼2ï¼1ï¼batch_sizeï¼hidden_sizeï¼ã cxæ¯ä¸hyç¸åå½¢ç¶çåå§ç»èç¶æå¼ éã cxä» å¯¹lstmææã 对äºå ¶ä»RNNï¼ä¸åå¨cxã hxåcxé½å¯ä»¥æ¯æ²¡æå½¢ç¶åæ°æ®çèæå¼ éã +è¿åå¼ï¼<y1ï¼y2ï¼... ynï¼hyï¼cy>ï¼å ¶ä¸yiæ¯ç¬¬i个ä½ç½®çè¾åºå¼ éï¼å ¶å½¢ç¶æ¯ï¼batch_sizeï¼hidden_size *ååï¼2ï¼1ï¼ã hyæ¯æç»çéèç¶æå¼ éã cxæ¯æç»çç»èç¶æå¼ éã cxä» ç¨äºlstmã + + +#### backward(flag, grad) + +**åæ°ï¼** +- **flag** â æªæ¥ä½¿ç¨ +- **<dy1, dy2,..dyn, dhy, dcy>** - å ¶ä¸ï¼dyiæ¯(grad,) 第i个ä½ç½®ç梯度ï¼å®çå½¢ç¶æ¯ (batch_size, hidden_size*bidirection?2 (i-th) â 1); dhyæ¯æç»éèç¶æçæ¸åï¼å®çå½¢ç¶æ¯ï¼num_stacks *ååï¼2ï¼1ï¼batch_sizeï¼hidden_sizeï¼ãdcyæ¯æç»åå ç¶æçæ¢¯åº¦ã cxä» å¯¹lstmææï¼å ¶ä»RNNä¸åå¨cxã dhyådcyé½å¯ä»¥æ¯æ²¡æå½¢ç¶åæ°æ®çèætensorã + +**è¿åå¼ï¼** <dx1ï¼dx2ï¼... dxnï¼dhxï¼dcx>ï¼å ¶ä¸dxiæ¯ç¬¬i个è¾å ¥çæ¢¯åº¦å¼ éï¼å®çå½¢ç¶æ¯ï¼batch_sizeï¼input_feature_lengthï¼ã dhxæ¯åå§éèç¶æçæ¢¯åº¦ã dcxæ¯åå§åå ç¶æçæ¢¯åº¦ï¼ä» 对lstmææã + +--- + +### class singa.layer.LSTM(name, hidden_size, dropout=0.0, num_stacks=1, input_mode='linear', bidirectional=False, param_specs=None, input_sample_shape=None) + +åºç±»ï¼`singa.layer.RNN` + +--- + +### class singa.layer.GRU(name, hidden_size, dropout=0.0, num_stacks=1, input_mode='linear', bidirectional=False, param_specs=None, input_sample_shape=None) + +åºç±»ï¼`singa.layer.RNN` + +--- + +#### singa.layer.get_layer_list() + +è¿åå å«æææ¯æå¾å±çæ è¯ç¬¦ï¼æ ç¾ï¼çå符串å表 + +--- Added: incubator/singa/site/trunk/zh/_sources/docs/loss.md.txt URL: http://svn.apache.org/viewvc/incubator/singa/site/trunk/zh/_sources/docs/loss.md.txt?rev=1833193&view=auto ============================================================================== --- incubator/singa/site/trunk/zh/_sources/docs/loss.md.txt (added) +++ incubator/singa/site/trunk/zh/_sources/docs/loss.md.txt Fri Jun 8 15:29:00 2018 @@ -0,0 +1,103 @@ +# æå¤±(Loss) + +æå¤±æ¨¡åå æ¬ä¸ç»è®ç»æå¤±å®ä¾ã æäºæ¯ä»C ++å®ç°è½¬æ¢èæ¥çï¼å ¶ä½ç齿¯ç´æ¥ä½¿ç¨python Tensorå®ç°çã + +示ä¾ç¨æ³ï¼ +```python +from singa import tensor +from singa import loss + +x = tensor.Tensor((3, 5)) +x.uniform(0, 1) # randomly genearte the prediction activation +y = tensor.from_numpy(np.array([0, 1, 3], dtype=np.int)) # set the truth + +f = loss.SoftmaxCrossEntropy() +l = f.forward(True, x, y) # l is tensor with 3 loss values +g = f.backward() # g is a tensor containing all gradients of x w.r.t l +``` + + +--- + +### class singa.loss.Loss + +åºç±»ï¼`object` + +æå¤±ç±»çåºç±» + +å°è£ C++æå¤±ç±»çåç±»å¯ä»¥ä½¿ç¨æ¤åºç±»ç»§æ¿çforwardï¼backwardåevaluate彿°ã å ¶ä»åç±»éè¦éåè¿äºå½æ° + +#### backward() + +**è¿åå¼ï¼** 䏿失ç¸å¯¹åºç梯度 + +--- + +#### evaluate(flag, x, y) + +**åæ°ï¼** +- **flag (int)** â å¿ é¡»æ¯kEval +- **x (Tensor)** â 颿µTensor +- **y (Tensor)** â çå®Tensor + +**è¿åå¼ï¼** æææ ·æ¬çå¹³åæå¤± + +--- + +#### forward(flag, x, y) + +è®¡ç®æå¤±å¼ + +**åæ°ï¼** +- **flag** â kTrain/kEvalæå¸å°å¼ã妿æ¯kTrain/Trueï¼é£ä¹å¨ä¸ä¸æ¬¡è°ç¨forwardåä¼å è°ç¨backwardè®¡ç®æ¢¯åº¦ã +- **x (Tensor)** â 颿µTensor +- **y (Tensor)** â çå®Tensor, x.shape[0]å¿ é¡»åy.shape[0]ç¸å + +**è¿åå¼ï¼** tensorï¼æ¯ä¸ªæ ·æ¬å¯¹åºä¸ä¸ªæµ®ç¹åæå¤±å¼ + +--- + +### class singa.loss.SoftmaxCrossEntropy + +åºç±»ï¼`singa.loss.Loss` + +æ¤æå¤±å½æ°æ¯SoftMaxå交åçµæå¤±çç»åãå®éè¿SoftMax彿°è½¬æ¢è¾å ¥ï¼ç¶åæ ¹æ®çå®å¼è®¡ç®äº¤åçµæå¤±ã å¯¹äºæ¯ä¸ªæ ·æ¬ï¼çå®å¼å¯ä»¥æ¯ä¸ä¸ªæ´æ°ä½ä¸ºæ ç¾ç´¢å¼; æäºè¿å¶æ°ç»ï¼æç¤ºæ ç¾åå¸ã å æ¤ï¼çå®å¼å¯ä»¥æ¯1ç»´æ2ç»´tensorã 对äºä¸æ¹æ ·åï¼æ°æ®/ç¹å¾tensorå¯ä»¥æ¯1ç»´ï¼å¯¹äºåä¸ªæ ·åï¼æ2ç»´ï¼å¯¹äºä¸ç»æ ·æ¬ï¼ã + +--- + +### class singa.loss.SquaredError + +åºç±»ï¼`singa.loss.Loss` + +æ¤æå¤±ç¨æ¥è¡¡é颿µå¼åçå®å¼ä¹é´çå¹³æ¹å·®ãå®éè¿Python Tensoræä½å®ç°ã + +--- + +#### backward() + +计ç®ä¸æå¤±ç¸å¯¹åºåéçæ¢¯åº¦ã + +**è¿åå¼ï¼** x - y + +--- + +#### evaluate(flag, x, y) + +计ç®å¹³å误差ã + +**è¿åå¼ï¼** æµ®ç¹åæ° + +--- + +#### forward(flag, x, y) + +éè¿0.5 * ||x-y||^2è®¡ç®æå¤±ã + +**åæ°ï¼** +- **flag (int)** â kTrainækEvalï¼å¦ææ¯kTrainï¼é£ä¹å¨ä¸ä¸æ¬¡è°ç¨forwardåä¼å è°ç¨backwardè®¡ç®æ¢¯åº¦ã +- **x (Tensor)** â 颿µTensor +- **y (Tensor)** â çå®Tensor, æ¯ä¸ªæ ·æ¬å¯¹åºä¸ä¸ªæ´åæ°, åå¼ä¸º[0, x.shape[1])ã + +**è¿åå¼ï¼** tensorï¼æ¯ä¸ªæ ·æ¬å¯¹åºä¸ä¸ªæå¤±å¼ + +--- Added: incubator/singa/site/trunk/zh/_sources/docs/metric.md.txt URL: http://svn.apache.org/viewvc/incubator/singa/site/trunk/zh/_sources/docs/metric.md.txt?rev=1833193&view=auto ============================================================================== --- incubator/singa/site/trunk/zh/_sources/docs/metric.md.txt (added) +++ incubator/singa/site/trunk/zh/_sources/docs/metric.md.txt Fri Jun 8 15:29:00 2018 @@ -0,0 +1,62 @@ +# 度é(Metric) + +该模åå å«ä¸ç»ç¨äºè¯ä¼°æ¨¡åæ§è½ç度éç±»ã ç¹å®ç度éç±»å¯ä»¥ç±C++çå®ç°è½¬æ¢æç´æ¥ä½¿ç¨Pythonå®ç°ã + +示ä¾ç¨æ³ï¼ + +```python +from singa import tensor +from singa import metric + +x = tensor.Tensor((3, 5)) +x.uniform(0, 1) # randomly genearte the prediction activation +x = tensor.SoftMax(x) # normalize the prediction into probabilities +y = tensor.from_numpy(np.array([0, 1, 3], dtype=np.int)) # set the truth + +f = metric.Accuracy() +acc = f.evaluate(x, y) # averaged accuracy over all 3 samples in x +``` + +--- + +### class singa.metric.Metric + +åºç±»ï¼`object` + +度éç±»çåºç±» + +å°è£ C++度éç±»çåç±»å¯ä»¥ä½¿ç¨ç»§æ¿çåå彿°ï¼å¹¶è¯ä¼°æ¤åºç±»ç彿°ã å ¶ä»åç±»éè¦éåè¿äºå½æ°ã ç¨æ·éè¦æä¾é¢æµå¼åçå®å¼æ¥è·å度éå¼ã + +--- + +#### forward(x, y) + +为æ¯ä¸ªæ ·æ¬è®¡ç®åº¦éå¼ + +**åæ°ï¼** +- **x (Tensor)** â 颿µå¼ï¼æ¯è¡ä»£è¡¨ä¸ä¸ªæ ·æ¬ç颿µå¼ +- **y (Tensor)** â çå®å¼ï¼æ¯è¡ä»£è¡¨ä¸ä¸ªæ ·æ¬ççå®å¼ + +**è¿åå¼ï¼** æµ®ç¹æ°ç»æçtensorï¼æ¯ä¸ªæ ·æ¬å¯¹åºä¸ä¸ªæµ®ç¹æ°è¾åº + +--- + +#### evaluate(x, y) + +è®¡ç®æ ·æ¬çå¹³å度éå¼ + +**åæ°ï¼** +- **x (Tensor)** â 颿µå¼ï¼æ¯å代表ä¸ä¸ªæ ·æ¬ç颿µå¼ +- **y (Tensor)** â çå®å¼ï¼æ¯å代表ä¸ä¸ªæ ·æ¬ççå®å¼ + +**è¿åå¼ï¼** æµ®ç¹æ°ç»æçtensorï¼æ¯ä¸ªæ ·æ¬å¯¹åºä¸ä¸ªæµ®ç¹æ°è¾åº + +--- + +### class singa.metric.Accuracy + +åºç±»ï¼`singa.metric.Metric` + +对äºåæ ç¾é¢æµä»»å¡ï¼è®¡ç®top-1精确度ãå®è°ç¨C++彿°å®ç°è®¡ç®ã + +--- Added: incubator/singa/site/trunk/zh/_sources/docs/model_zoo/char-rnn/README.md.txt URL: http://svn.apache.org/viewvc/incubator/singa/site/trunk/zh/_sources/docs/model_zoo/char-rnn/README.md.txt?rev=1833193&view=auto ============================================================================== --- incubator/singa/site/trunk/zh/_sources/docs/model_zoo/char-rnn/README.md.txt (added) +++ incubator/singa/site/trunk/zh/_sources/docs/model_zoo/char-rnn/README.md.txt Fri Jun 8 15:29:00 2018 @@ -0,0 +1,25 @@ +# 卿æ¬ä¸è®ç»Char-RNN + +éå½ç¥ç»ç½ç»ï¼RNNï¼è¢«å¹¿æ³ç¨äºå»ºæ¨¡é¡ºåºæ°æ®ï¼ä¾å¦èªç¶è¯è¨å¥åã æ¬ç¤ºä¾ä»ç»å¦ä½ä½¿ç¨SINGAçRNNå±å®ç°RNNåºç¨ç¨åºï¼ææ¨¡åï¼ã æä»¬å°ä½¿ç¨[char-rnn](https://github.com/karpathy/char-rnn)模åä½ä¸ºç¤ºä¾ï¼å®å°è®ç»è¯å¥ææºä»£ç ï¼å¹¶å°æ¯ä¸ªå符ä½ä¸ºè¾å ¥åä½ã ç¹å«æ¯ï¼æä»¬å°ä½¿ç¨GRUå¨Linuxå æ ¸æºä»£ç ä¸è®ç»ä¸ä¸ªRNNã ç»è¿è®ç»ï¼æä»¬å¸æä»æ¨¡åä¸çæææä¹ç代ç ã + + +## æä½è¯´æ + +* ç¼è¯å¹¶å®è£ SINGAãç®åï¼RNNçå®ç°æ¯åºäºCuDNNï¼>=5.05ï¼ã. + +* å夿°æ®éãä¸è½½[å æ ¸æºä»£ç ](http://cs.stanford.edu/people/karpathy/char-rnn/)ãå ¶ä»ææ¬æ°æ®ä¹å¯è¢«ä½¿ç¨ã + +* å¼å§è®ç»ï¼ + + python train.py linux_input.txt + + ä¸äºè¶ åæ°å¯ä»¥å¨å½ä»¤è¡åæ°ä¸è®¾ç½®ï¼ + + python train.py -h + +* éè¿æä¾è¦éæ ·çå符æ°åç§åå符串æ¥ä»æ¨¡åä¸éæ ·å符ã + + python sample.py 'model.bin' 100 --seed '#include <std' + + 请ç¨å ¶ä¸ä¸ä¸ªcheckpointè·¯å¾æ¿æ¢'model.bin'çè·¯å¾ã + Added: incubator/singa/site/trunk/zh/_sources/docs/model_zoo/cifar10/README.md.txt URL: http://svn.apache.org/viewvc/incubator/singa/site/trunk/zh/_sources/docs/model_zoo/cifar10/README.md.txt?rev=1833193&view=auto ============================================================================== --- incubator/singa/site/trunk/zh/_sources/docs/model_zoo/cifar10/README.md.txt (added) +++ incubator/singa/site/trunk/zh/_sources/docs/model_zoo/cifar10/README.md.txt Fri Jun 8 15:29:00 2018 @@ -0,0 +1,60 @@ +# å¨Cifar-10ä¸è®ç»CNN + +å·ç§¯ç¥ç»ç½ç»ï¼CNNï¼æ¯ä¸ç§è¢«å¹¿æ³ç¨äºå¾ååè§é¢åç±»çåé¦äººé ç¥ç»ç½ç»ã卿¤ä¾åä¸ï¼æä»¬å°å¨Cifar-10æ°æ®éä¸è®ç»ä¸ä¸ªæ·±åº¦CNNæ¨¡åæ¥è¿è¡å¾ååç±»ï¼ + +1. [AlexNet](https://code.google.com/p/cuda-convnet/source/browse/trunk/example-layers/layers-18pct.cfg)ï¼æä»¬å¨éªè¯éä¸è½è¾¾å°çæé«å确度ï¼ä¸åæ°æ®å¢å¼ºï¼å¨82%å·¦å³ã +2. [VGGNet](http://torch.ch/blog/2015/07/30/cifar.html)ï¼æä»¬å¨éªè¯éä¸è½è¾¾å°çæé«å确度ï¼ä¸åæ°æ®å¢å¼ºï¼å¨89%å·¦å³ã +3. [ResNet](https://github.com/facebook/fb.resnet.torch)ï¼æä»¬å¨éªè¯éä¸è½è¾¾å°çæé«å确度ï¼ä¸åæ°æ®å¢å¼ºï¼å¨83%å·¦å³ã +4. [æ¥èªCaffeçAlexNet](https://github.com/BVLC/caffe/tree/master/examples/cifar10)ï¼SINGAè½å¤æ ç¼è½¬æ¢Caffe模åã + + +## æä½è¯´æ + + +### SINGAå®è£ + +ç¨æ·å¯ä»¥ä»æºç ç¼è¯åå®è£ C++æè Pythonçæ¬çSINGAã代ç å¯ä»¥å¨CPUåGPU䏿§è¡ã对äºGPUä¸åè®ç»ï¼CUDAåCUDNNï¼V4æV5ï¼æ¯éè¦çã请åèå®è£ çé¢ä»¥è·å¾è¯¦ç»æç¤ºã + +### æ°æ®åå¤ + +Cifar-10çäºè¿å¶æ°æ®éæä»¶å¯ä»¥ç±å¦ä¸æä»¤ä¸è½½ + + python download_data.py bin + +Pythonçæ¬å¯ä»¥ç±å¦ä¸æä»¤ä¸è½½ + + python download_data.py py + +### è®ç» + +è¿éæ4个è®ç»ç¨åº + +1.train.pyãä¸é¢çæä»¤å°ä¼ç¨'cifar-10-batches-py'åºä¸çpythonçæ¬çCifar-10æ°æ®éè®ç»VGG模åã + + python train.py vgg cifar-10-batches-py + + è¦è®ç»å ¶ä»æ¨¡åï¼è¯·ç¨'alexnet'ï¼'resnet'æ'caffe'æ¿æ¢'vgg'ãå ¶ä¸ï¼'caffe'æç±caffeçAlexNet转æ¢ç模åãé»è®¤æ åµä¸ï¼æ¨¡åå°å¨CudaGPU设å¤ä¸è®ç»ï¼è¥æ³è¦å¨CppCPUä¸è¿è¡ï¼éæ·»å é¢å¤çåæ° + + python train.py vgg cifar-10-batches-py --use_cpu + +2.alexnet.ccãå®éè¿è°ç¨CPP APIå¨CudaGPUä¸è®ç»AlexNet模åã + + ./run.sh + +3.alexnet-parallel.ccãå®éè¿è°ç¨CPP APIå¨ä¸¤ä¸ªCudaGPUä¸è®ç»AlexNet模åã两个设å¤ä¸åæ¶è¿è¡å¹¶è®¡ç®æ¨¡ååæ°çæ¢¯åº¦ï¼ç¶åå®ä»¬ä¼å¨CPU设å¤ä¸åå¹³åå¹¶ç¨äºæ´æ°åæ°ã + + ./run-parallel.sh + +4.vgg-parallel.ccãå®è°ç¨CPP APIå¨ä¸¤ä¸ªCudaGPU设å¤ä¸è®ç»VGG模åï¼åalexnet-parallel.cc类似ã + +### 颿µ + +predict.pyå å«é¢æµå½æ° + + def predict(net, images, dev, topk=5) + +netéè¿å è½½å åè®ç»å¥½çæ¨¡åæ¥è¢«å建ï¼imageså å«å¾åçnumpyæ°ç»ï¼æ¯å¼ å¾åä¸è¡ï¼ï¼devæ¯è®ç»æ¶ç设å¤ï¼ä¾å¦ï¼ä¸ä¸ªCudaGPUè®¾å¤æè CppCPU设å¤ï¼å®å°è¿åæ¯ä¸ªå®ä¾çtopkæ ç¾ã + +Predict.pyæä»¶ä¸»å½æ°æä¾äºç¨é¢è®ç»ç模å为æ°å¾çå颿µçä¾åã'mode.bin'æä»¶ç±è®ç»ç¨åºçæï¼éè¦è¢«æ¾ç½®å¨cifarç®å½ä¸æ§è¡ + + python predict.py Added: incubator/singa/site/trunk/zh/_sources/docs/model_zoo/imagenet/alexnet/README.md.txt URL: http://svn.apache.org/viewvc/incubator/singa/site/trunk/zh/_sources/docs/model_zoo/imagenet/alexnet/README.md.txt?rev=1833193&view=auto ============================================================================== --- incubator/singa/site/trunk/zh/_sources/docs/model_zoo/imagenet/alexnet/README.md.txt (added) +++ incubator/singa/site/trunk/zh/_sources/docs/model_zoo/imagenet/alexnet/README.md.txt Fri Jun 8 15:29:00 2018 @@ -0,0 +1,46 @@ +# å¨ImageNetä¸è®ç»AlexNet + +å·ç§¯ç¥ç»ç½ç»ï¼CNNï¼æ¯ä¸ç§å¹¿æ³ç¨äºå¾ååè§é¢åç±»çåé¦ç¥ç»ç½ç»ã å¨è¿ä¸ªä¾åä¸ï¼æä»¬å°ä½¿ç¨[深度CNN模å](http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks)æ¥å¯¹ImageNetæ°æ®éè¿è¡å¾ååç±»ã + +## æä½è¯´æ + +### ç¼è¯SINGA + +请ç¨CUDAï¼CUDNNåOpenCVç¼è¯SINGAã æ¨å¯ä»¥æå¨æå¼CMakeLists.txtä¸çé项æå¨build /æä»¶å¤¹ä¸è¿è¡`ccmake ..`è¿è¡é ç½®ã + +æä»¬å·²ç»å¨CuDNN V4åV5ï¼V5éè¦Cuda7.5ï¼ä¸è¿è¡äºæµè¯ã + + +### æ°æ®ä¸è½½ +* 请åèå建[ImageNet 2012æ°æ®é](https://github.com/amd/OpenCL-caffe/wiki/Instructions-to-create-ImageNet-2012-data)çæ¥éª¤1-3ä¸è½½åå åæ°æ®ã +* ä½ å¯ä»¥éè¿[get_ilsvrc_aux.sh](https://github.com/BVLC/caffe/blob/master/data/ilsvrc12/get_ilsvrc_aux.sh)æä»[ImageNet](http://www.image-net.org/download-images)ä¸è½½è®ç»åéªè¯éã + +### æ°æ®é¢å¤ç +* åè®¾ä½ å·²ç»ä¸è½½äºæ°æ®åæè¿°æä»¶ã ç°å¨æä»¬åºè¯¥å°æ°æ®è½¬æ¢ä¸ºäºè¿å¶æä»¶ãä½ å¯ä»¥è¿è¡ï¼ + + sh create_data.sh + + è¿ä¸ªèæ¬ä¼å¨æå®è¾åºç®å½ä¸çæä¸ä¸ªæµè¯æä»¶ï¼`test.bin`ï¼ï¼å弿件ï¼`mean.bin`ï¼åä¸äºè®ç»æä»¶ï¼`trainX.bin`ï¼ã +* ä½ ä¹å¯ä»¥æ¹å`create_data.sh`çåæ°ã + + `-trainlist <file>`: è®ç»æ°æ®å表æä»¶; + + `-trainfolder <folder>`: è®ç»å¾çæå¨æä»¶å¤¹; + + `-testlist <file>`: æµè¯æ°æ®å表æä»¶; + + `-testfolder <floder>`: æµè¯å¾åæå¨æä»¶å¤¹; + + `-outdata <folder>`: ä¿åè¾åºæä»¶çæä»¶å¤¹ï¼å æ¬å¹³åå¼ï¼è®ç»åæµè¯æä»¶ã è¯¥èæ¬å°å¨æå®çæä»¶å¤¹ä¸çæè¿äºæä»¶; + + `-filesize <int>`: 卿¯ä¸ªäºè¿å¶æä»¶ä¸åå¨çè®ç»å¾ç个æ°. + +### è®ç» +* åå¤å¥½æ°æ®åï¼ä½ å¯ä»¥è¿è¡ä¸é¢æä»¤æ¥è®ç»AlexNet模åã + + sh run.sh + +* ä½ å¯ä»¥æ¹å`run.sh`çåæ°ã + + `-epoch <int>`: è¦è®ç»çepochæ°ç®ï¼é»è®¤ä¸º90; + + `-lr <float>`: åºç¡å¦ä¹ çï¼å¦ä¹ çå°åå°æ¯20ä¸ªæ¶æï¼æ´å ·ä½å°ï¼lr = lr * expï¼0.1 *ï¼epoch / 20ï¼ï¼; + + `-batchsize <int>`: æ¹æ°ç®ï¼å®åºè¯¥æ ¹æ®ä½ çå åèæ¹å; + + `-filesize <int>`: åå¨å¨æ¯ä¸ªäºè¿å¶æä»¶ä¸çè®ç»å¾åçæ°éï¼ä¸æ°æ®é¢å¤çä¸çæä»¶å¤§å°ç¸å; + + `-ntrain <int>`: è®ç»å¾ççæ°ç®; + + `-ntest <int>`: æµè¯å¾ççæ°ç®; + + `-data <folder>`: åå¨äºè¿å¶æä»¶çæä»¶å¤¹ï¼å®æ°å¥½æ¯æ°æ®é¢å¤çæ¥éª¤ä¸çè¾åºæä»¶å¤¹; + + `-pfreq <int>`: æå°å½å模åç¶æï¼æå¤±åå确度ï¼çé¢çï¼ä»¥æ¹æ°æ®ä¸ºåä½ï¼; + + `-nthreads <int>`: å è½½ä¼ ç»æ¨¡åçæ°æ®ææççº¿ç¨æ°ã
