在 TX2 上运行 cupy

Posted

技术标签:

【中文标题】在 TX2 上运行 cupy【英文标题】:Running cupy on TX2 【发布时间】:2019-12-31 03:28:21 【问题描述】:

最近我在我的 tx2 上安装了 CUDA 10.0 和 cupy。 我在一篇文章中读到,它说 cupy 比 numpy 快 10 倍。 所以我运行了这个程序:

### Numpy and CPU
s = time.time()
x_cpu = np.ones((100,100,100))
e = time.time()
print(e - s)
### CuPy and GPU
s = time.time()
x_gpu = cp.ones((100,100,100))
cp.cuda.Stream.null.synchronize()
e = time.time()
print(e - s)

我得到的结果非常不同。 Numpy 只用了 0.00273,而 Cupy 用了 0.6795s。 是什么让cupy这么慢。我通过以下方式安装了cupy:

sudo pip3 install cupy -vvv 

任何线索都会有所帮助。 提前致谢!

【问题讨论】:

【参考方案1】:

矩阵大小非常小。 CuPy 设计用于处理大型矩阵,其中 CPU 和 GPU 之间的数据移动开销可以有效地与实际 GPU 计算重叠。

cupy.ones 在 GPU 中的执行时间非常快,在您的示例中,内核启动开销和设备同步需要比实际计算更多的时间。如果将矩阵大小增加到1000, 1000, 1000,您将能够看到 numpy 的实际加速。或者,您可以多次重复计算以隐藏内核启动开销。

### Numpy and CPU
s = time.time()
for i in range(10000):
    x_cpu = np.ones((100,100,100))
e = time.time()
print(e - s)
### CuPy and GPU
s = time.time()
for i in range(10000):
    x_gpu = cp.ones((100,100,100))
cp.cuda.Stream.null.synchronize()
e = time.time()
print(e - s)

结果是

3.421783447265625
0.7292115688323975

【讨论】:

谢谢,你是对的。我不得不使用 Numba 来强制它更快地工作。

以上是关于在 TX2 上运行 cupy的主要内容,如果未能解决你的问题,请参考以下文章

我如何在Jetson TX2上自动运行Python脚本?

DJI Manifold 2(在 nvidia jetson tx2 上运行)USB 设备在使用 Ubuntu 的软件更新更新后无法工作

如何指示 CuPy 在 GPU 中同时运行多个相同的作业?

可以在google colab上安装cupy吗?

在没有 GPU 支持的 MacOS 上安装 cupy

使用 `cupy.nanstd` 和 `cupy.nanvar` 时的`TypeError`