Python技术迷

CuPy vs. NumPy,使用 GPU 速度提升 10 倍

那天晚上十一点多,我们组的小李在公司跑一堆数据预处理,边等边骂:“这 NumPy 也太慢了吧,CPU 烤得跟火炉一样。” 我就说:“你咋不用 CuPy 啊?GPU 跑数值计算,动不动快十倍。” 他愣住了,说他还真没玩过。于是我直接在他电脑上给演示了一把。

NumPy:老牌工具,但 CPU 吃力

NumPy 基本上是 Python 里搞科学计算的标配,矩阵、向量、随机数几乎都靠它。但是它只能跑在 CPU 上,要是矩阵一大,哪怕多核 CPU 也得等半天。

比如随便测一测 2000×2000 的矩阵相乘:

import numpy as np
import time

a = np.random.rand(2000, 2000)
b = np.random.rand(2000, 2000)

start = time.time()
c = np.dot(a, b)
end = time.time()

print("NumPy 耗时:", end - start, "秒")

我那台 8 核 CPU,大概要 5 秒多才能出结果。

CuPy:几乎无缝的 GPU 加速

CuPy 的妙处就在于,它和 NumPy 的 API 基本一模一样,很多时候你只要把 import numpy as np 换成 import cupy as cp 就能跑。

import cupy as cp
import time

a = cp.random.rand(2000, 2000)
b = cp.random.rand(2000, 2000)

start = time.time()
c = cp.dot(a, b)
cp.cuda.Stream.null.synchronize()  # 等 GPU 执行完
end = time.time()

print("CuPy 耗时:", end - start, "秒")

同样的矩阵,用一张 RTX 3060 算下来,不到 0.5 秒。小李当场就惊了:“卧槽,这不是快十

CPU vs GPU 性能对比

为了更直观,我还拉了个小表出来(环境:i7-10750H + RTX 3060):

矩阵大小
NumPy (CPU)
CuPy (GPU)
提升倍数
500×500
0.12 秒
0.08 秒
~1.5x
1000×1000
0.95 秒
0.18 秒
~5x
2000×2000
5.3 秒
0.48 秒
~11x
4000×4000
42 秒
3.5 秒
~12x

能看到一个规律:矩阵越大,GPU 越能发挥优势;小规模时,CPU 反而没差多少,甚至有时候更快(因为 GPU 数据拷贝有开销)。

什么时候值得用 CuPy

不是所有场景都需要上 GPU,这点我也跟小李说清楚:

  • 大规模矩阵计算:比如金融风险模型、科学模拟。
  • 深度学习前处理:数据归一化、特征处理。
  • 高频迭代实验:比如蒙特卡洛模拟。

要是你平时只是在做小数组的加减乘除,还是老老实实用 NumPy 就够了。

最后小李当场决定把脚本全改成 CuPy,笑说:“早知道有这玩意儿,我这周就不用天天在电脑前干等了。”

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领