id: version-3.1.0_Chinese-install-win title: Build SINGA on Windows original_id: install-win

在Microsoft Windows上从源码构建SINGA的过程有四个部分:安装依赖关系、构建SINGA源码、(可选择)安装python模块和(可选择)运行单元测试。

安装依赖项

你可以创建一个文件夹来构建依赖关系。

使用到的依赖项有:

  • 编译器和IDE:

  • CMake

    • 可以从 http://cmake.org/ 下载
    • 确保 cmake 可执行文件的路径在系统路径中,或者在调用 cmake 时使用完整路径。
  • SWIG

    • 可以从 http://swig.org/ 下载
    • 确保swig可执行文件的路径在系统路径中,或者在调用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。
    • 将这两个文件解压到dependencies文件夹中,将protoc可执行文件的路径添加到系统路径中,或者在调用它时使用完整路径。
    • 打开Visual Studio solution,它可以在vsproject文件夹中找到。
    • 将build settings改为Release和x64。
    • 构建libprotobuf项目。
  • Openblas

    • http://www.openblas.net 下载合适的源码,如0.2.20。
    • 将源码解压到dependencies文件夹中。
    • 如果你没有安装Perl,请下载一个perl环境,如Strawberry Perl (http://strawberryperl.com/)。
    • 在源文件夹中运行此命令来构建Visual Studio解决方案:
    cmake -G "Visual Studio 15 2017 Win64"
    
    • 打开Visual Studio解决方案并将build settings更改为Release和x64。
    • 构建libopenblas项目。
  • Google glog

    • 下载一个合适的版本,如0.3.5: https://github.com/google/glog/releases
    • 将源码解压到dependencies文件夹中。
    • 打开Visual Studio solution.
    • 将build settings改为Release and x64.
    • 构建libglog项目。

构建SINGA源代码

  • 下载SINGA源代码

  • 编译protobuf文件:

    • 在src/proto目录中:
    mkdir python_out
    protoc.exe *.proto --python_out python_out
    
  • 为C++和Python生成swig接口:在src/api目录中:

    swig -python -c++ singa.i
    
  • 生成SINGA的Visual Studio解决方案:在SINGA源码根目录中:

    mkdir build
    cd build
    
  • 调用 cmake 并添加系统路径,类似于下面的例子:

    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路径。

  • 添加numpy的include路径。

  • 添加protobuf的include路径。

  • 在 singa_objects 项目的预处理程序定义中, 添加 USE_GLOG。

  • 构建singa_objects项目。

  • 在singa项目中:

    • 将singa_wrap.obj添加到对象库。
    • 将目标名称改为"_singa_wrap"。
    • 将目标扩展名为.pyd。
    • 将配置类型改为动态库(.dll)。
    • 进入Additional Library Directories,添加路径到python、openblas、protobuf和glog库。
    • 在Additional Dependencies中添加libopenblas.lib、libglog.lib和libprotobuf.lib。
  • 构建singa项目

安装python模块

  • 将build/python/setup.py中的_singa_wrap.so改为_singa_wrap.pyd

  • src/proto/python_out中的文件复制到build/python/singa/proto中。

  • (可选)创建并激活一个虚拟环境:

    mkdir SingaEnv
    virtualenv SingaEnv
    SingaEnv\Scripts\activate
    
  • 进入build/python文件夹,运行:

    python setup.py install
    
  • 将 _singa_wrap.pyd、libglog.dll 和 libopenblas.dll 添加到路径中,或者将它们复制到 python site-packages 中的 singa package 文件夹中。

  • 通过运行如下命令,来验证SINGA是否安装成功:

    python -c "from singa import tensor"
    

构建过程的视频教程可以在这里找到:

youtube video

运行单元测试

  • 在测试文件夹中,生成Visual Studio解决方案:

    cmake -G "Visual Studio 15 2017 Win64"
    
  • 在Visual Studio中打开生成的解决方案。

  • 更改build settings为Release和x64。

  • 构建glog项目。

  • 在test_singa项目中:

    • 将 USE_GLOG 添加到Preprocessor Definitions中。
    • 在 Additional Include Directories 中, 添加上面第 2 步中使用的 GLOG_INCLUDE_DIR、 CBLAS_INCLUDE_DIR 和 Protobuf_INCLUDE_DIR 的路径。同时添加build和build/include文件夹。
    • 转到Additional Library Directories,添加openblas、protobuf和glog库的路径。同时添加 build/src/singa_objects.dir/Release。
    • 转到 Additional Dependencies 并添加 libopenblas.lib、libglog.lib 和 libprotobuf.lib。修改两个库的名字:gtest.lib和singa_objects.lib。
  • 构建test_singa项目。

  • 将libglog.dll和libopenblas.dll添加到路径中,或者将它们复制到test/release文件夹中,使其可用。

  • 单元测试可以通过如下方式执行:

    • 从命令行:
    test_singa.exe
    
    • 从Visual Studio:
      • 右键点击test_singa项目,选择 “Set as StartUp Project”。
      • 在Debug菜单中,选择‘Start Without Debugging’。

单元测试的视频教程可以在这里找到:

youtube video

构建包含cuda的GPU支持

在本节中,我们将扩展前面的步骤来启用GPU。

安装依赖项

除了上面第1节的依赖关系外,我们还需要以下内容:

构建SINGA源代码

  • 调用 cmake 并添加系统路径,类似于下面的例子:
    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目录中:

    swig -python -c++ singa.i
    
  • 在Visual Studio中打开生成的解决方案

  • 将build settings改为Release和x64

构建singa_objects

  • 将src/api中的singa_wrap.cxx文件添加到singa_objects项目中。
  • 在 singa_objects 项目中,打开 Additional Include Directories。
  • 添加Python的include路径
  • 添加numpy include路径
  • 添加protobuf包括路径
  • 增加CUDA、cuDNN和cnmem的包含路径。
  • 在 singa_objects 项目的预处理程序定义中, 加入 USE_GLOG、 USE_CUDA 和 USE_CUDNN。删除 DISABLE_WARNINGS。
  • 建立 singa_objects 项目

构建singa-kernel

  • 创建一个新的Visual Studio项目,类型为 “CUDA 9.1 Runtime”。给它起个名字,比如singa-kernel。

  • 该项目自带一个名为kernel.cu的初始文件,从项目中删除这个文件。

  • 添加这个文件:src/core/tensor/math_kernel.cu。

  • 在项目设置中。

    • 将平台工具集设置为 “Visual Studio 2015 (v140)”
    • 将 "配置类型 "设置为 “静态库(.lib)”
    • 在include目录中,添加build/include。
  • 建立singa-kernel项目

构建singa

  • 在singa项目中:

    • 将singa_wrap.obj添加到对象库中。
    • 将目标名称改为"_singa_wrap"。
    • 将目标扩展名为.pyd。
    • 将配置类型改为动态库(.dll)。
    • 到Additional Library Directories中添加python、openblas的路径。protobuf和glog库。
    • 同时添加singa-kernel、cnmem、cuda和cudnn的library path。
    • 到Additional Dependencies,并添加libopenblas.lib、libglog.lib和 libprotobuf.lib。
    • 另外还要添加:singa-kernel.lib、cnmem.lib、cudnn.lib、cuda.lib、cublas.lib。curand.lib和cudart.lib。
  • 构建singa项目。

Install Python module

  • 将 build/python/setup.py 中的 _singa_wrap.so 改为 _singa_wrap.pyd。

  • 将 src/proto/python_out 中的文件复制到 build/python/singa/proto 中。

  • (可选) 创建并激活虚拟环境:

    mkdir SingaEnv
    virtualenv SingaEnv
    SingaEnv\Scripts\activate
    
  • 进入build/python文件夹,运行:

    python setup.py install
    
  • 将 _singa_wrap.pyd, libglog.dll, libopenblas.dll, cnmem.dll, CUDA Runtime (例如 cudart64_91.dll) 和 cuDNN (例如 cudnn64_7.dll) 添加到路径中,或者将它们复制到 python site-packages 中的 singa package 文件夹中。

  • 通过运行如下命令来验证SINGA是否已经安装:

    python -c "from singa import device; dev = device.create_cuda_gpu()"
    

这个部分的视频教程可以在这里找到:

youtube video

运行单元测试

  • 在测试文件夹中,生成Visual Studio解决方案:

    cmake -G "Visual Studio 15 2017 Win64"
    
  • 在Visual Studio中打开生成的解决方案,或者将项目添加到步骤5.2中创建的singa解决方案中。

  • 将build settings改为Release和x64。

  • 构建 glog 项目。

  • 在test_singa项目中:

    • 将 USE_GLOG; USE_CUDA; USE_CUDNN 添加到Preprocessor Definitions中。
    • 在 Additional Include Directories 中, 添加上面 5.2 中使用的 GLOG_INCLUDE_DIR、 CBLAS_INCLUDE_DIR 和 Protobuf_INCLUDE_DIR 的路径。同时添加build、build/include、CUDA和cuDNN的include文件夹。
    • 转到Additional Library Directories,添加openblas、protobuf和glog库的路径。同时添加 build/src/singa_objects.dir/Release、singa-kernel、cnmem、CUDA 和 cuDNN 库的路径。
    • 在Additional Dependencies中添加libopenblas.lib; libglog.lib; libprotobuf.lib; cnmem.lib; cudnn.lib; cuda.lib; cublas.lib; curand.lib; cudart.lib; singa-kernel.lib。修正两个库的名字:gtest.lib和singa_objects.lib。
  • 构建.

  • 将libglog.dll、libopenblas.dll、cnmem.dll、cudart64_91.dll和cudnn64_7.dll添加到路径中,或将它们复制到test/release文件夹中,使其可用。

  • 单元测试可以通过如下方式执行:

    • 从命令行:

      test_singa.exe
      
    • 从 Visual Studio:

      • 右键点击test_singa项目,选择 ‘Set as StartUp Project’.
      • 从Debug菜单,选择 ‘Start Without Debugging’

运行单元测试的视频教程可以在这里找到:

youtube video