
一、CuPy 介绍NumPy作为Python科学计算生态的基石凭借其简洁和丰富的数学函数库以及高效的C语言底层实现已成为数据科学、机器学习领域不可或缺的工具。然而NumPy的主要局限在于其计算完全依赖CPU当面对大规模数据集和高维矩阵运算时性能瓶颈日益凸显。而CuPy的出现几乎可以让用户无感的前提下完成性能的提升CuPy是一个开源的高性能计算库旨在利用GPU加速科学计算作为NumPy的GPU加速替代方案几乎完整复刻了NumPy的API设计允许开发者在不修改现有代码的情况下将计算任务迁移到GPU上执行。甚至用户只需将import numpy as np改为import cupy as cp即可直接使用GPU加速执行。CuPy不仅支持基础的数组操作还扩展实现了SciPy中的稀疏矩阵、信号处理等模块并且还允许用户自定义CUDA内核以应对特定计算需求。官方文档地址https://docs.cupy.dev/en/stable/index.htmlCuPy 安装CuPy 版本与 CUDA 的版本对应CUDACuPy 版本v11.2 ~ 11.8 (x86_64 / aarch64)cupy-cuda11xv12.x (x86_64 / aarch64)cupy-cuda12xv13.x (x86_64 / aarch64)cupy-cuda13x我的电脑是11.6这里安装cupy-cuda11x进行测试二、Numpy VS CuPy 计算速度对比Numpy 测试importtimeimportnumpyasnp# 测试不同规模的矩阵乘法sizes[10,100,500,1000,2000,5000,8000,10000]forsizeinsizes:anp.random.randn(size,size)bnp.random.randn(size,size)starttime.time()cnp.dot(a,b)use_timetime.time()-startprint(fSize{size}x{size}: Use Time:{use_time}s)运行结果Numpy 随着计算量的增多耗时逐渐增多。Cupy 测试使用相同的代码将import numpy as np替换为import cupy as npimporttimeimportcupyasnp## cupy 先预热, 让后续时间计算更准确dummynp.ones((100,100))_np.dot(dummy,dummy)# 测试不同规模的矩阵乘法sizes[10,100,500,1000,2000,5000,8000,10000]forsizeinsizes:anp.random.randn(size,size)bnp.random.randn(size,size)starttime.time()cnp.dot(a,b)use_timetime.time()-startprint(fSize{size}x{size}: Use Time:{use_time}s)CuPy 随着计算量的增多耗时提升不明显。对比 Numpy 速度提升非常明显。