大家好,我是小敢。
今天给大家分享一个神奇的 python 库,cupy
https://github.com/cupy/cupy
CuPy 是一个与 NumPy 和 SciPy 数组兼容的 Python 库,专为 GPU 加速计算而设计。
通过将 NumPy 替换为 CuPy 语法,你可以在 NVIDIA CUDA 或 AMD ROCm 平台上运行代码。
这允许你使用 GPU 加速执行与矩阵相关的任务,从而更快地处理更大的矩阵。
只需更换几行代码,你就可以利用 GPU 的大规模并行处理能力来显着加快索引、归一化和矩阵乘法等数组操作。
初体验
库的安装
你可以使用 pip 安装 CuPy,但在此之前你必须安装 cuda。
你可以使用以下命令来查看你安装的 cuda 版本。
!nvcc --version
可以看到我们这里使用的 cuda 版本是 11.8,因此,我们将继续安装 cupy-cuda11x 版本。
如果你运行的是较旧的 CUDA 版本,可以通过下表来查看对应要安装的 CuPy 软件包。
选择正确的版本后,我们将使用 pip 进行安装。
pip install cupy-cuda11x
CuPy 基础知识
这里,我们将比较 CuPy 和 Numpy 的语法,它们有 95% 的相似度。
首先使用 Python 列表创建 NumPy 和 CuPy 数组。之后,我们将计算向量的范数。
import cupy as cp
import numpy as np
x = [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 转换为 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
性能比较
我们将用 time.time() 计算代码执行时间。
这里我们将创建一个 3D NumPy 数组并执行一些数学函数。
import time
# NumPy and CPU Runtime
s = 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 - s
print("Time consumed by NumPy: ", np_time)
#output
#Time consumed by NumPy: 0.4807569980621338
同样,我们将创建一个 3D CuPy 数组,执行数学运算,并对其性能进行计时。
# CuPy and GPU Runtime
s = 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 - s
print("\nTime consumed by CuPy: ", cp_time)
#output
#Time consumed by CuPy: 0.001682281494140625
为了计算差异,我们将 NumPy 时间除以 CuPy 时间,看起来我们在使用 CuPy 时获得了快 300 倍的性能提升。
diff = np_time/cp_time
print(f'\nCuPy is {diff: .2f} X time faster than NumPy')
除了速度优势之外,CuPy 还提供卓越的多 GPU 支持,从而能够利用多个 GPU 的集群能力。
CuPy 提供了一种在 NVIDIA GPU 上加速 NumPy 代码的简单方法。只需进行一些修改,将 NumPy 替换为 CuPy,你就可以体验到数组计算的数量级加速。
最后
—
今天的分享就到这里。如果觉得不错,点赞,转发安排起来吧。
接下来我会分享更多的 「深度学习案例以及python相关的技术」,欢迎大家关注。
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板
若有侵权,请联系删除