将 cupy 转换为 numpy 非常慢

Posted

技术标签:

【中文标题】将 cupy 转换为 numpy 非常慢【英文标题】:convert cupy to numpy is very slow 【发布时间】:2020-01-03 12:40:57 【问题描述】:

条件

CuPy 版本 7.0.0 操作系统/平台 Ubuntu 18.04 CUDA 版本 10.1

重现代码

import cupy as np
import time
size = 60000000
tag = np.zeros(size)
#np.random.shuffle(tag)
value = np.random.random(size)
starttime = time.perf_counter()
for i in range(100):
    tag +=(value> 0.3)*100
print (time.perf_counter() - starttime)
starttime = time.perf_counter()
cpu_value = np.asnumpy(value)
print (time.perf_counter() - starttime)
结果是

0.02095769099832978 6.170492547998947

【问题讨论】:

【参考方案1】:

从 CuPy 转换为 NumPy 需要从 GPU 内存复制到 CPU。 此操作很昂贵,并且预计会很慢。理想情况下,您希望数据尽可能长时间地保存在 GPU 中,并且仅在绝对必要时才将其移至 CPU。

【讨论】:

以上是关于将 cupy 转换为 numpy 非常慢的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:不允许隐式转换为 NumPy 数组。请使用 `.get()` 显式构造 NumPy 数组。 -CuPy

`numpy.nanpercentile` 非常慢

将数组的列作为向量执行“for循环”时,Cupy 比 numpy 慢

为啥我系统上的所有 CuPy 函数都比它们的 NumPy 对应函数慢?

将张量变量(非常数)转换为 numpy 数组? [复制]

Numpy 排序比 Matlab 排序慢得多