摘要:随着人工智能时代的到来,计算能力变得越来越重要。GPU计算已经成为了必然的趋势,对于机器学习爱好者来说要想训练一个高质量的神经网络,使用GPU无疑是最佳选择。

GPU计算已成为数据科学领域的重要组成部分。计算需求的不断增长,使得GPU计算逐渐流行起来。此外,现在每个主要云计算提供商都提供了GPU服务,比如阿里云,因此现在访问高性能硬件是非常简单的一件事。但是,自行构建GPU软件是相当吓人。幸运的是,Anaconda Distribution可以很容易地启动GPU计算,并且可以从我们的软件包库中直接安装几个支持GPU的软件包。在这篇博客文章中,我们将向你介绍如何在Anaconda发行版中开始使用GPU。

在本文中我将介绍NVIDIA GPU制造的GPU,因为它们在Anaconda Distribution中有内置支持,但是AMD的Radeon Open Compute计划也在迅速改善AMD GPU计算生态系统,以保证能够适应现在的软件。

1.什么时候选择GPU?

GPU并不是通用计算设备。它们是专门的协处理器,对于一些任务来说是非常好的(一般可以提升10倍的性能)。GPU最成功的应用是在设备的大并行浮点吞吐量和高内存带宽的问题领域中。一些例子包括:

1.线性代数。

2.信号和图像处理(FFT)。

3.神经网络和深度学习。

4.其他机器学习算法,包括广义线性模型,梯度增强等。

5.蒙特卡罗模拟和粒子运输。

6.流体模拟。

7.内存数据库。

...

所有这些成功用例的共同点是什么?广义而言,准备用于GPU加速的应用程序具有以下特征:

1.1:高“算术强度”

如果数学运算与内存运算的比例较高,要求运算算法速度快,GPU加速是一个很好的选择。这些算法利用了GPU的高数学吞吐量,以及在同时对其他数据进行数学运算的同时,在后台对内存访问进行排队的能力。GPU可以在请求和接收存储在GPU内存中的一个编号的时间内轻松地执行许多数学指令。

什么算得上高算术强度?GPU的一个法则是,对于你输入的每一个数字,你至少需要十个基本的数学运算(加法,减法,乘法,除法等)或至少一个特殊的数学函数调用,如exp()或者cos()。

1.2:高度的平行性

GPU是处理阵列的最佳选择,大阵列的元素可以并行计算。如果计算只能分成少量的独立任务,则多核CPU可能更适合。请注意,找到并行的方法是要用不同的算法替换当前的串行算法,以高度并行的方式解决相同的问题。一个快速的网络搜索是否有价值,看它是否有“明显不能并行化”的东西。

1.3:工作数据集可以放入GPU内存

16 GB(甚至24 GB)的GPU现在已经可以买到,但也比在高端服务器上安装的系统内存的数量要少一个数量级。一些算法可以将数据在同一台计算机上的多个GPU之间进行分割,而且有时可以在不同计算机的GPU之间分割数据。也可以将系统RAM中的数据传输到GPU中,但连接GPU和CPU的PCI-E总线的带宽或将成为一个限制因素,除非计算和内存传输仔细重叠。

1.4:I / O不是瓶颈

很多数据科学任务主要受I / O速度限制。例如,在一个磁盘上过滤500 GB记录以找到与简单搜索模式匹配的子集的应用程序将花费大部分时间等待数据从磁盘加载。如果这个数据过滤之后将要进行6个小时的深度学习的训练,那么使用GPU将是非常有益的(仅对于模型训练阶段)。在开始性能优化工作之前,分析你的Python应用程序以测量实际耗用的时间是一个好主意。

2.先决条件

在开始使用GPU之前,你需要做一些事情:

2.1:使用NVIDIA®(英伟达™)GPU(图形处理器)的系统:更便宜的GeForce显卡非常适合实验,更昂贵的Tesla显卡通常具有更好的双精度性能和更多内存。移动NVIDIA GPU也可以工作,但性能非常有限。

2.2:支持CUDA的驱动程序:尽管Mac,Windows和Linux支持CUDA,但我们发现Linux上是最好的CUDA体验。Mac在2014年停止获得NVIDIA GPU,而在Windows上,图形驱动程序系统的局限性损害了运行CUDA的GeForce卡的性能。Linux上最新的NVIDIA驱动程序(不是Nouveau)对于支持GPU的Anaconda软件包来说已经足够了。除非你想从头编译自己的GPU软件,否则不需要安装完整的CUDA工具包。

2.3:Anaconda:安装本文描述的软件包最简单的方法是使用Anaconda Distribution中的conda命令行工具。如果你是Anaconda Distribution的新手,最近发布的版本5.0是一个很好的开始,但旧版本的Anaconda Distribution也可以安装下面描述的软件包。

3.GPU项目检查

深度学习:Keras,TensorFlow,PyTorch

训练神经网络(通常称为“深度学习”,指的是常用的大量网络层)已经成为GPU计算的一个非常成功的应用。神经网络已经证明了它们在图像字幕,语言翻译,语音生成和许多其他应用中的实用性。但是,他们需要大量的数据集和计算能力来训练,并且能够轻松地进行不同模型的实验。一旦训练完毕,模型可以在CPU和移动设备上运行。

对于深度学习来说,我非常喜欢Keras。Keras是一个Python库,用于构建,训练和评估支持多种高性能后端库(包括TensorFlow,Theano和Microsoft的Cognitive Toolkit)的神经网络模型。Keras也可以不用GPU,但是对于许多项目来说,如果你有一个GPU的话,训练速度可以提高10倍。

Keras和支持GPU的TensorFlow版本可以使用以下命令安装在Anaconda中:

conda install keras-gpu

我也喜欢在Jupyter上记录我的Keras实验,所以你可能也想运行:

conda install notebook

jupyter notebook

一些很好的起点是练习Github上的CIFAR10和MNIST卷积神经网络实例。

值得一提的是像TensorFlow和PyTorch这样的库可以直接用于各种计算和机器学习任务,而不仅仅是深度学习。因为它们使CPU和GPU之间的计算变得非常容易,所以它们可以成为数据科学工具箱中最强大的工具。

4.GPU加速数学库:pyculib

NVIDIA还通过GPU加速实现了标准的数学算法。pyculib项目提供了许多这些算法的Python包,包括:

1.线性代数。

2.快速傅立叶变换。

3.稀疏矩阵。

4.随机数生成。

5.排序。

这些Python包采用标准的NumPy数组,并为你处理来自GPU的所有副本。请注意,由于复制开销,你可能会发现这些函数没有比NumPy更快的小阵列。性能也很大程度上取决于你使用的GPU类型和数组数据类型。使用GeForce显卡时,float32类型比float64(NumPy默认)要快得多。

5.GPU内核编程:Numba

对于想要深入研究GPU编程细节的人来说,Numba是一个不错的选择。Numba是开放源代码Python编译器,其中包括适用于CPU和GPU目标的即时编译工具。它不仅编译用于在CPU上执行的Python函数,还包括一个完全的Python本机API,用于通过CUDA驱动程序对NVIDIA GPU进行编程。在GPU上运行的代码也是用Python编写的,并且内置了支持将NumPy数组发送到GPU并使用熟悉的Python语法访问它们的支持。

Numba的GPU支持是可选的,所以要启用它,你需要安装Numba和CUDA工具包conda软件包:

conda install numba cudatoolkit

CUDA编程模型基于两级数据并行性概念。在GPU上启动“内核函数”,同时执行相同的函数的“网格”(通常是数千个)线程。网格由许多相同的线程块组成,块内的线程能够比不同块中的线程更容易地同步和共享数据。这种编程风格与传统的CPU上的多线程编程有很大不同,它针对“数据并行”算法进行了优化,每个线程同时运行相同的指令,但具有不同的输入数据元素。CUDA编程指南的前几章对如何使用CUDA给予了很好的讨论。一旦熟悉了CUDA编程模型,下一步应该是2017 GPU技术大会上我们教程中的Jupyter笔记本。笔记本涵盖了使用Python编程GPU的基本语法,还包括更多高级主题,如ufunc创建,内存管理和调试技术。

6.GPU数据框:PyGDF

GPU Dataframe(简称“GDF”)概念是Anaconda与GPU Open Analytics Initiative的其他成员共同开发的。GDF是Apache Arrow格式的数据帧,存储在GPU内存中。由于在CUDA驱动程序中支持在进程之间传输GPU内存部分,所以通过对GPU加速数据库(如MapD)的查询创建的GDF可以直接发送到Python解释器,在该解释器中可以执行该数据帧的操作,然后可以将数据移动到像H2O这样的机器学习库中,所有这些都不需要从GPU上取下数据。

对Python Dataframe的Python支持由PyGDF项目提供,我们从2017年3月开始一直致力于PyGDF项目。它提供了用于在GPU数据帧上运行的Pandas API的子集,使用GPU的并行计算能力(以及Numba JIT )用于排序,柱状数学,缩减,过滤器,连接和按操作分组。

结论:

我只介绍了关于GPU的冰山一角,但是希望上面提到的能激励你深入了解。下面

Parallel Forall博客中有关Numba的七件事:

GPU Open Analytics Initiative主页:http://gpuopenanalytics.com/

Stanley selbert,Stan领导着Anaconda的社区创新团队,他的工作重点是高性能GPU计算和设计数据分析

本文由北邮@爱可可-爱生活老师推荐,阿里云云栖社区组织翻译。

文章原标题《Getting started with GPU Computing in Anaconda》

作者:Stanley selbert译者:虎说八道,审阅:

文章为简译,更为详细的内容,请查看

python调用显卡计算_Anaconda GPU计算入门指南相关推荐

  1. 用python公众号开书城步骤_资源 | 开放Python书籍:一本短小精悍的初学者入门指南...

    资源 | 开放Python书籍:一本短小精悍的初学者入门指南 作者:机器之心 来源:机器之心 公众号 分享到: 03-25 选自GitHub机器之心整理 参与:思源 如何快速熟悉 Python 编程一 ...

  2. 计算引擎-GPU计算的优势

    基于GPU的大规模计算早有耳闻,直到中午吃饭范W聊到他的多层神经网络程算法在GPU和CPU上的运行效率是40:1的时候,我才恍然大悟. 中央处理CPU 用来解释机器指令以及处理计算数据.首先是控制部件 ...

  3. python调用函数来判断质数_Python计算-质数的判断

    python 如何判断一个数是不是质数 让这个数除,从2开始到她的一半,如果余数没有0就是质数.大兄弟,这是非常基本的算法,你都拿到网上问. 欢迎来到夜影驱动编程的. import math def ...

  4. python代码性能分析_Python 性能分析入门指南

    虽然并非你编写的每个 Python 程序都要求一个严格的性能分析,但是让人放心的是,当问题发生的时候,Python 生态圈有各种各样的工具可以处理这类问题. 分析程序的性能可以归结为回答四个基本问题: ...

  5. Python怎么运行py文件,编程入门指南

    1.摘要 本文使用以下四种方法运行py文件:①使用命令行运行py文件,具体为先切换到对应路径,再输入"python 文件名.py ":②以PowerShell方式打开路径运行py文 ...

  6. tensorflow cpu和gpu计算速度比较

    摘要: 1.以动态图形式计算一个简单的加法 2.cpu和gpu计算力比较(包括如何指定cpu和gpu) 3.关于gpu版本的tensorflow安装问题,可以参考另一篇博文:https://www.c ...

  7. python吃显卡还是内存不足_解决pytorch GPU 计算过程中出现内存耗尽的问题

    Pytorch GPU运算过程中会出现:"cuda runtime error(2): out of memory"这样的错误.通常,这种错误是由于在循环中使用全局变量当做累加器, ...

  8. win10下基于anaconda利用keras开展16系显卡GTX1650的GPU神经网络计算

    win10下基于anaconda利用keras开展16系显卡GTX1650的GPU神经网络计算 虽然安装了双系统,但ubantu的确是不太常用,所以还是尝试一下win10下的GPU神经网络计算.从实践 ...

  9. 如何用Python一门语言通吃高性能并发、GPU计算和深度学习

    [CTO讲堂]如何用Python一门语言通吃高性能并发.GPU计算和深度学习 发表于2016-01-04 15:11| 4374次阅读| 来源CSDN| 4 条评论| 作者蒲婧 CTO俱乐部CTOCT ...

最新文章

  1. Nature: 人的肠道古细菌基因组集
  2. 基于ESP32模块利用检测线圈检测车模停止时间,室内视觉AI裁判系统
  3. 每天一个linux命令(14):head 命令
  4. 汇编----连接,编译
  5. Coursera公开课笔记: 斯坦福大学机器学习第四课“多变量线性回归(Linear Regression with Multiple Variables)”
  6. python flask分页_flask 分页
  7. [蓝桥杯] 蚂蚁感冒
  8. 技术论坛 | CCF YOCSEF上海即将在 CNCC 举办“知识图谱遇见社交媒体”专题论坛
  9. FreeBSD的功能特点
  10. Java 又双叒叕发布新版本,这么多版本如何灵活管理?
  11. WINDOWS上OpenCV需要有MediaPlayer才能正确运行?
  12. [三思笔记]---一步一步学DataGuard
  13. python做圆柱绕流_Fluent学习笔记(25)-----圆柱绕流(卡门涡街)
  14. 网课题库收录API接口以及免费网课查询API接口
  15. 学会Zynq(15)UDP sendto函数的使用
  16. git 解决授权失败的方法
  17. java linux 消息队列_我的第一个Linux程序----利用消息队列来实现IPC
  18. 我的世界服务器怎么开启坐标显示,坐标 - Minecraft Wiki,最详细的官方我的世界百科...
  19. 微信之父张小龙:你说我是错的,那你最好证明你是对的!
  20. Hadoop项目结构及其主要作用

热门文章

  1. matlab骑士的金币问题,Matlab阶跃信号函数
  2. 《战略品牌管理》思维导图,教你如何对品牌进行管理
  3. 【分享】5S管理各阶段的推进方法及工具
  4. 移动应用的时空连续性
  5. FusionCompute8.0.0 实验(3)安装windows虚拟机
  6. PHPcmsV9修改后台登陆界面地址
  7. MATLAB中果蝇味道浓度判定函数,果蝇优化算法的加权策略研究
  8. 谁来保护商务人士的数据安全?
  9. 阿里董事博尔吉-埃克霍尔姆成为爱立信CEO,2017年1月上任
  10. 国家职业分类大典公示 心理咨询行业迎来重大变革