当前位置:首页 > 科技  > 软件

借助Python库CuPy,发掘GPU的威力

来源: 责编: 时间:2023-11-07 09:13:05 301观看
导读译者 | 布加迪审校 | 重楼CuPy简介CuPy是一个Python库,与NumPy和SciPy数组兼容,为GPU加速计算而设计。通过将NumPy换成CuPy语法,您可以在英伟达CUDA或AMD ROCm平台上运行代码。这让您可以使用GPU加速执行与数组相关的任

译者 | 布加迪XIw28资讯网——每日最新资讯28at.com

审校 | 重楼XIw28资讯网——每日最新资讯28at.com

CuPy简介

CuPy是一个Python库,与NumPy和SciPy数组兼容,为GPU加速计算而设计。通过将NumPy换CuPy语法,您可以在英伟达CUDA或AMD ROCm平台上运行代码。这可以使用GPU加速执行与数组相关的任务,从而更快地处理更庞大的数组。XIw28资讯网——每日最新资讯28at.com

只需换掉几行代码,就可以利用GPU的大规模并行处理能力来显著加快索引、规范化和矩阵乘法等数组操作。XIw28资讯网——每日最新资讯28at.com

CuPy还支持访问低级CUDA功能。它允许使用RawKernels将ndarray传递给现有的CUDA C/ C++程序,借助Streams简化性能,并允许直接调用CUDA Runtime API。XIw28资讯网——每日最新资讯28at.com

安装CuPy

您可以使用pip安装CuPy,但在此之前,您必须使用以下命令找到正确的CUDA版本。XIw28资讯网——每日最新资讯28at.com

XIw28资讯网——每日最新资讯28at.com

!nvcc --versionnvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2022 NVIDIA CorporationBuilt on Wed_Sep_21_10:33:58_PDT_2022Cuda compilation tools, release 11.8, V11.8.89Build cuda_11.8.r11.8/compiler.31833905_0

谷歌Colab的当前版本似乎使用CUDA版本11.8。因此,我们将继续安装cupy-cuda11x版本。XIw28资讯网——每日最新资讯28at.com

如果您使用较旧的CUDA版本,我提供了下面的表格来帮助您确定要安装的合适的CuPy软件包。XIw28资讯网——每日最新资讯28at.com

XIw28资讯网——每日最新资讯28at.com

选择正确的版本后,我们将使用pip安装Python软件包。XIw28资讯网——每日最新资讯28at.com

XIw28资讯网——每日最新资讯28at.com

pip install cupy-cuda11x

如果您已安装了Anaconda,还可以使用conda命令自动检测并安装CuPy软件的正确版本XIw28资讯网——每日最新资讯28at.com

XIw28资讯网——每日最新资讯28at.com

conda install -c conda-forge cupy

CuPy基础知识

在本节中,我们将比较CuPy和Numpy的语法,它们相似度为95%。不是使用np,而是用cp代替它。XIw28资讯网——每日最新资讯28at.com

我们将先使用Python列表创建NumPy和CuPy数组。之后,我们将计算向量的范数。XIw28资讯网——每日最新资讯28at.com

import cupy as cpimport numpy as npx = [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)

正如我们所,我们得到了类似的结果。XIw28资讯网——每日最新资讯28at.com

XIw28资讯网——每日最新资讯28at.com

Numpy: 7.0710678118654755XIw28资讯网——每日最新资讯28at.com

Cupy: 7.0710678118654755XIw28资讯网——每日最新资讯28at.com

为了将NumPy转换CuPy数组,只需使用cp.asarray(X)。XIw28资讯网——每日最新资讯28at.com

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

或者,使用.get()将CuPy转换Numpy数组。XIw28资讯网——每日最新资讯28at.com

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

性能比较

在本节中,我们将比较NumPy和CuPy的性能。XIw28资讯网——每日最新资讯28at.com

我们将使用time.time()对代码执行时间进行计时。然后,我们将创建一个3D NumPy数组并执行一些数学函数。XIw28资讯网——每日最新资讯28at.com

import time# NumPy and CPU Runtimes = 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("Time consumed by NumPy: ", np_time)Time consumed by NumPy: 0.5474584102630615

类似地,我们将创建一个3D CuPy数组,执行数学运算,并进行计时以评测性能XIw28资讯网——每日最新资讯28at.com

# CuPy and GPU Runtimes = 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("/nTime consumed by CuPy: ", cp_time)Time consumed by CuPy: 0.001028299331665039

为了计算差异,我们将NumPy时间除以CuPy时间,我们使用CuPy获得了500倍以上的性能提升。XIw28资讯网——每日最新资讯28at.com

diff = np_time/cp_timeprint(f'/nCuPy is {diff: .2f} X time faster than NumPy')CuPy is 532.39 X time faster than NumPy

注意为了达到更好的效果,建议进行一番预热运行,以尽量减少时间波动。XIw28资讯网——每日最新资讯28at.com

除了速度优势外,CuPy还提供了出色的多GPU支持,可以充分利用多个GPU的集体计算能力。XIw28资讯网——每日最新资讯28at.com

此外,如果您想比较结果,可以看看我的Colab笔记本。XIw28资讯网——每日最新资讯28at.com

结论

总之,CuPy提供了一种在英伟达GPU上加速NumPy代码的简单方法。只需做几个修改,将NumPy替换CuPy,就可以体验到数组计算在速度上有数量级的提升。这种性能提升使您可以处理庞大得多的数据集和模型,从而实现更先进的机器学习和科学计算。XIw28资讯网——每日最新资讯28at.com

相关资源:XIw28资讯网——每日最新资讯28at.com

  • 说明文档:https://docs.cupy.dev/en/stable/index.html
  • GitHubhttps://github.com/cupy/cupy
  • 示例:https://github.com/cupy/cupy/tree/main/examples
  • APIhttps://docs.cupy.dev/en/stable/reference/

原文标题:Leveraging the Power of GPUs with CuPy in Python,作者:Abid Ali AwanXIw28资讯网——每日最新资讯28at.com


XIw28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-17375-0.html借助Python库CuPy,发掘GPU的威力

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Golang 中的 Bytes 包详解之Bytes.Buffer

下一篇: 想快速进入人工智能领域的Java程序员?你准备好了吗?

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 一加首款折叠屏!一加Open渲染图出炉:罕见单手可握小尺寸

    8月5日消息,此前就有爆料称,一加首款折叠屏手机将会在第三季度上市,如今随着时间临近,新机的各种消息也开始浮出水面。据悉,这款新机将会被命名为“On
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
Top