赞
踩
本人为中科院测地所博士生,所研究专业为自然地理学(遥感数据分析方向),研究课题偏向于深度学习。
由于本人不是计算机专业,故有关计算机配置及操作方面相较于计算机专业人员不是那么专业。所以请各位大牛大神绕道,我这里所做的一些工作比较浅显,仅供需要的各位一起交流。
在深度学习的配置环境过程中,第一步则是需要安装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
复制粘贴以下代码
- // CUDA runtime 库 + CUBLAS 库
- #include "cuda_runtime.h"
- #include "cublas_v2.h"
- #include <time.h>
- #include <iostream>
-
- using namespace std;
- // 定义测试矩阵的维度
- int const M = 5;
- int const N = 10;
- int main()
- {
- // 定义状态变量
- cublasStatus_t status;
- // 在内存中为将要计算的矩阵开辟空间
- float *h_A = (float*)malloc(N*M * sizeof(float));
- float *h_B = (float*)malloc(N*M * sizeof(float));
- // 在 内存 中为将要存放运算结果的矩阵开辟空间
- float *h_C = (float*)malloc(M*M * sizeof(float));
- // 为待运算矩阵的元素赋予 0-10 范围内的随机数
- for (int i = 0; i<N*M; i++) {
- h_A[i] = (float)(rand() % 10 + 1);
- h_B[i] = (float)(rand() % 10 + 1);
- }
- // 打印待测试的矩阵
- cout << "矩阵 A :" << endl;
- for (int i = 0; i<N*M; i++) {
- cout << h_A[i] << " ";
- if ((i + 1) % N == 0) cout << endl;
- }
- cout << endl;
- cout << "矩阵 B :" << endl;
- for (int i = 0; i<N*M; i++) {
- cout << h_B[i] << " ";
- if ((i + 1) % M == 0) cout << endl;
- }
- cout << endl;
- /*
- ** GPU 计算矩阵相乘
- */
- // 创建并初始化 CUBLAS 库对象
- cublasHandle_t handle;
- status = cublasCreate(&handle);
- if (status != CUBLAS_STATUS_SUCCESS)
- {
- if (status == CUBLAS_STATUS_NOT_INITIALIZED) {
- cout << "CUBLAS 对象实例化出错" << endl;
- }
- getchar();
- return EXIT_FAILURE;
- }
- float *d_A, *d_B, *d_C;
- // 在 显存 中为将要计算的矩阵开辟空间
- cudaMalloc(
- (void**)&d_A, // 指向开辟的空间的指针
- N*M * sizeof(float) // 需要开辟空间的字节数
- );
- cudaMalloc(
- (void**)&d_B,
- N*M * sizeof(float)
- );
- // 在 显存 中为将要存放运算结果的矩阵开辟空间
- cudaMalloc(
- (void**)&d_C,
- M*M * sizeof(float)
- );
- // 将矩阵数据传递进 显存 中已经开辟好了的空间
- cublasSetVector(
- N*M, // 要存入显存的元素个数
- sizeof(float), // 每个元素大小
- h_A, // 主机端起始地址
- 1, // 连续元素之间的存储间隔
- d_A, // GPU 端起始地址
- 1 // 连续元素之间的存储间隔
- );
- cublasSetVector(
- N*M,
- sizeof(float),
- h_B,
- 1,
- d_B,
- 1
- );
- // 同步函数
- cudaThreadSynchronize();
- // 传递进矩阵相乘函数中的参数,具体含义请参考函数手册。
- float a = 1; float b = 0;
- // 矩阵相乘。该函数必然将数组解析成列优先数组
- cublasSgemm(
- handle, // blas 库对象
- CUBLAS_OP_T, // 矩阵 A 属性参数
- CUBLAS_OP_T, // 矩阵 B 属性参数
- M, // A, C 的行数
- M, // B, C 的列数
- N, // A 的列数和 B 的行数
- &a, // 运算式的 α 值
- d_A, // A 在显存中的地址
- N, // lda
- d_B, // B 在显存中的地址
- M, // ldb
- &b, // 运算式的 β 值
- d_C, // C 在显存中的地址(结果矩阵)
- M //
- );
- // 同步函数
- cudaThreadSynchronize();
- // 从 显存 中取出运算结果至 内存中去
- cublasGetVector(M*M, // 要取出元素的个数
- sizeof(float), // 每个元素大小
- d_C, // GPU 端起始地址
- 1, // 连续元素之间的存储间隔
- h_C, // 主机端起始地址
- 1 // 连续元素之间的存储间隔
- );
- // 打印运算结果
- cout << "计算结果的转置 ( (A*B)的转置 ):" << endl;
- for (int i = 0; i<M*M; i++) {
- cout << h_C[i] << " ";
- if ((i + 1) % M == 0) cout << endl;
- }
- // 清理掉使用过的内存
- free(h_A);
- free(h_B);
- free(h_C);
- cudaFree(d_A);
- cudaFree(d_B);
- cudaFree(d_C);
- // 释放 CUBLAS 库对象
- cublasDestroy(handle);
- getchar();
- return 0;
- }
在运行前还要进行如下操作:
右键生成自定义,选择安装好的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,复制粘贴以下代码
- #include <iostream>
- #include <cuda_runtime.h>
- #include <cudnn.h>
- using namespace std;
-
- void main() {
- cudnnHandle_t handle;
- cudnnStatus_t t = cudnnCreate(&handle);
- cout << cudnnGetErrorString(t);
- getchar();
- }
项目属性/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将更快了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。