cupy sum方法返回异常值的原因及正确使用方法咨询
问题原因
- 核心触发原因是CuPy的所有运算默认是GPU异步执行的,你直接打印
cp.sum(x)的返回值时,GPU端的求和计算还没有完成,CPU侧读取到的是设备内存空间的垃圾值(未完成写入的临时值、旧数据残留),所以会出现0.0、无意义大整数这类不符合预期的结果。 - 少数情况下是你安装的CuPy发行版和本地CUDA运行环境版本不匹配,导致计算逻辑异常。
正确使用cp.sum的方案
- 所有GPU计算的结果需要回传到CPU侧做打印、保存、和Python原生对象运算时,必须调用
get()方法将CuPy数组从设备内存拷贝到主机内存,修改后的示例代码如下:
import cupy as cp # 第一个示例 x = cp.array([2.0, 3.0]) print(cp.sum(x).get()) # 输出:5.0 # 第二个示例 x = cp.array([1, 2, 3, 4, 5, 6]) print(cp.sum(x).get()) # 输出:21
- 如果加了
get()后结果仍然异常,请卸载当前CuPy版本,重新安装和你本地CUDA版本匹配的CuPy包:比如你本地CUDA版本为11.8就安装cupy-cuda11x,CUDA版本为12.x就安装cupy-cuda12x。
内容的提问来源于stack exchange,提问作者Kim Seong Hyeon
相关产品推荐
相关产品推荐

