深度学习配置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


复制粘贴以下代码

// 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将更快了。



  • 45
    点赞
  • 246
    收藏
    觉得还不错? 一键收藏
  • 31
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值