SINGA-294 Add instructions for CUDA support on Windows
Project: http://git-wip-us.apache.org/repos/asf/incubator-singa/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-singa/commit/2195af2f Tree: http://git-wip-us.apache.org/repos/asf/incubator-singa/tree/2195af2f Diff: http://git-wip-us.apache.org/repos/asf/incubator-singa/diff/2195af2f Branch: refs/heads/master Commit: 2195af2f03b48d082bd1913a094fca73221b61c9 Parents: 00573e2 Author: Moaz Reyad <[email protected]> Authored: Sun May 13 20:58:13 2018 +0800 Committer: Moaz Reyad <[email protected]> Committed: Sun May 13 20:58:13 2018 +0800 ---------------------------------------------------------------------- doc/en/docs/install_win.rst | 148 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/2195af2f/doc/en/docs/install_win.rst ---------------------------------------------------------------------- diff --git a/doc/en/docs/install_win.rst b/doc/en/docs/install_win.rst index 4ab4ae5..8b6be0c 100644 --- a/doc/en/docs/install_win.rst +++ b/doc/en/docs/install_win.rst @@ -218,3 +218,151 @@ A video tutorial for running the unit tests can be found here: +---------+ +5. Build GPU support with CUDA +------------------------------ + +In this section, we will extend the previous steps to enable GPU. + +5.1 Install Dependencies +------------------------ + +In addition to the dependencies in section 1 above, we will need the following: + +* CUDA + + Download a suitable version such as 9.1 from https://developer.nvidia.com/cuda-downloads . Make sure to install the Visual Studio integration module. + +* cuDNN + + Download a suitable version such as 7.1 from https://developer.nvidia.com/cudnn + +* cnmem: + + * Download the latest version from https://github.com/NVIDIA/cnmem + * Build the Visual Studio solution: + + .. code-block:: bash + + cmake -G "Visual Studio 15 2017 Win64" + + * Open the generated solution in Visual Studio. + * Change the build settings to Release and x64. + * Build the cnmem project. + + +5.2 Build SINGA source +---------------------- + +* Call cmake and add the paths in your system similar to the following example: + + .. 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 ^ + .. + + +* Generate swig interfaces for C++ and Python: + Goto src/api + + .. code-block:: bash + + swig -python -c++ singa.i + +* Open the generated solution in Visual Studio + +* Change the build settings to Release and x64 + +5.2.1 Building singa_objects +---------------------------- + +* Add the singa_wrap.cxx file from src/api to the singa_objects project +* In the singa_objects project, open Additional Include Directories. +* Add Python include path +* Add numpy include path +* Add protobuf include path +* Add include path for CUDA, cuDNN and cnmem +* In the preprocessor definitions of the singa_objects project, add USE_GLOG, USE_CUDA and USE_CUDNN. Remove DISABLE_WARNINGS. +* Build singa_objects project + +5.2.2 Building singa-kernel +--------------------------- + +* Create a new Visual Studio projcet of type "CUDA 9.1 Runtime". Give it a name such as singa-kernel. +* The project comes with an initial file called kernel.cu. Remove this file from the project. +* Add this file: src/core/tensor/math_kernel.cu +* In the project settings: + + * Set Platfrom Toolset to "Visual Studio 2015 (v140)" + * Set Configuration Type to " Static Library (.lib)" + * In the Include Directories, add build/include. + +* Build singa-kernel project + + +5.2.3 Building singa +-------------------- + +* In singa project: + * add singa_wrap.obj to Object Libraries + * change target name to _singa_wrap + * change target extension to .pyd + * change configuration type to Dynamic Library (.dll) + * goto Additional Library Directories and add the path to python, openblas, protobuf and glog libraries + * Add also the library path to singa-kernel, cnmem, cuda and cudnn. + * goto Additional Dependencies and add libopenblas.lib, libglog.lib and libprotobuf.lib. + * Add also: singa-kernel.lib, cnmem.lib, cudnn.lib, cuda.lib , cublas.lib, curand.lib and cudart.lib. + +* build singa project + +5.3. Install Python module +-------------------------- + +* Change _singa_wrap.so to _singa_wrap.pyd in build/python/setup.py +* Copy the files in src/proto/python_out to build/python/singa/proto + +* Optionally create and activate a virtual environment: + +.. code-block:: bash + + mkdir SingaEnv + virtualenv SingaEnv + SingaEnv\Scripts\activate + +* goto build/python folder and run: + +.. code-block:: bash + + python setup.py install + +* Make _singa_wrap.pyd, libglog.dll, libopenblas.dll, cnmem.dll, CUDA Runtime (e.g. cudart64_91.dll) and cuDNN (e.g. cudnn64_7.dll) available by adding them to the path or by copying them to singa package folder in the python site-packages + +* Verify that SINGA is installed by running: + +.. code-block:: bash + + python -c "from singa import device; dev = device.create_cuda_gpu()" + +A video tutorial for this part can be found here: + + +.. |video| image:: https://img.youtube.com/vi/YasKVjRtuDs/0.jpg + :scale: 100% + :align: middle + :target: https://www.youtube.com/watch?v=YasKVjRtuDs + ++---------+ +| |video| | ++---------+
