当前位置:首页 > 数码 > 解锁GPU潜能-优化Python数据处感性能-借助CuPy库 (gpu锁频怎么解锁)

解锁GPU潜能-优化Python数据处感性能-借助CuPy库 (gpu锁频怎么解锁)

admin5个月前 (05-05)数码23

译者|布加迪

审校|重楼

CuPy简介

CuPy是一个/target=_blankclass=infotextkey>Python库,与NumPy和SciPy数组兼容,为GPU减速计算而设计。经过将NumPy换成CuPy语法,您可以在英伟达CUDA或AMDROCm平台上运转代码。这让您可以经常使用GPU减速口头与数组相关的义务,从而更快地处置更宏大的数组。

只有换掉几行代码,就可以应用GPU的大规模并行处置才干来清楚放慢索引、规范化和矩阵乘法等数组操作。

CuPy还支持访问低级CUDA性能。它准许经常使用RawKernels将ndarray传递给现有的CUDAC/C++程序,借助Streams简化性能,并准许间接调用CUDARuntimeAPI。

装置CuPy

您可以经常使用pip装置CuPy,但在此之前,您必定经常使用以下命令找到正确的CUDA版本。

!nvcc--versionnvcc:NVIDIA(R)CudacompilerdriverCopyright(c)2005-2022NVIDIACorporationBuiltonWed_Sep_21_10:33:58_PDT_2022Cudacompilationtools,release11.8,V11.8.89Buildcuda_11.8.r11.8/compiler.31833905_0

谷歌Colab的以后版本仿佛经常使用CUDA版本11.8。因此,咱们将继续装置cupy-cuda11x版本。

假设您经常使用较旧的CUDA版本,我提供了上方的表格来协助您确定要装置的适合的CuPy软件包。

选用正确的版本后,咱们将经常使用pip装置Python软件包。

pipinstallcupy-cuda11x

假设您已装置了Anaconda,还可以经常使用conda命令智能检测并装置CuPy软件包的正确版本。

condainstall-cconda-forgecupy

CuPy基础常识

在本节中,咱们将比拟CuPy和Numpy的语法,它们相似度为95%。您不是经常使用np,而是用cp替代它。

咱们将先经常使用Python列表创立NumPy和CuPy数组。之后,咱们将计算向量的范数。

importcupyascpimportnumpyasnpx=[3,4,5]x_np=np.array(x)x_cp=cp.array(x)l2_np=np.linalg.norm(x_np)l2_cp=cp.linalg.norm(x_cp)print("Numpy:",l2_np)print("Cupy:",l2_cp)

正如咱们所见,咱们获取了相似的结果。

Numpy:7.0710678118654755

Cupy:7.0710678118654755

为了将NumPy转换成CuPy数组,只有经常使用cp.asarray(X)。

x_array=np.array([10,22,30])x_cp_array=cp.asarray(x_array)type(x_cp_array)cupy.ndarray

或许,经常使用.get(),将CuPy转换成Numpy数组。

x_np_array=x_cp_array.get()type(x_np_array)numpy.ndarray
Python

性能比拟

在本节中,咱们将比拟NumPy和CuPy的性能。

咱们将经常使用time.time()对代码口头期间启动计时。而后,咱们将创立一个3DNumPy数组,并口头一些数学函数。

importtime#NumPyandCPURuntimes=time.time()x_cpu=np.ones((1000,100,1000))np_result=np.sqrt(np.sum(x_cpu**2,axis=-1))e=time.time()np_time=e-sprint("TimeconsumedbyNumPy:",np_time)TimeconsumedbyNumPy:0.5474584102630615

相似地,咱们将创立一个3DCuPy数组,口头数学运算,并启动计时以评测性能。

#CuPyandGPURuntimes=time.time()x_gpu=cp.ones((1000,100,1000))cp_result=cp.sqrt(cp.sum(x_gpu**2,axis=-1))e=time.time()cp_time=e-sprint("nTimeconsumedbyCuPy:",cp_time)TimeconsumedbyCuPy:0.001028299331665039

为了计算差异,咱们将NumPy期间除以CuPy期间,咱们经常使用CuPy后取得了500倍以上的性能优化。

diff=np_time/cp_timeprint(f'nCuPyis{diff:.2f}XtimefasterthanNumPy')CuPyis532.39XtimefasterthanNumPy

留意: 为了到达更好的成果,倡导启动一番预热运转,以尽量缩小期间动摇。

除了速度长处外,CuPy还提供了杰出的多GPU支持,可以充沛应用多个GPU的群体计算才干。

此外,假设您想比拟结果,可以看看我的Colab笔记本。

论断

总之,CuPy提供了一种在英伟达GPU上减速NumPy代码的简双方法。只有做几个修正,将NumPy交流成CuPy,就可以体验到数组计算在速度上有数量级的优化。这种性能优化使您可以处置宏大得多的数据集和模型,从而成功更先进的机器学习和迷信计算。

相关资源:

原文题目:LeveragingthePowerofGPUswithCuPyinPython,作者:AbidAliAwan


揭秘太阳:NASA借助数据科学工作站将太阳图像分析速度提高150倍

科学家借助RTX驱动的惠普Z系列数据科学工作站,过去需要数年才能完成的CPU数据分析和计算如今仅需不到一周时间。

美国航空航天局(NASA)正在使用Quadro RTX GPU提高数据分析的速度。

NASA的太阳动力学天文台(Solar Dynamics Obser-vatory)通过收集太阳图像帮助科学家和研究者深入了解各种类型的太阳变化及其对地球生命的影响。

这些数据对于研究者而言价值连城,但由于所收集的图像超过18 PB,因此分析这些信息的难度极大。

借助Quadro RTX驱动的惠普Z系列数据科学工作站,NASA团队可以轻松地对数据进行分类并分析图像,而且速度比CPU快150倍。

NASA所面临的大数据挑战

该天文台收集数据的方式是每1.3秒拍摄一次太阳图像。研究者开发了一种算法,可以消除不良像素等图像中的错误,然后将图像放入每天都在增加的档案中。

该算法非常精确,但由于具有近20 PB的图像,有数十亿像素被误当成错误。因此,NASA团队需要梳理1.5亿个错误文件(总共需要进行约1000亿次单独检测)并寻找一种方法来对良好像素与不良像素进行分类和标记。

使用常规计算几乎不可能完成这项工作。如果使用CPU,则要花费数年时间才能得到结果。即便使用目前可以创建的最佳多线程CPU算法,也要花费大约一年的时间对所有数据进行计算和分析。

NASA戈达德太空飞行中心(Goddard Space Flight Center)的太阳天文学家Raphael Attie表示:“一年时间对科学家来说是不够的,因为我们还要 探索 和迭代所发现的结果。即便计算需要一年时间,我们仍然需要长达十年的时间才能得到具体的结果。”

为了在更短的时间内得到结果,NASA团队开始研究NVIDIA GPU提供的并行处理功能。

海量数据需要更优解决方案

NASA的超级计算资源受到严格限制。研究者需要提供有关需要多少计算资源以及需要使用多长时间的详细信息。但当团队不确定使用多少计算资源才能使用大量数据进行实验时,就很难提供详细信息。

借助内置两个Quadro RTX 8000 GPU的惠普Z系列数据科学工作站,NASA研究者自己就能获得超级计算资源。他们已开始使用大数据分析技术和NVIDIA的加速计算库来研究该项目,将NVIDIA GPU的性能发挥得淋漓尽致。

该数据科学工作站使该团队在不到一周的时间内就完成了图像分析并获得结果。

NASA主管科研的天体物理学家Michael Kirk表示:“该数据科学工作站给我们的研究带来了巨大的可能性。我们现在可以进行这些以前无法想象的计算,而且速度比我们想象的还要快10-150倍。”

NASA团队运用AI、机器学习和数据分析对太阳进行了广泛的研究。他们的大多数数据科学工作流程都基于Python,并使用TensorFlow、Dask、CuPy和其他应用完成繁重的数据处理工作;使用Pandas、RAPIDS和CuDF进行统计研究;并且还会用到各种2D和3D可视化工具。

凭借该数据科学工作站,NASA团队充分发挥GPU的性能增强其分析工作流程,使研究者能够 探索 和迭代计算并更快获得结果。

NASA团队过滤和分析当前数据之后,就会使用这些信息来分析最初被标记为“良好”的其他像素,确认它们是否真的“良好”,从而对整个数据集进行验证。

工欲善其事,必先利其器

在AI和大数据分析中,如果云环境中的工作流不作出响应,就可能会严重影响项目。从长远来看,此类中断会破坏趋势、工作效率和动力。因此,Attie建议使用本地GPU驱动的工作站或笔记本电脑。此类工作站或笔记本电脑应具有足够的内存来处理部分数据处理工作,方便用户进行模型研究。

Attie认为:“我发现让工作流作出响应的必要条件是让GPU设备能够快速访问输入数据。当无法将数据保存在GPU设备所在机器的本地位置时,由于AI应用通常需要快速访问数据,因此必须有非常快速和灵活的网络。”

Attie和Kirk通过出版物和专业期刊分享项目成果。在研讨会和会议期间,他们将与同事进行讨论,并展示如何使用特定框架或自定义代码获取数据。随着居家办公人数的日益增加,NASA团队也越来越熟悉如何使用远程工具与他人联系并分享最新项目发现。

如何利用 PYTHON 进行深度学习液冷 GPU 加速计算?

蓝海大脑图数据一体机研究人员表示:在架构方面,CPU 仅由几个具有大缓存内存的核心组成,一次只可以处理几个软件线程。 相比之下,GPU 由数百个核心组成,可以同时处理数千个线程。 NumPy 已成为在 Python 中实现多维数据通信的实际方法。 然而,对于多核 GPU,这种实施并非最佳。 因此,对于较新的针对 GPU 优化的库实施 Numpy 数组或与 Numpy 数组进行互操作。 NVIDIA® CUDA® 是 NVIDIA 专为 GPU 通用计算开发的并行计算平台和编程模型。 CUDA 数组接口是描述 GPU 数组(张量)的标准格式,允许在不同的库之间共享 GPU 数组,而无需复制或转换数据。 CUDA 数组由 Numba、CuPy、MXNet 和 PyTorch 提供支持。 CuPy 是一个利用 GPU 库在 NVIDIA GPU 上实施 NumPy CUDA 数组的库。 Numba 是一个 Python 编译器,可以编译 Python 代码,以在支持 CUDA 的 GPU 上执行。 Numba 直接支持 NumPy 数组。 Apache MXNet 是一个灵活高效的深度学习库。 可以使用它的 NDArray 将模型的输入和输出表示和操作为多维数组。 NDArray 类似于 NumPy 的 ndarray,但它们可以在 GPU 上运行,以加速计算。 PyTorch 是一种开源深度学习框架,以出色的灵活性和易用性著称。 Pytorch Tensors 与 NumPy 的 ndarray 类似,但它们可以在 GPU 上运行,加速计算。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Python

“解锁GPU潜能-优化Python数据处感性能-借助CuPy库 (gpu锁频怎么解锁)” 的相关文章

Python中的LEGB规则 (python怎样打开)

Python中的LEGB规则 (python怎样打开)

Python 中的 LEGB 规则决定了变量和函数的作用域解析顺序。它代表了四个作用域层级: 局部作用域 闭包函数外的函数 全局作用域 内置作用域...

b-b-个入门建议!-Python-技术书籍推荐-附赠-11 (b+b+b等于什么)

b-b-个入门建议!-Python-技术书籍推荐-附赠-11 (b+b+b等于什么)

近年来,Python 持续火爆,越来越多的人开始入门学习 Python。RealPython 作为最受好评的 Python 学习网站,拥有超百万的浏览量,以下是 RealPython 的开发者给...

处置日常义务的终极工具!-Python-文件读写实战 (处置行为是什么意思)

处置日常义务的终极工具!-Python-文件读写实战 (处置行为是什么意思)

/target=_blankclass=infotextkey>Python文件的读写操作时,有很多须要思考的细节,这包含文件关上形式、读取和写入数据的方法、意外处置等。 在本文中,...

Python中的Random模块-摸索随机性的神奇环球 (python编程)

Python中的Random模块-摸索随机性的神奇环球 (python编程)

随机性在计算机编程和数据迷信中表演着至关关键的角色。/target=_blankclass=infotextkey>Python中的random模块提供了丰盛的工具和函数,协助咱们生成随机数...

惰性求值和lambda表达式的强大组合-Python高级技巧 (惰性求值和逻辑短路)

惰性求值和lambda表达式的强大组合-Python高级技巧 (惰性求值和逻辑短路)

Lambda 表达式 在 Python 中,Lambda 表达式是一个匿名函数,它可以在需要函数对象的地方使用。Lambda 表达式的语法如下: lambda arguments: exp...

一份收藏者必备清单-100个精选Python库 (收藏者的心态)

一份收藏者必备清单-100个精选Python库 (收藏者的心态)

/target=_blankclass=infotextkey>Python为啥这么火,这么多人学,就是由于繁难好学,性能弱小,整个社区十分生动,资料很多。而且这言语触及了方方面面,比如智能...

掌握网络世界的无限可能-Python分布式爬虫助力搜索引擎打造 (掌握网络世界的好处)

掌握网络世界的无限可能-Python分布式爬虫助力搜索引擎打造 (掌握网络世界的好处)

主从模式 主从模式是一种简单的分布式爬虫架构,其中一台主机作为控制节点,负责管理所有运行爬虫的从机。 主节点负责向从机分配任务,并接收新生成的任务。从机只需要从主节点接收任务,并把新生...

轻松把握多线程和多进程-Python编程进阶 (多线是什么意思)

轻松把握多线程和多进程-Python编程进阶 (多线是什么意思)

1、简介 咱们将讨论如何应用/target=_blankclass=infotextkey>Python口头多线程和多进程义务。它们提供了在单个进程或多个进程之间口头并发操作的方法。并...