cuda 实现sift gpu_为Keras提供GPU加速

9c8656cfd562cc8385a334a38bd932d3.png

在刚入坑机器学习时,书上所使用的算法(回归、决策树等)及实例较为简单,一般CPU(中央处理器)的计算能力均能胜任,从而快速实现。但若使用keras(一种基于深度学习框架的高级应用接口)进行深度学习,利用海量的数据反复训练神经网络中成百上千万个参数时,CPU显得捉襟见肘,需要GPU(图形处理器)来实现加速训练。

为什么GPU在深度学习中比CPU更快呢?这是由于两者的设计不同,CPU由专为串行处理而优化的几个部件组成,拥有少量的算术逻辑单元,主要针对不同任务的管理与协调;而GPU则拥有数以千计个算术逻辑单元组成的并行计算架构,专为庞杂而繁重的计算任务而设计。

简单的理解,当对一组数据反复执行同一种计算任务时,GPU更合适,而对同一组数据执行多种不同的任务时,CPU更合适。

2f0aa078315e81cde1518b5a8ecc91ce.png

以本渣渣的实际经验来看,使用GTX970(CUDA1600个)训练2万个样本的卷积神经网络将比A10处理器快20-30倍(视batchsize大小而定)。

1.安装CUDA及cuDNN

GPU加速器于2007年由NVIDIA率先推出,CUDA(Compute Unified Device Architecture)是使GPU能够解决复杂计算问题的并行架构,它包含了CUDA指令集以及并行计算引擎。现在,该架构已应用于GeForce、ION、Quadro以及Tesla等多款产品上,相比AMD而言,支持GPU加速的NVIDIA显卡品种繁多。

因此想要用GPU加速的话基本只要确定显卡是不是NVIDIA品牌的就可以了,当然如果型号过于老旧还是不太确定的话可以前往官网(https://developer.nvidia.com/cuda-gpus)查询,查询列表还能帮助你了解所持显卡的算力,下图仅为部分。

6ed2634bde3deaac881007817c26bc5b.png

在下载CUDA之前首先需确定所持显卡支持的CUDA版本,可通过NVIDA控制面板中的系统信息进行查看。若无法找到NVIDA控制程序请更新显卡驱动,一般最新的驱动程序都能支持较新的CUDA版本。(当前TensorFlow-GPU-1.14版仅支持CUDA10.0,本渣在安装10.1后运行提示找不到cudart64_100.dll,后期图文中请无视具体版本号)

6083c2f293f1979f04f209aebefd1f61.png

进入官网(https://developer.nvidia.com/cuda-toolkit-archive),根据操作系统选择下载支持的CUDA版本。(下文仅演示离线安装)

cf3bd15e8a15d2fa011ffa5bdd509bd6.png

双击下载的可执行程序(cuda_10.0.130_411.31_win10.exe)进入安装引导,经过解压(临时文件可任意存放,会自动删除)及同意许可协议后进入安装选项。安装方式提供'精简'(其实是完整安装,见英文注释'install all')与'自定义'两种。这里推荐'自定义',因为有些组件(比如驱动程序)可能已经安装,且版本更高,以免被覆盖。

10a6b61a51bb30491aedac558da4b601.png

如图选择CUDA列表中的Development,Runtime,Documentation,Samples的四个组件,其他组件可按需安装。(本渣在安装Nsight两个组件时碰到重启错误,可能原因是没有关闭受限状态)

11fa79d75a53e8a708a6baf86afda76c.png


记住安装位置(后面设置环境变量需要用到),点击'下一步'至出现'安装程序已完成'。

7925a1b28c04c2aa9099072d8c28ed69.png

接着下载cuDNN,其全称为NVIDIA CUDA® Deep Neural Network library,是NVIDIA专门针对深度神经网络中的基础操作而设计基于GPU的加速库。

下载需要登录账户,注册过程比较简单,一顿操作后即可完成注册(传送门:https://developer.nvidia.com/rdp/cudnn-download)。登录后,选择与CUDA版本及操作系统对应的cuDNN下载,并将下载的文件解压放置在CUDA安装目录其版本号对应的文件夹下。( C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.0)

a6fc7844c33d5522576f34f5d9aaafa6.png

最后,设置相应的环境变量。右键‘我的电脑’>属性>高级系统设置>环境变量,可以看到已经有了CUDA_PATH、CUDA_PATH_V10_1、NVCUDASAMPLES_ROOT、NVCUDASAMPLES10_1_ROOT这几个环境变量。

975dafda218b8f97d87a236010e0e8f4.png

还需要额外添加如下环境变量:

CUDA_SDK_PATH:C:ProgramDataNVIDIA CorporationCUDA Samplesv10.1
CUDA_LIB_PATH:%CUDA_PATH%libx64
CUDA_BIN_PATH:%CUDA_PATH%bin
CUDA_SDK_BIN_PATH:%CUDA_SDK_PATH%binwin64
CUDA_SDK_LIB_PATH:%CUDA_SDK_PATH%commonlibx64

以及在系统变量PATH下添加:

%CUDA_LIB_PATH%
%CUDA_BIN_PATH%
%CUDA_SDK_LIB_PATH%
%CUDA_SDK_BIN_PATH%; 
C:ProgramFilesNVIDIA GPU Computing ToolkitCUDAv10.1libx64
C:ProgramFilesNVIDIA GPU Computing ToolkitCUDAv10.1bin
C:ProgramDataNVIDIACorporationCUDA Samplesv10.1commonlibx64
C:ProgramDataNVIDIACorporationCUDA Samplesv10.1binwin64

配置完成后,我们可以使用CUDA内置的两个程序来检验是否配置生效。启动cmd,cd到安装目录下...CUDAv10.1extrasdemo_suite,分别执行bandwidthTest.exe和deviceQuery.exe,若如图均返回PASS则说明配置生效。

112cf4e965c98d7ce24540ef1ebfc0e1.png

2.创建虚拟环境

虚拟环境可以理解为针对特定的项目而存在的独立开发运行环境,不同的虚拟环境可以有自己不同的依赖项与工具包,互不影响,同一个工具包在不同的虚拟环境中根据项目需要可以存在不同的版本。

使用'conda create –n 虚拟环境名 python=版本号 anaconda'(若命令末端不输入anaconda则环境中只安装python,无其他工具包),稍等片刻后询问是否继续,键入Y并回车,出现'done'则表示创建完成。可用'conda activate 虚拟环境名'来激活(退出环境则用deactivate),若想删除环境则使用'conda remove-n 虚拟环境名--all'。

75a77adb306851f679caab297b7cfa10.png


使用'conda info –envs'可查看当前所有的虚拟环境及其位置。

26c7a1baddcd55549e3c8f8307346f2a.png

3.安装TensorFlow_GPU版

由于Keras以tensorflow(Google开发的一种深度学习框架)作为后端运算,因此本质上是需要GPU来执行tensorflow的计算操作,对此tensorflow有专门基于GPU的版本。激活待安装的虚拟环境,使用'pip install --upgrade tensorflow-gpu'进行下载与安装。

97568a2204d8e1b5ca813b90cb4a20fe.png

途中可能出现依赖项版本过低的情况,请使用'pip install –upgrade 工具包名称' 逐个升级。

e1ff40ab92149beed24bfc18f6ebafbc.png

安装完后,键入以下命令并运行:

import tensorflow as tf
hello=tf.constant('hello!')
sess=tf.Session()
print(sess.run(hello))

若能成功运行且出现显卡设备信息则表示实现了GPU调用。

最后Keras的安装就很简单了,直接'pip install keras'。

好了,一切准确就绪,快试着让模型飞起来吧!

Ref:

•https://www.nvidia.cn/

•https://blog.csdn.net/qilixuening/article/details/77503631

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

caged系统pdf_建筑行业单词中英文对照教材.pdf

智能建筑系统 BUILDING AUTOMATION & CONTROL SYSTEMS监视和警报 13850-detection & alarm公用建筑设备 public building equipment登记设备 registration equipment固体废物处理设备 solid waste handling equipment给水和水处理设备 WATER SUPPLY & TREATMENT EQ…

枚举算法称硬币C语言,【算法系列之枚举】称硬币

题目有12枚硬币。其中有11枚真币和1枚假币。假币和真 币重量不同,但不知道假币比真币轻还是重。现在, 用一架天平称了这些币三次,告诉你称的结果,请你 找出假币并且确定假币是轻是重(数据保证一定能找 出来)。输入第一行是测试数据…

此 sqltransaction 已完成;它再也无法使用_win10笔记本自带office报错无法激活的解决方法...

激活win10笔记本电脑自带office出错怎么办?不少笔记本电脑在出厂的时候就自带windows 10操作系统并且将系统部署完成后就有许多软件集成当中,一般按正常步骤进行激活即可正常使用,不过有用户遇到一个问题,在激活自带office时报错了&#xff…

js br不生效_前端标注工具-AILabel.js

# AILabel.js背景&#xff1a;在前端开发过程中难免遇到针对图片的缩放平移&#xff1b;以及在图片上进行矢量数据、文本、标注的展示&#xff1b;如果你有上面的任何需求&#xff0c;恭喜你&#xff0c;找到组织了....<br/>在此背景下&#xff0c;AILabel.js出生了### 相…

android中的后退功能,如何在Android应用中实现一个返回键功能

如何在Android应用中实现一个返回键功能发布时间&#xff1a;2020-11-23 16:28:56来源&#xff1a;亿速云阅读&#xff1a;89作者&#xff1a;Leah今天就跟大家聊聊有关如何在Android应用中实现一个返回键功能&#xff0c;可能很多人都不太了解&#xff0c;为了让大家更加了解&…

bat 连续读取两行_Redis底层数据结构解析(BAT大厂必问)

Redis是一个key-value存储系统&#xff0c;现在在各种系统中的使用越来越多&#xff0c;大部分情况下是因为其高性能的特性&#xff0c;被当做缓存使用。Redis由于其丰富的数据结构也可以被应用到其他场景。Redis是一个K-V的非关系型数据库&#xff08;NoSQL&#xff09;&#…

smart原则_为什么现在少有人用德鲁克的SMART原则做目标管理了?

互联网平台充斥了各类成功学文章&#xff0c;但大多数鸡汤文只谈坚持&#xff0c;不谈策略。王健林定下一个亿的小目标被网友编成了各种段子&#xff0c;却极少有人去探究他实现目标的过程&#xff0c;用的什么方法。从企业规模来看&#xff0c;我们没有理由说王健林定下的目标…

android p 第三方预装,android P 隐藏API对系统APP的影响

android P限制了第三方APK对hide API的调用&#xff0c;那么对系统APK有什么影响呢&#xff1f;国内各大手机厂商对ROM进行各种定制&#xff0c;可以很容易绕过这些限制&#xff0c;那对于需要出海并且满足CTS要求的厂商有什么影响呢&#xff1f;先说结论&#xff1a;对系统厂商…

团队组成五个基本要素_【记录】综合分部宁波分队团队拓展活动

初冬&#xff0c;像一位美丽的、高贵的、矜持的公主&#xff0c;舞动着她那神奇的面纱&#xff0c;送来阵阵凛冽的寒风。今年宁波分队队伍逐渐壮大&#xff0c;从年初的70多人到目前120人&#xff0c;队伍中也迎来了许多00后的小伙伴们&#xff0c;为加强企业文化建设&#xff…

linux delete内存不下降_linux内存分配管理

linux内存分配管理一、前言作为从事与C/C程序开发人员&#xff0c;我们一直需要很好的管理内存&#xff0c;申请和释放&#xff1b;可能很多只知道使用malloc、new去申请&#xff0c;使用free、delete去释放&#xff0c;但是&#xff0c;去根究其内部的原理&#xff0c;可能就不…

android studio 2.3 instant run,android studio 2.3 instant run not working

可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效&#xff0c;请关闭广告屏蔽插件后再试):问题:I have updated android studio from 2.2 to 2.3,then I found Instant run not working.Error while executing: am startservice com.example.codingmaster.te…

和catch的区别_BIO、NIO、AIO 的区别是什么?

BIO、NIO、AIO 的区别是什么&#xff1f;同/异步、阻/非阻塞的区别是什么&#xff1f;文件读写最优雅的实现方式是什么&#xff1f;NIO 如何实现多路复用功能&#xff1f;带着以上这几个问题&#xff0c;跟着芒果一起进入IO的世界吧。在开始之前&#xff0c;我们先来思考一个问…

302状态码_HTTP协议详解(基础概念 方法 状态码 首部 连接 Cookie 新特性 安全)

一 、基础概念URIURI 包含 URL 和 URN。请求和响应报文1. 请求报文2. 响应报文二、HTTP 方法客户端发送的 请求报文 第一行为请求行&#xff0c;包含了方法字段。GET获取资源当前网络请求中&#xff0c;绝大部分使用的是 GET 方法。HEAD获取报文首部和 GET 方法类似&#xff0c…

flask get 参数_用它 5 分钟以后,我放弃用了四年的 Flask

“ 阅读本文大概需要 3 分钟。 ”有一个非常简单的需求&#xff1a;编写一个 HTTP 接口&#xff0c;使用 POST 方式发送一个 JSON 字符串&#xff0c;接口里面读取发送上来的参数&#xff0c;对其中某个参数进行处理&#xff0c;并返回。如果我们使用 Flask 来开发这个接口&…

傲梦python笔试题_python笔试题

冒泡排序的原理&#xff1a;每次对相邻的两个元素进行比较&#xff0c;若前者大于后者&#xff0c;这将两者的位置交换。第一轮就可以将最大的元素置于列表的最后。几轮循环 冒泡排序的前提条件&#xff1a;有序的列表 import unittest # 冒泡排序 def bubble_sort(arr): for i…

python pexpect pxssh scp_python Pexpect 实现输密码 scp 拷贝的方法

在服务器A上的程序用到服务器B上的文件data&#xff0c;并且需要定期更新文件。 但是直接在bash文件中使用scp -P 1000 192.168.199.10:/temp/data /temp由于权限限制&#xff0c;不能免ssh密码拷贝&#xff0c;会要求输入B机器的密码。本想直接在bash文件中使用Pexpect 来实现…

python的类方法_python 类不实例化,调用类方法:@staticmethod 和 @classmethod

staticmethod 和 classmethod 用法 一般来说&#xff0c;要使用某个类的方法&#xff0c;需要先实例化一个对象再调用方法。 而使用staticmethod或classmethod&#xff0c;就可以不需要实例化&#xff0c;直接类名.方法名()来调用。 这有利于组织代码&#xff0c;把某些应该属于…

android sse 人脸识别,基于Android Camera2之openCamera 流程

简介frameworks\base\core\java\android\hardware\camera2Camera2在Android 5.0上首次出现&#xff0c;主要重新定义了一套Camera 的使用接口API&#xff0c;设计思想出现了变化&#xff0c;具体的可自行搜索&#xff0c;此处主要介绍下Camera2的常见类以及使用流程。CameraCap…

fetch 不是xhr_春招|前端2019应届春招:不是被大厂选,而是选大厂(字节跳动,美团,网易)...

作者&#xff1a;Thescavenger链接&#xff1a;https://www.nowcoder.com/discuss/163165来源&#xff1a;牛客网你需要的前端面经个人情况本科&#xff0c;成都双非大学&#xff0c;大三开始正式学习前端&#xff0c;主攻 react&#xff0c;目前大四。已拿美团、字节跳动 offe…

vscode编辑python_VSCode+Python开发环境

准备开始转向用VSCode做开发&#xff0c;所以把一些常用的开发环境转移到VSCode上。 这次搭建的是Python3的开发环境。 其他相关博文&#xff1a; 一、测试环境 Windows 10 VSCode v1.11.1 Python v3.6.1 二、安装Visual Studio Code 三、安装Python这一步&#xff0c;记得…