admin 管理员组

文章数量: 887021

本文参考了网络上其它文档,具体不再一个个致谢,前辈们都是强大的指明灯!根据自己的具体情况进行了修改或勘误,血泪之作,仅供菜鸟借鉴使用,注意,菜鸟,高手就不要瞎BB了。
(明明很简单的事情,但是作为新手,这玩意居然折腾了伦家好几天,有些不开心)


  1. 安装VS2013。
    伦家的VS2013为中文版。
    (实验室那个盗版的VS2013不知道哪里缺文件,并不能用;VS2015的社区版本不支持cross,也就算了,装了VS2015的专业版,不知道哪里出问题,居然连界面都进不去,有点愤怒的feel…)

  1. 安装cuda_8.0。
    官网下载直接next安装,需要记住安装的路径,不讲。以前的版本分sdk、doc、toolkit三个安装部分,新的变成了Samples、doc、Development,其实木有太大区别,Samples=sdk。
    (然而作为菜鸟的我,第一次安装的时候,根据网上历史版本的教程居然不知道哪个是哪个,需要注意的是,如果安装后需要卸载一定要卸载干净,注册表要删了,不然下次一定提示你library目录安装不了)

  1. 设置环境变量:
    安装完毕后,在计算机上点右键,打开属性->高级系统设置->环境变量,可以看到系统中多了CUDA_PATH和CUDA_PATH_V8_0两个环境变量,接下来,还要在系统中添加以下几个环境变量:
      CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0
      CUDA_LIB_PATH = %CUDA_PATH%\lib\x64
      CUDA_BIN_PATH = %CUDA_PATH%\bin
      CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
    CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
    伦家的安装路径是默认的,所以添加的路径分别是下面这样的:
    CUDA_PATH
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0
    CUDA_PATH_V8_0
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0
    CUDA_SDK_PATH
    C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0
    CUDA_LIB_PATH
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64
    CUDA_BIN_PATH
    C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin
    CUDA_SDK_BIN_PATH
    C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\bin\win64
    CUDA_SDK_LIB_PATH
    C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\common\lib\x64
    然后,在系统变量 PATH 的末尾添加:
     ;%CUDA_LIB_PATH%;%CUDA_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_BIN_PATH%;
    ;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\common\lib\x64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\bin\win64;
    重新启动计算机。
    至此,cuda的安装就搞定了。

  1. 监测cuda安装成功与否:
    这个步骤用到两个东西,都是cuda为我们准备好的: deviceQuery.exe 和 bandwithTest.exe
    首先启动cmd DOS命令窗口
    默认进来的是c:\users\Admistrator>路径,输入 cd … 两次,来到c:目录下
    输入dir 找到安装的cuda文件夹

    直接执行bandwidthTest.exe
    该文件的路径:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\extras\demo_suite

    再执行deviceQuery.exe
    该文件的路径:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\extras\demo_suite


    Rsult=PASS及说明,都通过了。如果Rsult=Fail 那不好意思,重新安装吧。

  1. 配置VS 2013
      5.1 启动VS2013
    5.2 新建一个win32的控制台工程,空的。

    伦家的保存路径:c:\users\lvfeiya\documents\visual studio 2013\Projects

5.3 右键源文件文件夹->新建项->选择cuda c/c+± Header>新建一个以.cu结尾的文件

保存路径:
c:\Users\lvfeiya\documents\visual studio 2013\Projects\sevenCuda\sevenCuda
  5.4 右键sevenCuda-》生成依赖项-》生成自定义-》选择cuda生成

  5.5 右键test.cu-》属性-》选择cuda c/c++编译器

5.6 右键工程-》属性-》链接器-》常规-》附加库目录-》添加目录 $(CUDA_PATH_V5_5)\lib$(Platform);

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib(Platform)
$(CUDA_PATH_V8_0)\lib$(Platform);

(伦家也不知道究竟是上面的还是下面的格式,,,反正伦家添加的是下面的)

  5.7 在链接器-》输入中添加 cudart.lib

  5.8 在工具-》选项-》文本编辑器-》文件扩展名-》添加cu \cuh两个文件扩展名
这个设置是让VS2010编辑.cu文件时,把.cu文件里的C/C++语法高亮。在VS2013的菜单 依次点击:Tools->Options…->Text Editor->File Extension,添加.cu和.cuh,使之采用C++编辑器。

测试程序

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>

int main() {
    int deviceCount;
    cudaGetDeviceCount(&deviceCount);

    int dev;
    for (dev = 0; dev < deviceCount; dev++)
    {
        int driver_version(0), runtime_version(0);
        cudaDeviceProp deviceProp;
        cudaGetDeviceProperties(&deviceProp, dev);
        if (dev == 0)
            if (deviceProp.minor = 9999 && deviceProp.major == 9999)
                printf("\n");
        printf("\nDevice%d:\"%s\"\n", dev, deviceProp.name);
        cudaDriverGetVersion(&driver_version);
        printf("CUDA驱动版本:                                   %d.%d\n", driver_version / 1000, (driver_version % 1000) / 10);
        cudaRuntimeGetVersion(&runtime_version);
        printf("CUDA运行时版本:                                 %d.%d\n", runtime_version / 1000, (runtime_version % 1000) / 10);
        printf("设备计算能力:                                   %d.%d\n", deviceProp.major, deviceProp.minor);
        printf("Total amount of Global Memory:                  %u bytes\n", deviceProp.totalGlobalMem);
        printf("Number of SMs:                                  %d\n", deviceProp.multiProcessorCount);
        printf("Total amount of Constant Memory:                %u bytes\n", deviceProp.totalConstMem);
        printf("Total amount of Shared Memory per block:        %u bytes\n", deviceProp.sharedMemPerBlock);
        printf("Total number of registers available per block:  %d\n", deviceProp.regsPerBlock);
        printf("Warp size:                                      %d\n", deviceProp.warpSize);
        printf("Maximum number of threads per SM:               %d\n", deviceProp.maxThreadsPerMultiProcessor);
        printf("Maximum number of threads per block:            %d\n", deviceProp.maxThreadsPerBlock);
        printf("Maximum size of each dimension of a block:      %d x %d x %d\n", deviceProp.maxThreadsDim[0],
            deviceProp.maxThreadsDim[1],
            deviceProp.maxThreadsDim[2]);
        printf("Maximum size of each dimension of a grid:       %d x %d x %d\n", deviceProp.maxGridSize[0], deviceProp.maxGridSize[1], deviceProp.maxGridSize[2]);
        printf("Maximum memory pitch:                           %u bytes\n", deviceProp.memPitch);
        printf("Texture alignmemt:                              %u bytes\n", deviceProp.texturePitchAlignment);
        printf("Clock rate:                                     %.2f GHz\n", deviceProp.clockRate * 1e-6f);
        printf("Memory Clock rate:                              %.0f MHz\n", deviceProp.memoryClockRate * 1e-3f);
        printf("Memory Bus Width:                               %d-bit\n", deviceProp.memoryBusWidth);
    }

    return 0;
}

至此,编译环境的相关搭建就完成了。
https://wwwblogs/wayne793377164/p/8185404.html


  1. 安装Anaconda
    Anaconda包含了Theano所需的各种Python库,用它来安装Python环境的确非常方便,安装的时候勾选把Anaconda加到环境变量中。Anaconda的位数要跟你的cuda版本一样,选择的都是64 bit。
    安装目录我用的E:\Anapy2。
    安装完检查一下,打开cmd命令行:

    装完以后别着急下一步:
    验证BLAS是否安装成功
    由于numpy是依赖BLAS的,如果BLAS没有安装成功,虽然numpy亦可以安装,但是无法使用BLAS的加速。验证numpy是否成功依赖BLAS编译:
    python

import numpy
id(numpy.dot) == id(numpy.core.multiarray.dot)
False
结果为False表示成功使用BLAS加速,如果是Ture则表示用的是python的实现,没有加速。 状况不解决的话,之后theano库跑一些例子会爆类似cannot find -lf77blas-lcblas-latlas的错误.简单处理:重装
(伦家这个居然怎么弄都是false,(>_<),教程里都是骗人的,伦家试了,重装无效)
也可以考虑MKL(收费的)和OpenBLAS。
这里给出两个库的一些安装方面的博客和讨论帖:
http://ijiaer/python-with-mkl-hpc/(mkl)
https://www.kaggle/c/otto-group-product-classification-challenge/forums/t/13973/a-few-tips-to-install-theano-on-windows-64-bits/93135(OpenBLAS)


  1. 安装MingW
    貌似Anaconda-2.之前的版本是内置了MinGW环境的,之后就不带MinGW了。(查看C:\Anaconda下有无MinGW目录)
    安装方法:
  2. 打开CMD(注意是windows命令提示符,并不是进入到python环境下);
  3. 输入conda install mingw libpython,然后回车,会出现安装进度,稍等片刻即可安装完毕。此时就有C:\Anaconda\MinGw目录了。 (网速一定要好,网速不好会出现一串的false)
    可在windows命令行中输入g++ -v来查看是否安装成功:

    环境配置
    1). 编辑用户变量中的path变量,在后边追加C:\Anaconda;C:\Anaconda\Scripts; 不要漏掉分号,此处需要根据自己的安装目录填写。
    伦家的路径:E:\Anapy2; E:\Anapy2\Scripts
    2). 在你的系统环境变量里面的path中加入 C:\Anaconda\MinGW\bin;C:\Anaconda\MinGW\x86_64-w64-mingw32\lib即可。
    E:\Anapy2\MinGW\bin; E:\Anapy2\MinGW\x86_64-w64-mingw32\lib
    在系统变量中新建变量PYTHONPATH,变量值为C:\Anaconda\Lib\site-packages\theano;
    PYTHONPATH
    E:\Anapy2\Lib\site-packages\theano;
    此处就是指明安装的theano的目录是哪,theano会在后面安装,正常安装的默认路径就是这个。
    3). 打开cmd,会看到窗口里边有个路径C:\Users\FYB>,即home目录,在此目录下新建 .theanorc.txt 文件(作为theano的配置文件,注意名字中的第一个“.”,如果已经存在,则直接修改该文件),设置如下内容:
    所谓cmd的home目录:打开cmd时,在>前面的默认路径:

    [global]
    openmp=False
    [blas]
    ldflags =
    [gcc]
    cxxflags = -ID:\Anaconda\MinGW\include
    cxxflags = -IE:\Anapy2\MinGW
    一定要是你安装的Anaconda的路径,一定不要弄错,否则找不到MinGw。
    重启电脑!
  4. 测试theano是否安装成功
    测试方法1 :
    import theano
    print theano.config.blas.ldflags

    没有出错(没有返回值)则说明已经配置成功。
    其实单单是import theano不报错就已经谢天谢地了。
    测试方法2
    用下面的指令测试(测试时会有其他错误提示或是warnings,但基本上还能运行的话则说明theano没问题,错误提示可能是有些东西还没安装好):
    import theano
    theano.test()
    运行:

    测试时示没有nose-parameterized这个模块,安装方法:
    pip install nose-parameterized
    注意:测试2必须在cpu下运行,如果配置了theano的device = gpu,则测试2就不能运行了。

  1. 使用GPU
    上面的theano配置只是完成了上半部分,这个时候还不能进行gpu加速。如果使用GPU则需要继续以下步骤:
    Theano文件配置(GPU)——编辑Theano的配置文件.theanorc.txt , 添加如下内容:
    [global]
    openmp = False
    device = gpu
    floatX = float32
    allow_input_downcast = True
    base_compiledir = path_to_a_directory+without_such_characters
    [blas]
    ldflags =
    [gcc]
    cxxflags=-IE:\Anapy2\MinGW
    [nvcc]
    fastmath = True
    flags = -LE:\Anapy2\libs
    compiler_bindir = H:\VS2013\VC\bin
    [lib]
    cnmem=.75
    在Python中运行”import theano.sandbox.cuda”. 将会编译第一个Cuda文件, 应当没有错误产生。
  2. 测试是否使用GPU
    测试方法1:
    import theano

    讲道理,出现红框就说明已经配置好了!
    如果是CNMeM is disabled,就是因为你没有在Theano的配置文件.theanorc.txt里面添加
    [lib]
    cnmem=.75
    如果就cuDNN不能用,就需要去官网下载cuDNN,需要先注册,下载以后把解压后的三个子文件分别添加到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0下面相应的bin、lib、include文件里。(很奇怪的是在没有添加之前是没有出现篮框里面的bug和警告的,添加以后就出现警告了,而且无解,前辈们都说这个不影响运行,然后宝宝每次看到这些都感觉心里苦极了)
    编译目标GPU指令集的命令选项
    -arch: 指定nvcc编译目标GPU的型号,可以为“real” GPU,也可以为“virtual” PTX架构。这个选项指定了nvcc编译到PTX阶段的目标架构,而-code选项指定了nvcc最后阶段生成的运行时代码的目标架构。现阶段支持的架构类型有:virtual 架构 compute_10, compute_11, compute_12, compute_13和实现这些虚架构的real GPU sm_10, sm_11, sm_12, sm_13.
    测试方法2:
    启动Spyder,下面的Theano GPU加速测试案例代码并运行
    • #!/usr/bin/env python
    • # -- coding: utf-8 --

    • “”"
    • 功能:测试是否使用GPU
    • 时间:2016年6月10日 11:20:10
    • “”"

    • from theano import function, config, shared, sandbox
    • import theano.tensor as T
    • import numpy
    • import time

    • vlen = 1030768 # 10 x cores x threads per core
    • iters = 1000

    • rng = numpy.random.RandomState(22)
    • x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
    • f = function([], T.exp(x))
    • print(f.maker.fgraph.toposort())
    • t0 = time.time()
    • for i in range(iters):
    • r = f()
    • t1 = time.time()
    • print(‘Looping %d times took’ % iters, t1 - t0, ‘seconds’)
    • print(‘Result is’, r)

    • if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
    • print(‘Used the cpu’)
    • else:
    • print(‘Used the gpu’)
    如果出现下图所示的运行结果,其中有一条“Used the gpu”信息输出,表明Theano GPU加速测试成功。

    有木有发现我这里内存很高,关闭spyder,再从电脑左下角的程序那里打开,竟然加载不动,不是kernal failed就是进不去界面,不知道是什么幺蛾子,果断cmd命令行卸载重装,然而并木有鸟用!但是可以从Anaconda的安装文件里找到spyder.exe文件(路径是:E:\Anapy2\Scripts),发送快捷方式到桌面再打开,搞定!伦家估计是因为前面重装了好几次Anaconda,可能注册表啥子的木有删除完全。
    终于剩下两个不影响使用的bug:
    1, 不能使用blas加速;
    2, Python运行的时候会提示DEBUG: nvcc STDOUT nvcc warning.

Bingo !!!

本文标签: 环境 CUDA