Anaconda GPU计算入门指南

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

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud


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库,用于构建,训练和评估支持多种高性能后端库(包括TensorFlowTheanoMicrosoft的Cognitive Toolkit)的神经网络模型。Keras也可以不用GPU,但是对于许多项目来说,如果你有一个GPU的话,训练速度可以提高10倍。

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

conda install keras-gpu

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

conda install notebook

jupyter notebook

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

值得一提的是像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的冰山一角,但是希望上面提到的能激励你深入了解。下面

下载Anaconda发行版:https://www.anaconda.com/download/

Keras教程:https://github.com/fchollet/keras-resources

Pyculib文档:http://pyculib.readthedocs.io/

从GTC 2017 Numba GPU教程:https://github.com/ContinuumIO/gtc2017-numba

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

https://devblogs.nvidia.com/parallelforall/seven-things-numba/

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


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

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

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

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

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


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
打赏
0
0
0
0
1807
分享
相关文章
【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)
【PyTorch&TensorBoard实战】GPU与CPU的计算速度对比(附代码)
476 0
【Hello AI】神行工具包(DeepGPU)-GPU计算服务增强工具集合
神行工具包(DeepGPU)是阿里云专门为GPU云服务器搭配的GPU计算服务增强工具集合,旨在帮助开发者在GPU云服务器上更快速地构建企业级服务能力
129686 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
45 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
阿里云服务器架构有啥区别?X86计算、Arm、GPU异构、裸金属和高性能计算对比
阿里云ECS涵盖x86、ARM、GPU/FPGA/ASIC、弹性裸金属及高性能计算等多种架构。x86架构采用Intel/AMD处理器,适用于广泛企业级应用;ARM架构低功耗,适合容器与微服务;GPU/FPGA/ASIC专为AI、图形处理设计;弹性裸金属提供物理机性能;高性能计算则针对大规模并行计算优化。
231 7
GPU加速与代码性能优化:挖掘计算潜力的深度探索
【10月更文挑战第20天】GPU加速与代码性能优化:挖掘计算潜力的深度探索
阿里云服务器计算架构X86/ARM/GPU/FPGA/ASIC/裸金属/超级计算集群有啥区别?
阿里云服务器ECS提供了多种计算架构,包括X86、ARM、GPU/FPGA/ASIC、弹性裸金属服务器及超级计算集群。X86架构常见且通用,适合大多数应用场景;ARM架构具备低功耗优势,适用于长期运行环境;GPU/FPGA/ASIC则针对深度学习、科学计算、视频处理等高性能需求;弹性裸金属服务器与超级计算集群则分别提供物理机级别的性能和高速RDMA互联,满足高性能计算和大规模训练需求。
224 6
GPU(图形处理单元)因其强大的并行计算能力而备受关注。与传统的CPU相比,GPU在处理大规模数据密集型任务时具有显著的优势。
GPU(图形处理单元)因其强大的并行计算能力而备受关注。与传统的CPU相比,GPU在处理大规模数据密集型任务时具有显著的优势。
函数计算产品使用问题之GPU实例留运行但未进行 GPU 计算,是否还会计费
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
阿里云服务器X86计算、Arm计算、GPU/FPGA/ASIC、高性能计算架构区别
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别,本文主要简单介绍下不同类型的云服务器有何不同,主要特点及适用场景有哪些。
阿里云服务器X86计算、Arm计算、GPU/FPGA/ASIC、高性能计算架构区别

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等