小编Kei*_*JII的帖子

Cupy异步GPU内存传输

是否可以使用cupy(或chainer)从GPU异步传输内存到GPU ?

我正在训练一个相对较小的网络,其中包含无法容纳到GPU内存中的非常大的数据。此数据应保存在CPU内存中,并依次提供给GPU进行小批量计算。

内存传输时间是此应用程序的主要瓶颈。我认为异步内存传输解决了这个问题,即在计算一个小批量时,另一个小批量会在后台传输到GPU。

我想知道cupy.cuda.Stream上课有可能吗,但我还不知道。我将不胜感激任何意见/建议。

编辑:我认为以下代码使异步内存传输,但不是。

import numpy as np
import cupy as cp

a_cpu = np.ones((10000, 10000), dtype=np.float32)
b_cpu = np.ones((10000, 10000), dtype=np.float32)

a_stream = cp.cuda.Stream(non_blocking=True)
b_stream = cp.cuda.Stream(non_blocking=True)

a_gpu = cp.empty_like(a_cpu)
b_gpu = cp.empty_like(b_cpu)

a_gpu.set(a_cpu, stream=a_stream)
b_gpu.set(b_cpu, stream=b_stream)

# This should start before b_gpu.set() is finished.
a_gpu *= 2
Run Code Online (Sandbox Code Playgroud)

nvvp显示内存转移是顺序发生的。

python chainer cupy

6
推荐指数
1
解决办法
662
查看次数

标签 统计

chainer ×1

cupy ×1

python ×1