当前位置:   article > 正文

深度学习配置CUDA8.0/9.0及对应版本cuDNN安装

深度学习配置CUDA8.0/9.0及对应版本cuDNN安装

本人为中科院测地所博士生,所研究专业为自然地理学(遥感数据分析方向),研究课题偏向于深度学习

由于本人不是计算机专业,故有关计算机配置及操作方面相较于计算机专业人员不是那么专业。所以请各位大牛大神绕道,我这里所做的一些工作比较浅显,仅供需要的各位一起交流。

在深度学习的配置环境过程中,第一步则是需要安装microsoft的visual studio。这个在本人的第一篇博客中已经说明。接下来,在深度学习的过程中,需要用GPU计算加快计算速度。笔者电脑的配置是win10+E5服务器cpu+N卡1070显卡。因此可以安装CUDA。关于CUDA的概念及作用在此我就不再赘述了,各位读者可以自行百度或在NVIDIA官网上查看。在此我贴出的是安装过程。

在配置深度学习的过程中,国外大牛有使用CUDA6.5/7.5/8.0/9.0的,深度学习及显卡计算能力发展快速,CUDA6.5及7.5即将淘汰,或与笔者的1070显卡不兼容(因为10系列采用了全新的帕斯卡架构),为了防止出现一些不兼容的错误及各版本都能计算,我同时安装了主流的CUDA8.0,及与10系列显卡兼容的最新CUDA9.1。

需要注意的第一点是,在配置时,vs2013=Microsoft Visual Studio 12.0,vs2015=Microsoft Visual Studio 14.0。建议CUDA9.1使用VS2015,CUDA8.0使用VS2013。本质上并没有区别,但为了区分方便而已。

需要注意的第二点是,两者可以安装在一台电脑上并不冲突。作者在搜索度娘时有人回答:可以同时安装,但必须先安装低版本(CUDA8.0)再安装高版本(CUDA9.0/9.1),对此笔者并没有证实,不知道所言是否正确。但为了电脑不会出什么差错,我还是先安装了8.0,再安装了9.1.实测并不冲突,可以兼容。

需要注意的第三点是,CUDA8.0对应的cuDNN版本是5.1,CUDA9.0对应的cuDNN7.0。同时,cuDNN可以同时安装在CUDA8.0和9.0中,而cuDNN7.0只能对CUDA9.0及以上适用。

各位读者最好事先在NVIDIA网站注册一个账号,便于下载使用。


先给出官方的CUDA下载地址,

CUDA9.1:https://developer.nvidia.com/cuda-downloads


CUDA8.0:https://developer.nvidia.com/cuda-80-ga2-download-archive


cuDNN7.0:https://developer.nvidia.com/cudnn



如果各位不知道怎么下载,可以去我的网盘查看

CUDA8.0-cuDNN5.1:链接:https://pan.baidu.com/s/1b6D3n4 密码:yhhf

CUDA9.1-cuDNN7.0:链接:https://pan.baidu.com/s/1jHYh67c 密码:jlfn

笔者并不是只安装,而是边安装别配置,这样一步步可以在某一个环节出问题就马上重来,而不用在最后发现出问题了又重新开始。

安装及配置过程本人以CUDA9.1/cuDNN7.0为例,CUDA8.0/cuDNN5.1同理。

打开CUDA9.1安装文件


安装文件会解压,默认路径为

可以自己选择路径存放安装包


选择后开始提取


需要注意的是,如果电脑安装有360,会误报查杀,这个时候需要手动下拉菜单,选择允许程序的所有操作,否则会被360隔离


安装文件提取完成后,会自动运行安装程序,这个时候会有短暂的系统兼容性检查


同意协议并继续安装


如果对电脑不熟悉的同学可以直接选择精简安装,这个时候不用选择什么,直接安装就可以了。

对电脑配置较熟悉的同学可以选择自定义安装,并自定义安装文件夹。

自定义安装文件夹的好处是可以不占用C盘系统盘空间,数据也可以自己方便处理。

笔者选择了自定义安装


默认安装所有程序


这个时候会有安装位置的选择。程序默认安装在C盘。如果不想改的同学就可以点安装了。

需要说明的是:sanple和cuda程序不是安装在同一个文件夹的。程序文件夹program files很好找,但是sample的programdata文件夹在哪呢?这里需要一个小操作,显示隐藏文件夹:

打开C盘或任意文件夹,点击查看,在隐藏的项目前打勾,这样就显示了


正是因为笔者觉得这样很麻烦,还占用系统盘空间,所以选择了安装自己指定的文件夹,当然自己要记住就行,因为配置的时候这个文件夹路径是需要用到的。作者的安装路径如下图所示:


之后会有比较长时间的安装过程。


这个安装就比较有意思了,有的电脑会在安装过程中闪动,之后安装直接成功。直接安装成功可以直接跳到验证阶段。

但有的电脑,比如说笔者的电脑,会黑屏,然后再无响应,不怕,按笔者的解决方法,亲测可以安装完成。

电脑不是黑屏了吗,笔者去吃饭了,过了很久回来看到黑屏以后,打开sample文件夹,发现例子已经安装好,但是cuda文件夹是空的

于是长按机箱关机键关机,重启电脑,再次运行安装程序,即CUDA安装再来一遍,此后安装成功,也不会黑屏。安装成功画面如图:

如果黑屏。重启安装是绝对可以的!!笔者黑屏只能跟你们说说,也截不了屏对吧。。。。。另外笔者电脑没有安装vs2010,2012和2017,但是其余的都安装成功,有vs2013和2015就够啦!


这样就全部安装成功。



这个时候就要验证一下CUDA是否安装好了,有以下几种检验方法

第一种是打开cmd,输入nvcc -V,显示如下,则CUDA安装成功。如果安装8.0版本就是v8.0....


第二种,命令行中运行C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe,可以得到GPU运行时的监测界面,则CUDA安装成功


第三种,运行CUDA Samples,以deviceQuery.exe为例,打开VS2015,点击文件,打开刚刚安装的示例文件


在release条件下生成项目,会显示成功,则CUDA安装成功。

第四种,运行CUDA Samples,以bandwidthTest.exe为例,打开VS2015,点击文件,打开刚刚安装的示例文件

在debug条件下生成项目,会显示成功,则CUDA安装成功。第三种第四种本质上是一样的,都是运行示例文件,在此放一个截图即可。


第五种就厉害了,首先右键我的电脑,看系统变量中是否包含刚刚安装的CUDA文件夹。如果包含直接下一步,如果不包含加入系统变量


打开vs2015,新建项目,通过CUDA9.1新建cpp


复制粘贴以下代码

  1. // CUDA runtime 库 + CUBLAS 库
  2. #include "cuda_runtime.h"
  3. #include "cublas_v2.h"
  4. #include <time.h>
  5. #include <iostream>
  6. using namespace std;
  7. // 定义测试矩阵的维度
  8. int const M = 5;
  9. int const N = 10;
  10. int main()
  11. {
  12. // 定义状态变量
  13. cublasStatus_t status;
  14. // 在内存中为将要计算的矩阵开辟空间
  15. float *h_A = (float*)malloc(N*M * sizeof(float));
  16. float *h_B = (float*)malloc(N*M * sizeof(float));
  17. // 在 内存 中为将要存放运算结果的矩阵开辟空间
  18. float *h_C = (float*)malloc(M*M * sizeof(float));
  19. // 为待运算矩阵的元素赋予 0-10 范围内的随机数
  20. for (int i = 0; i<N*M; i++) {
  21. h_A[i] = (float)(rand() % 10 + 1);
  22. h_B[i] = (float)(rand() % 10 + 1);
  23. }
  24. // 打印待测试的矩阵
  25. cout << "矩阵 A :" << endl;
  26. for (int i = 0; i<N*M; i++) {
  27. cout << h_A[i] << " ";
  28. if ((i + 1) % N == 0) cout << endl;
  29. }
  30. cout << endl;
  31. cout << "矩阵 B :" << endl;
  32. for (int i = 0; i<N*M; i++) {
  33. cout << h_B[i] << " ";
  34. if ((i + 1) % M == 0) cout << endl;
  35. }
  36. cout << endl;
  37. /*
  38. ** GPU 计算矩阵相乘
  39. */
  40. // 创建并初始化 CUBLAS 库对象
  41. cublasHandle_t handle;
  42. status = cublasCreate(&handle);
  43. if (status != CUBLAS_STATUS_SUCCESS)
  44. {
  45. if (status == CUBLAS_STATUS_NOT_INITIALIZED) {
  46. cout << "CUBLAS 对象实例化出错" << endl;
  47. }
  48. getchar();
  49. return EXIT_FAILURE;
  50. }
  51. float *d_A, *d_B, *d_C;
  52. // 在 显存 中为将要计算的矩阵开辟空间
  53. cudaMalloc(
  54. (void**)&d_A, // 指向开辟的空间的指针
  55. N*M * sizeof(float) // 需要开辟空间的字节数
  56. );
  57. cudaMalloc(
  58. (void**)&d_B,
  59. N*M * sizeof(float)
  60. );
  61. // 在 显存 中为将要存放运算结果的矩阵开辟空间
  62. cudaMalloc(
  63. (void**)&d_C,
  64. M*M * sizeof(float)
  65. );
  66. // 将矩阵数据传递进 显存 中已经开辟好了的空间
  67. cublasSetVector(
  68. N*M, // 要存入显存的元素个数
  69. sizeof(float), // 每个元素大小
  70. h_A, // 主机端起始地址
  71. 1, // 连续元素之间的存储间隔
  72. d_A, // GPU 端起始地址
  73. 1 // 连续元素之间的存储间隔
  74. );
  75. cublasSetVector(
  76. N*M,
  77. sizeof(float),
  78. h_B,
  79. 1,
  80. d_B,
  81. 1
  82. );
  83. // 同步函数
  84. cudaThreadSynchronize();
  85. // 传递进矩阵相乘函数中的参数,具体含义请参考函数手册。
  86. float a = 1; float b = 0;
  87. // 矩阵相乘。该函数必然将数组解析成列优先数组
  88. cublasSgemm(
  89. handle, // blas 库对象
  90. CUBLAS_OP_T, // 矩阵 A 属性参数
  91. CUBLAS_OP_T, // 矩阵 B 属性参数
  92. M, // A, C 的行数
  93. M, // B, C 的列数
  94. N, // A 的列数和 B 的行数
  95. &a, // 运算式的 α 值
  96. d_A, // A 在显存中的地址
  97. N, // lda
  98. d_B, // B 在显存中的地址
  99. M, // ldb
  100. &b, // 运算式的 β 值
  101. d_C, // C 在显存中的地址(结果矩阵)
  102. M //
  103. );
  104. // 同步函数
  105. cudaThreadSynchronize();
  106. // 从 显存 中取出运算结果至 内存中去
  107. cublasGetVector(M*M, // 要取出元素的个数
  108. sizeof(float), // 每个元素大小
  109. d_C, // GPU 端起始地址
  110. 1, // 连续元素之间的存储间隔
  111. h_C, // 主机端起始地址
  112. 1 // 连续元素之间的存储间隔
  113. );
  114. // 打印运算结果
  115. cout << "计算结果的转置 ( (A*B)的转置 ):" << endl;
  116. for (int i = 0; i<M*M; i++) {
  117. cout << h_C[i] << " ";
  118. if ((i + 1) % M == 0) cout << endl;
  119. }
  120. // 清理掉使用过的内存
  121. free(h_A);
  122. free(h_B);
  123. free(h_C);
  124. cudaFree(d_A);
  125. cudaFree(d_B);
  126. cudaFree(d_C);
  127. // 释放 CUBLAS 库对象
  128. cublasDestroy(handle);
  129. getchar();
  130. return 0;
  131. }
在运行前还要进行如下操作:

右键生成自定义,选择安装好的CUDA9.1


右键cu属性,选择配置属性,项类型中选择cuda c++


右键属性,在vc目录中加入变量:

包含目录为:D:\professionalsoft\NVIDIA\CUDA Documentation&Development\v9.1\include

库目录:D:\professionalsoft\NVIDIA\CUDA Documentation&Development\v9.1\lib


配置属性–>连接器–>输入–>附加依赖项中添加库文件

cublas.lib 
cuda.lib 
cudadevrt.lib 
cudart.lib 
cudart_static.lib 
nvcuvid.lib 
OpenCL.lib


按F5运行,得到结果,则CUDA安装成功。


安装且配置验证好CUDA以后,下面安装cuDNN,其实并不叫安装,就是把解压后的文件复制到CUDA文件夹中



下面进行最后一步,验证cuDNN安装是否成功

打开vs2015,新建项目,新建cpp,复制粘贴以下代码

  1. #include <iostream>
  2. #include <cuda_runtime.h>
  3. #include <cudnn.h>
  4. using namespace std;
  5. void main() {
  6. cudnnHandle_t handle;
  7. cudnnStatus_t t = cudnnCreate(&handle);
  8. cout << cudnnGetErrorString(t);
  9. getchar();
  10. }
项目属性/VC++ Directories/Include Directories 中添加入include的路径

在项目属性/VC++ Directories/Libary Directories 中添加入lib\x64路径


在项目属性/Linker/Input/Additional Dependencies  中添加入cudnn.lib;

项目属性/CUDA C|C++ / Device /Code Generation 中,将sm_20改为 sm_30或更高;

例如笔者的是1070.可以改为61


项目属性修改完毕。按F5运行。得到cudnn成功状态,则cuDNN安装成功


至此,CUDA8.0/9.1及对应cuDNN 5.1/7.0安装且配置成功。使用GPU计算是深度学习计算的基础,配置成功以后,深度学习计算速度使用GPU将更快了。



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/279870
推荐阅读
相关标签
  

闽ICP备14008679号